1.定义
docker容器的编排工具:定义和运行多个相关联的容器(单台dockerhost上) ,简单理解:可以同时管理(增、删、改、查等)多个容器。但没有资源管理功能,需要k8s。
官网文档地址: https://docs.docker.com/compose/overview/
docker镜像在创建之后,往往需要自己手动pull来获取镜像,然后执行run命令来运行。当服务需要用到多种容器,容器之间又产生了各种依赖和连接的时候,部署一个服务的手动操作是令人感到十分厌烦的。
docker-compose技术,就是通过一个 .yml 配置文件,将所有的容器的部署方法、文件映射、容器连接等等一系列的配置写在一个配置文件里,最后只需要执行docker-compose up命令就会像执行脚本一样的去一个个安装容器并自动部署他们,极大的便利了复杂服务的部署。
2.定位:
定义和运行多个docker容器的应用,同时可以对多个容器进行编排
3.核心概念
服务(service):一个应用的容器,服务可以存在多个
项目(project):由一组关联的容器组成的一个完整业务单元,在“docker-compose.yml”中定义。
==========================================
官方在线安装
curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-(uname -s)-(uname -m)" -o /usr/local/bin/docker-compose //验证已有docker-compose命令 docker-compose -v //设置tab键的空格距离。 vim /root/.vimrc set tabstop=2 source /root/.vimrc ##### 一.docker-compose的配置文件实例 通过识别一个docker-compose.yml的配置文件,去管理容器。 vim docker-compose.yml version: '3.2' services: nginx: restart: always image: nginx:latest container_name: web-nginx ports: - 90:80 volumes: - ./webserver:/usr/share/nginx/html
第一个部分: version: 指定语法格式的版本。
第二部分:service:定义服务,(想要运行什么样的容器)
----------------------------------
nginx: //服务的名称 container_name: web-nginx //容器名称,相当于docker run --name image: nginx:latest //使用的镜像 restart: always //随开机自启 ports: //端口映射,相当于docker run -p - 90:80 volumes: //持久化挂载,相当于docker run -v command: //容器执行命令,相当于docker file 里的CMD networks: //定义网络,相当于docker run --network ------------------------------------ //运行docker-compose规定的容器, PS:在执行这条命令的当前目录下,也需要有一个docker-compose.yml的配置文件,并且通常只有一个。 docker-compose up PS: docker-compose up 之后,会显示都做了什么操作,并占用终端, 如果想要退出终端占用,加-d 选项。 //保持后台运行 docker-compose up -d //停止运行 docker-compose stop //重启 docker-compose restart 并且,在运行container的过程中,还可以支持Dockerfile vim Dockerfile FROM nginx COPY ./webserver/index.html /usr/share/nginx/html/index.html //修改docker-compose.yaml文件 version: '3.2' services: nginx: build: . restart: always image: nginx-web:v1.0 container_name: test-web ports: - 91:80 //运行docker-compose命令的时候,如果文件内有Dockerfile,可以提前 执行:docker-compose build 或者在up -d 的时候添加--build 选项。 docker-compose up -d --build
二.docker-compose管理命令介绍
1、compose具有管理应用程序整个生命周期的命令
启动,停止和重建服务
查看正在运行的服务的状态
流式传输运行服务的日志输出
在服务上运行一次性命令
2、常用命令
**#帮助信息**
docker-compose --help
**#用来创建或重新创建服务使用的镜像**
docker-compose build
**#用于通过容器发送SIGKILL信号强行停止服务**
docker-compose kill nginx
PS: kill 服务名称,默认所有服务
**#显示service的日志信息**
docker-compose logs
**#暂停和恢复服务**
docker-compose pause
docker-compose pause #暂停服务
docker-compose unpause #恢复被暂停的服务
**#用于查看服务中的端口与物理机的映射关系**
docker-compose port nginx 80
例如:docker-compose port nginx_web 80 #查看服务中80端口映射到物 理机上的那个端口
**#用于显示当前项目下的容器**
docker-compose ps
注意,此命令与docker ps不同作用,此命令会显示停止后的容器(状态为 Exited),只针对某个项目。
**#用于拉取服务依赖的镜像**
docker-compose pull
**#用于重启某个服务中的所有容器**
docker-compose restart
例如:docker-compose restart service_name #只有正在运行的服务可以 使用重启命令,停止的服务是不可以重启
**#删除停止的服务(服务里的容器)**
docker-compose rm
-f #强制删除
-v #删除与容器相关的卷(volumes)
**#用于在服务中运行一个一次性的命令**
docker-compose run nginx ls /
这个命令会新建一个容器,它的配置和service的配置相同。但两者之间还是有两点不同之处
1、run指定的命令会直接覆盖掉service配置中指定的命令
2、run命令启动的容器不会创建在service配置中指定的端口,如果需要指定使用--service-ports指定
**#启动/停止运行某个服务的所有容器**
docker-compose start/stop
docker-compose start 启动运行某个服务的所有容器
docker-compose stop 停止运行某个服务的所有容器
**#指定某个服务启动的容器个数**
vim docker-compose.yml version: '3.2' services: nginx: restart: always image: nginx:latest ports: - 80 volumes: - ./webserver:/usr/share/nginx/html docker-compose scale nginx=2
PS: 如果需要运行多个容器,那么容器名称就不要给了,会随机生成,还有注意端口映射问题,不要冲突(docker-compose port 字段支持仅写 一个容器暴露的端口)。
备注:
docker-compose 运行时是需要指定service名称,可以同时指定多个,也可以不指定。不指定时默认就是对配置文件中所有的service执行命令。
-f #用于指定配置文件
-p #用于指定项目名称
##### **三.搭建wordpress的博客**
官方文档地址:https://docs.docker.com/compose/wordpress/
按照官方文档创建一个目录,并且编辑docker-compose.yml文件,文件内容如下:
docker-compose.yml version: '3.2' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: docker-compose up -d
PS:如果没有对应的mysql和wordpress镜像,docker会自动从中央仓库下载,这里我们因为网络原因会给大家下载好的镜像,请同学们自行导入到本地。
##### 四.**docker-compose中添加应用网络**
1.yaml文件中使用已有网络。
docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 demo1 mkdir /root/network1 cd /root/network1 vim docker-compose.yaml version: '3' services: nginx: container_name: web-nginx11 image: nginx restart: always ports: - 99:80 networks: demo1: ipv4_address: 172.22.16.23 networks: demo1: external: true
PS: external该部分表示使用外部网络demo,外部为true。
docker-compose up -d
docker inspect web-nginx 查看容器内网络是否成功分配。
2.yaml文件中使用内部网络。
mkdir /root/network2 cd /root/network2 vim docker-compose.yml version: '3' services: nginx: container_name: web-nginx2 image: nginx restart: always ports: - 97:80 networks: demo2: networks: demo2:
3.文件内自定义网络网段
version: "3" networks: demo3: driver: bridge ipam: config: - subnet: 172.46.1.0/24 services: nginx: container_name: web2 restart: always image: nginx:latest ports: - 92:80 networks: demo3: ipv4_address: 172.46.1.2