下面是3個容器編排一起啟動的docker-compose.yml文件,注意看里面的depends_on屬性,它能讓容器先后啟動
version: "3" services: mysql: image: mariadb:10.4.15 container_name: compass-mariadb environment: - MYSQL_ROOT_PASSWORD=compass#123456 privileged: true restart: always ports: - "6603:3306" volumes: - mysqlconfig:/etc/mysql/conf.d - mysqllog:/logs - mysqldata:/var/lib/mysql depends_on: - rabbit-mq - redis rabbit-mq: image: registry.kpmg.com/rabbitmq:3.8.3-management container_name: compass-rabbitmq environment: - RABBITMQ_DEFAULT_USER=compass - RABBITMQ_DEFAULT_PASS=compass123456 privileged: true restart: always ports: - "16673:15672" - "6673:5672" redis: image: harbor.cn.kworld.kpmg.com/library/redis:6.0.9 container_name: my-redis command: redis-server --appendonly yes --requirepass 123456 restart: always ports: - "26379:6379" volumes: - redisdata:/data volumes: mysqlconfig: external: false mysqllog: mysqldata: redisdata:
運行效果圖如下:

我們可以看到,mysql最后啟動起來。
下面貼上每個命令對應的中文含義:
version: "3" #docker-compose的版本,會根據不同的docker版本來寫,這里3就可以了
services: #docker-compose中用服務來描述容器,這里是服務的總入口
mysql: #服務名,和容器名不是一個概念
image: mariadb:10.4.15 #當前容器所需要的對應鏡像,寫鏡像id也可以
container_name: compass-mariadb #容器名,和docker的容器名是一樣的
env_file: #以文件形式來配置變量
- mysqlconfig.env #當前上下文中的文件,里面內容是MYSQL_ROOT_PASSWORD=compass#123456 用=來做key value分割
privileged: true #權限相關
restart: always #自動重啟
ports: #對應端口
- "6603:3306"
volumes:
- mysqlconfig:/etc/mysql/conf.d #默認名數據卷
- mysqllog:/logs #默認名數據卷
- mysqldata:/var/lib/mysql #默認名數據卷
depends_on:
- rabbit-mq
- redis
rabbit-mq: #服務名,和容器名不是一個概念
image: registry.kpmg.com/rabbitmq:3.8.3-management #當前容器所需要的對應鏡像,寫鏡像id也可以
container_name: compass-rabbitmq #容器名,和docker的容器名是一樣的
environment: #環境變量
- RABBITMQ_DEFAULT_USER=compass
- RABBITMQ_DEFAULT_PASS=compass123456
privileged: true #權限相關
restart: always #自動重啟
ports: #對應端口
- "16673:15672"
- "6673:5672"
redis: #服務名,和容器名不是一個概念
image: harbor.cn.kworld.kpmg.com/library/redis:6.0.9 #當前容器所需要的對應鏡像,寫鏡像id也可以
container_name: my-redis #容器名,和docker的容器名是一樣的
command: redis-server --appendonly yes --requirepass 123456 #啟動容器額外的命令
restart: always #自動重啟
ports: #對應端口
- "26379:6379"
volumes: #默認名數據卷
- redisdata:/data
volumes: #使用默認名數據卷需要來這邊定義
mysqlconfig:
external: #是否外部的數據卷,默認否,如果寫true代表可以用自己提前創建好的數據卷名
false
mysqllog:
mysqldata:
redisdata:
