软件集装箱化平台,可让开发者构建应用程序时,将它与环境一起打包到一个容器中,发布应用到任意平台中。
能在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,
如:Tomcat运行在一个Docker,MySQL运行在另外一个Docker,两者可以运行在同一个服务器。
1.docker client 客户端
docker客户端输入指令,驱动服务端执行对应操作。
2.docker daemon docker 守护进程
Docker的守护进程,客户端向Daemon发送命令去执行Docker相关操作,得到结果再通过Daemon将结果返回。
3.docker images 镜像
Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
4.docker container 容器
镜像相当于Java中的类,容器就像实例化后的对象,一个镜像可以实例化多个容器,容器通过镜像启动。
镜像中的应用程序运行后形成的进程就是容器,是Docker会给容器进程做隔离,对外不可见。
Docker容器通过镜像启动,容器是Docker的执行单元,容器中可以运行客户的多个进程。
5.docker registry 镜像仓库
Docker用仓库保存用户创建的镜像,仓库分共有和私有两种。
Docker公司自己提供了最大的公有仓库Docker Hub,可在Docker Hub上创建账户,保存分享自己创建的镜像。
1.简化配置、打包软件、快速部署
能将环境和配置放入代码然后部署,Docker配置能在各种环境中使用,将应用环境和底层环境解耦。
Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭。
2.代码管道化管理
对代码以流式pipeline管道化进行管理,从开发者的机器到生产环境机器这个流程中都能有效管理。
Docker提供了跨越异构环境以一致性的微环境,从开发到部署实现流畅发布。
3.应用隔离、网络建模、开发生产化、服务合并
多个应用服务部署在多个Docker中相互隔离,
可在一台机器上启动数百个(甚至数千个)相互隔离的容器,对网络进行建模。
单机上最大程度模拟生产分布式部署的环境
Docker能合并多个服务,不多的操作系统内存占用,跨实例共享多个空闲的内存。
- # yum 包更新到最新
- sudo sudo yum update
- # 下载关于Docker的依赖环境
- sudo yum -y install yum-utils device-mapper-persistent-data lvm2
- # 设置镜像下载Docker的镜像源
- sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- # 安装Docker
- sudo yum makecache fast
- sudo yum -y install docker-ce
- # 查看docker版本,出现输入的界面都按 y
- docker -v
- # 启动docker:
- systemctl start docker
- # 停止docker:
- systemctl stop docker
- # 重启docker:
- systemctl restart docker
- # 查看docker状态:
- systemctl status docker
- # 开机启动:
- systemctl enable docker
- # 设置开机自动启动
- systemctl enable docker
- # 测试
- docker run hello-world
- # 查看docker概要信息
- docker info
- # 查看docker帮助文档
- docker --help
- # 拉取镜像到本地 例:docker pull centos:7
- docker pull 镜像名称 (在hub.docker.com(官方docker镜像仓库)右侧有拉取镜像的地址)
- # 查看全部本地镜像
- docker images
- # 删除本地镜像1
- docker image rm 镜像id
- # 删除所有镜像
- docker rmi `docker images -q`
- # 修改镜像名称
- docker tag 镜像id 新镜像名称:版本
- # 进入容器 例:docker exec -it haoshun /bin/bash
- docker exec 参数 容器id或者容器名 /bin/bash # 退出容器,容器不会关闭
- # 查看所有容器
- docker ps –a
- # 查看正在运行的容器
- docker ps
- # 查看最后一次运行的容器
- docker ps –l
- # 查看停止的容器
- docker ps -f status=exited
- # 格式化查看
- docker ps -a --format "table {{.Image}}\t{{.ID}}\t{{.Ports}}\t{{.Names}}"
- # 启动容器:
- docker start 容器名称(或者容器ID)
- # 停止容器:
- docker stop 容器名称(或者容器ID)
- # 删除容器:如果是运行状态则删除失败,需要停止容器才能删除
- docker rm 容器名称或者容器id
- # 交互式方式创建容器
- docker run -it --name=容器名称 镜像名称:标签 /bin/bash
- # 守护式方式创建容器:
- docker run -di --name=容器名称 镜像名称:标签
- # 登录守护式容器方式:
- docker exec -it 容器名称 (或者容器ID) /bin/bash
-
- # 容器保存为镜像 容器ID 镜像名称:版本
- docker commit mynginx mynginx_i
- # 镜像备份 将镜像保存为tar 文件
- docker save -o mynginx.tar mynginx_i
- # 镜像恢复与迁移 先删除掉mynginx_img镜像 然后执行此命令进行恢复
- docker load -i mynginx.tar
- # 配置数据卷 例:docker run -it --name=test2 -v /vagrant/test_data2:/home/test_data2:/home/test_data3 ubuntu:16.04
- docker run ... -v 宿主机目录(文件):容器内目录(文件)...
-
- # 退出当前容器
- exit
- # 拉取私有仓库镜像 registry镜像搭建属于我们自己的私有仓库
- docker pull registry
- # 从私有仓库拉取镜像
- docker pull 私有仓库服务器ip:5000/centos:7
- # 启动私有仓库容器
- docker run -di --name=registry -p 5000:5000 registry
- MySQL部署
- # 拉取mysql镜像
- docker pull centos/mysql-57-centos7
- # 创建容器
- docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-
- tomcat部署
- # 拉取镜像
- docker pull tomcat:7-jre7
- # 创建容器 -p表示地址映射
- docker run -di --name=mytomcat -p 9000:8080
- -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
-
- Nginx部署
- # 拉取镜像
- docker pull nginx
- # 创建Nginx容器
- docker run -di --name=mynginx -p 80:80 nginx
-
- Redis部署
- # 拉取镜像
- docker pull redis
- # 创建容器
- docker run -di --name=myredis -p 6379:6379 redis
1.安装
- 安装主从 Mysql 、修改配置文件
- # docker内部安装vim
- apt-get updateapt-get install vim
-
- # 下载8.0.19版本:
- docker pull mysql:8.0.19
- # 查看mysql镜像:
- docker images
-
- ## docker容器是相互隔离的,容器有独立IP,不同容器用相同的端口不会冲突
- # 启动 Master 容器
- docker run -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:8.0.19
- # 启动 Slave 容器
- docker run -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:8.0.19
-
- # 查看 MySql 运行情况
- docker ps -a
2.改配置文件
- # 进入到Master容器内部,使用容器ID或者名称均可:
- docker exec -it 8b71301f25ed /bin/bash //8b71301f25ed为容器ID
- docker exec -it mysql-master /bin/bash //mysql-master为容器名称
-
- # 切换到 /etc/mysql 目录下
- # 编辑 master的 my.cnf文件
- vim my.cnf
-
- [mysqld]
- ## 同一局域网内注意要唯一
- server-id=100
- ## 开启二进制日志功能,可以随便取(关键)
- log-bin=master-bin
- binlog-format=ROW // 二级制日志格式,有三种 row,statement,mixed
- binlog-do-db=数据库名 //同步的数据库名称,如果不配置,表示同步所有的库
-
- # 退出docker容器 重启 mysql-master
- docker restart mysql-master
-
- # 编辑 slave 的 my.cnf文件
- vim my.cnf
-
- [mysqld]
- ## 设置server_id,注意要唯一
- server-id=101
- ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
- log-bin=mysql-slave-bin
- ## relay_log配置中继日志
- relay_log=mysql-relay-bin
- read_only=1 ## 设置为只读,该项如果不设置,表示slave可读可写
-
- # 退出docker容器 重启 mysql-slave
- docker restart mysql-slave
1.查看Master的信息
- # 进入Master库mysql客户端:查看Master状态,记住File、Position
- show master status
- # 容器id查询容器的IP进行查询:
- docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
2.Slave 连接 Master
- # 进入到Slave库myslq客户端,执行命令。
- change master to master_host='172.17.0.2', master_user='root', master_password='12345678', master_port=3306, master_log_file='master-bin.000001', master_log_pos=3552, master_connect_retry=30;
master_host :Master库的地址,指的是容器的独立ip,可以通过
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 | 容器id查询容器的IP进行查询:
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
3.查看 Slave 连接情况
- # 启动slave
- start slave
-
- # 查询slave
- show slave status \G;
- ##获取官方镜像
- [root@server1 ~]# docker pull registry
- [root@server1 ~]# docker images registry
-
- ##以该镜像为基础,启动容器
- [root@server1 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry
-
- ##上传镜像(需要先更改镜像名称,以指定上传的仓库)
- [root@server1 ~]# docker tag webserver:latest localhost:5000/webservr:latest
- [root@server1 ~]# docker push localhost:5000/webservr ##上传
-
- ##查看挂载的地址
- [root@server1 ~]# tree /opt/registry
-
- ##查看所挂载的镜像
- [root@server1 ~]# curl localhost:5000/v2/_catalog
-
- ## 向私有仓库上传、下载镜像
- #1.docker tag重命名需要上传的镜像
- docker tag IMAGE 服务器IP:端口/IMAGE_NAME
-
- # 2.docker push上传刚刚重命名的镜像
- docker push 服务器IP:端口/IMAGE_NAME
- # docker run -it -v/宿主机绝对路径目录:/容器内目录镜像名
- docker run -it -v /myDataVolume:/dataVolumeContriner centos:centos7.8.2003 / bin/bash
docker inspect 容器ID,查看容器内部细节,可看到这两个目录绑定成功
可避免手动编写一堆 docker run 命令,用一个配置文件来定义整个应用的服务。
- # 1.用 pip 安装
- sudo pip install docker-compose
- # 2.linux上进行命令下载安装
- sudo curl -L "https://github.com/docker/compose/releases/download/{version}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- # curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose
-
- # 授权 Docker Compose 二进制文件:
- sudo chmod +x /usr/local/bin/docker-compose
-
- # 验证 Docker Compose 是否正确安装:
- docker-compose --version
- 1.编写 Docker Compose 文件
- version: '3'
-
- services:
- web:
- build: .
- ports:
- - "5000:5000"
- volumes:
- - .:/code
- depends_on:
- - redis
- redis:
- image: "redis:alpine"
-
- 使用命令
- # 启动应用
- docker-compose up
- # 后台运行,则可以加上 -d 参数:
- docker-compose up -d
- # 查看 Docker Compose 应用的状态
- docker-compose ps
- # 停止应用
- docker-compose down
-
- # 查看配置命令
- # docker compose config# 构建并后台启动
- # docker compose up -d# 将会停止UP命令启动的容器,并删除容器
- # docker compose down #重新启动nginx容器
- # docker compose restart # 启动已存在的容器命令
- # docker compose start# 停止正在运行的容器命令
- # docker compose stop#暂停容器
- # docker compose pause # 恢复容器
- # docker compose unpause# 构建镜像
- # docker compose bulid# 下载镜像
- # docker compose pull# 删除容器
- # docker compose rm # 查看运行的镜像
- # docker compose ps# 查看进程
- # docker compose top# 查看服务日志输出
- # docker compose logs