Docker Compose官方文档地址:docs.docker.com/compose/com…
一.Docker Compose 介绍
这篇文章重点讲解Docker compose
的相关概念和命令。Compose是单机编排容器集群
或者是分布式服务容器
的应用工具。通过Compose,可以使用YAML文件来配置应用程序的服务。然后使用一个命令,就可以从配置中创建并启动所有服务。
Docker-Compose
是一个容器编排工具。通过一个.yml或.yaml文件,将所有的容器的部署方法、文件映射、容器端口映射等情况写在一个配置文件里,执行docker compose up
命令就像执行脚本一样,一个一个的安装并部署容器。如下图所示,通过Docker Compose
可以创建一个Docker的集群。
二.Compose 和 Docker 兼容性
三.安装 Docker Compose
# 下载最新版的docker-compose文件
sudo curl -L http://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# 查看是否存在
ls /usr/local/bin/docker-compose
# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 添加软连接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 测试安装结果
docker-compose --version
# 卸载
rm -rf /usr/local/bin/docker-compose
rm -rf /usr/bin/docker-compose
四.Docker Compose 常用命令
docker-compose -h # 查看帮助
docker-compose up # 创建并运行所有容器
docker-compose up -d # 创建并后台运行所有容器
docker-compose -f docker-compose.yml up -d # 指定模板
docker-compose down # 停止并删除容器、网络、卷、镜像。
docker-compose logs # 查看容器输出日志
docker-compose logs -f 容器名 # 查看容器实时日志
docker-compose pull # 拉取依赖镜像
dokcer-compose config # 检查配置
dokcer-compose config -q # 检查配置,有问题才有输出
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务
docker-compose up -d nginx # 构建建启动nignx容器
docker-compose exec nginx bash # 登录到nginx容器中
docker-compose ps # 显示所有容器
docker-compose build nginx # 构建镜像
docker-compose build --no-cache nginx # 不带缓存的构建
docker-compose config -q # 验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
docker-compose events --json nginx # 以json的形式输出nginx的docker日志
docker-compose pause nginx # 暂停nignx容器
docker-compose unpause nginx # 恢复ningx容器
docker-compose rm nginx # 删除容器(删除前必须关闭容器)
docker-compose scale nginx=3 # 负载均衡,注意端口号不能重复
五.Docker Compose 模板文件
由于业务服务依赖 MySQL 等环境依赖,所以需要拆分 2 套 Docker Compose 的配置文件,分别为 docker-compose.env.yml
环境配置和 docker-compose.service.yml
业务服务配置,保证先成功启动依赖,再启动服务。depends_on
配置,也能决定服务的启动顺序。但是千万注意,depends_on 并不会等待服务完全就绪,只是确保它们在启动时的顺序,并不稳定。
docker-compose.env.yml
。
version: '3'
services:
mysql:
image: mysql:8 # 使用的镜像
container_name: yuoj-mysql # 启动的实例名称
environment:
MYSQL_ROOT_PASSWORD: root # root 用户密码
ports:
- "3306:3306" # 端口映射
volumes:
- ./.mysql-data:/var/lib/mysql # 将数据目录挂载到本地目录以进行持久化
- ./mysql-init:/docker-entrypoint-initdb.d # 启动脚本
restart: always # 崩溃后自动重启
networks:
- mynetwork # 指定网络
redis:
image: redis:6
container_name: yuoj-redis
ports:
- "6379:6379"
networks:
- mynetwork
volumes:
- ./.redis-data:/data # 持久化
rabbitmq:
image: rabbitmq:3.12.6-management # 支持管理面板的消息队列
container_name: yuoj-rabbitmq
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
ports:
- "5672:5672"
- "15672:15672" # RabbitMQ Dashboard 端口
volumes:
- ./.rabbitmq-data:/var/lib/rabbitmq # 持久化
networks:
- mynetwork
nacos:
image: nacos/nacos-server:v2.2.0-slim
container_name: yuoj-nacos
ports:
- "8848:8848"
volumes:
- ./.nacos-data:/home/nacos/data
networks:
- mynetwork
environment:
- MODE=standalone # 单节点模式启动
- PREFER_HOST_MODE=hostname # 支持 hostname
- TZ=Asia/Shanghai # 控制时区
networks:
mynetwork:
docker-compose.service.yml
。
version: '3'
services:
# 网关服务
wuke-gateway:
container_name: wuke-gateway # 网关容器昵称
build: # 服务的 Docker 构建文件位置
context: ./wuke
dockerfile: Dockerfile
ports:
- "8101:8101"
networks:
- mynetwork
# 用户服务
wuke-user-service:
container_name: wuke-user-service
build:
context: ./wuke-user-service-user-service
dockerfile: Dockerfile
ports:
- "8102:8102"
networks:
- mynetwork
depends_on: # 本服务依赖的服务,控制启动先后顺序
- wuke-gateway
# 订单服务
wuke-order-service:
container_name: wuke-order-service
build:
context: ./wuke-order-service
dockerfile: Dockerfile
ports:
- "8103:8103"
networks:
- mynetwork
depends_on:
- wuke-order-service
- wuke-gateway
# 网络,不定义的话就是默认网络
networks:
mynetwork: