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