下面是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: