15.docker-compose之多個服務編排啟動


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

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM