docker-compose 介绍安装 管理容器
Docker Compose 容器单机编排
Docker Compose 介绍
在宿主机启动较多的容器时候,如果仍用手动执行docker run 启动每个容器不仅很麻烦而且因为有依
赖关系等导致容易出错,而且无法不方便分类管理
可以使用 docker 单机多容器的编排工具 docker-compose 解决
docker-compose 项目是Docker 官方的开源项目,负责实现对Docker 容器集群的快速编排,可以用它
同时管理多个容器
比如: 可以解决容器之间的依赖关系,就像启动一个nginx 前端服务的时候会调用后端的 tomcat,那就
得先启动tomcat,但是启动tomcat 容器还需要依赖MySQL数据库,那就还得先启动MySQL,dockercompose 可以用来解决这样的嵌套依赖关系,并且可以替代docker命令对容器进行创建、启动和停止
等手工的操作
因此如果说docker命令就像linux的命令,docker-compose.yml 文件就像shell脚本,可以自动的执行容
器批量操作,从而实现自动化的容器管理,也或者说docker命令相当于ansible命令,那么docker
compose文件,就相当于ansible-playbook的yaml文件
github地址: https://github.com/docker/compose
官方地址: https://docs.docker.com/compose/
安装和准备
安装 Docker Compose
方法2: 离线安装,直接从github或国内镜像站下载安装对应版本
参看说明: https://github.com/docker/compose/releases
此方法安装版本可方便指定,推荐方法,但网络下载较慢
wget https://github.com/docker/compose/releases/download/v5.3.0/docker-compose-linux-x86_64
#从国内镜像站下载
wget https://get.daocloud.io/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)
mv docker-compose-Linux-x86_64 docker-compose
chmod +x docker-compose
mv docker-compose /usr/local/bin/
ldd /usr/local/bin/docker-compose
docker-compose version
查看命令格式
官方文档: https://docs.docker.com/compose/reference/
docker-compose --help Define and run multi-container applications with Docker. Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker-compose -h|--help #选项说明: -f,–file FILE #指定Compose 模板文件,默认为docker-compose.yml|yaml -p,–project-name NAME #指定项目名称,默认将使用当前所在目录名称作为项目名。 --verbose #显示更多输出信息 --log-level LEVEL #定义日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL) --no-ansi #不显示ANSI 控制字符 -v, --version #显示版本
#以下为命令选项,需要在docker-compose.yml|yaml 文件所在在目录里执行 config -q #查看当前配置,没有错误不输出任何信息 up #创建并启动容器 build #构建镜像 bundle #从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备 份文件 create #创建服务 down #停止和删除所有容器、网络、镜像和卷 events #从容器接收实时事件,可以指定json 日志格式 exec #进入指定容器进行操作 help #显示帮助细信息 images #显示镜像信息 kill #强制终止运行中的容器 logs #查看容器的日志 pause #暂停服务 port #查看端口 ps #列出容器 pull #重新拉取镜像,镜像发生变化后,需要重新拉取镜像 push #上传镜像 restart #重启服务 rm #删除已经停止的服务 run #一次性运行容器 scale #设置指定服务运行的容器个数,新版已废弃 start #启动服务 stop #停止服务 top #显示容器运行状态 unpause #取消暂定
#默认查找的文件 docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml
docker compose 文件格式
官方文档: https://docs.docker.com/compose/compose-file/
docker compose 文件是一个yaml格式的文件,所以注意行首的缩进很严格
注意: docker compose 其实也支持json文件格式, 比如: docker compose -f docker-compose.json up
https://docs.docker.com/compose/faq/#can-i-use-json-instead-of-yaml-for-mycompose-file
默认docker-compose命令会调用当前目录下的docker-compose.yml的文件,因此一般执行dockercompose命令前先进入docker-compose.yml文件所在目录
实战案例: docker run 和 Docker Compose 文件相互转换
利用网站将docker 命令自动生成 Docker Compose
https://www.composerize.com/

利用网站 Docker Compose 文件转换为 docker run 命令
https://www.decomposerize.com/

docker run --network wordpress-net -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=123456 --name mysql -d --restart=always registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle
docker run -d -p 80:80 --network wordpress-net --name wordpress --restart=always registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache
mkdir wordpress
cat docker-compose.yml
name: wordpress services: mysql: networks: - wordpress-net environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=wordpress - MYSQL_USER=wordpress - MYSQL_PASSWORD=123456 container_name: mysql restart: always image: registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle wordpress: ports: - 80:80 networks: - wordpress-net container_name: wordpress restart: always image: registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache networks: wordpress-net
#生成自定义网络,网段IP自动分配置
#networks:
#wordpress-net:
语法检测
docker-compose config -q
docker-compose up -d
docker-compose ps
[root@master2 wordpress]# docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS mysql registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle "docker-entrypoint.s…" mysql 4 seconds ago Up 4 seconds 3306/tcp, 33060/tcp wordpress registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache "docker-entrypoint.s…" wordpress 4 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp, [::]:80->80/tcp [root@master2 wordpress]#
docker-compose logs -f mysql
docker-compose logs mysql
docker-compose images
[root@master2 wordpress]# docker-compose images CONTAINER REPOSITORY TAG PLATFORM IMAGE ID SIZE CREATED mysql registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql 8.0.29-oracle linux/amd64 44f98f4dd825 132MB 3 years ago wordpress registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress php8.2-apache linux/amd64 adced536588e 241MB 2 years ago
[root@master2 wordpress]# docker network ls NETWORK ID NAME DRIVER SCOPE 10b44d3d7b5a bridge bridge local c169b2366f46 host host local 29bfa655c46d none null local 52bd893c60f7 wordpress-prod-net bridge local a83da1ff9540 wordpress-test-net bridge local 68e9ddf327d3 wordpress_wordpress-net bridge local
docker network inspect wordpress_wordpress-net
自定义网络
wordpress02
name: wordpress02 services: mysql: networks: - wordpress-net environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=wordpress - MYSQL_USER=wordpress - MYSQL_PASSWORD=123456 container_name: mysql02 restart: always image: registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle wordpress: ports: - 81:80 networks: - wordpress-net container_name: wordpress02 restart: always image: registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache networks: wordpress-net: ipam: driver: default config: - subnet: 172.27.0.0/24
docker-compose up -d
[root@master2 wordpress02]# docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS mysql02 registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle "docker-entrypoint.s…" mysql 34 seconds ago Up 33 seconds 3306/tcp, 33060/tcp wordpress02 registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache "docker-entrypoint.s…" wordpress 34 seconds ago Up 33 seconds 0.0.0.0:81->80/tcp, [::]:81->80/tcp
[root@master2 wordpress02]# docker network ls NETWORK ID NAME DRIVER SCOPE 10b44d3d7b5a bridge bridge local c169b2366f46 host host local 29bfa655c46d none null local 543f4defe4ed wordpress02_wordpress-net bridge local 52bd893c60f7 wordpress-prod-net bridge local a83da1ff9540 wordpress-test-net bridge local 68e9ddf327d3 wordpress_wordpress-net bridge local
docker network inspect wordpress02_wordpress-net
[root@master2 wordpress02]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 72ae9538356a registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 3306/tcp, 33060/tcp mysql02 6465b6f04476 registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:81->80/tcp, [::]:81->80/tcp wordpress02 890c8dbece2b registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache "docker-entrypoint.s…" 10 minutes ago Up 10 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp wordpress 66aa839911f2 registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle "docker-entrypoint.s…" 10 minutes ago Up 10 minutes 3306/tcp, 33060/tcp mysql [root@master2 wordpress02]#
docker-compose down
[root@master2 wordpress02]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 890c8dbece2b registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp wordpress 66aa839911f2 registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 3306/tcp, 33060/tcp mysql [root@master2 wordpress02]#
docker-compose -f /data/wordpress/docker-compose.yml ps
[root@master2 wordpress02]# docker-compose -f /data/wordpress/docker-compose.yml ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS mysql registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle "docker-entrypoint.s…" mysql 13 minutes ago Up 13 minutes 3306/tcp, 33060/tcp wordpress registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache "docker-entrypoint.s…" wordpress 13 minutes ago Up 13 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp
docker-compose -f /data/wordpress/docker-compose.yml down
浙公网安备 33010602011771号