Docker运维教程(11)docker compose容器编排

TangLu 未命名 2019-11-14 3850 0

一、Docker Compose介绍

它是一款容器编排工具,解决了Dockerfile一次只能管理一个容器的问题,使用compose可以一次管理多个容器,适合多个容器组合使用的场景,比如Harbor仓库就是使用Docker Compose进行管理。而之所以称compose为单机版编排工具是因为它无法跨宿主机工作。


二、Docker Compose配置

1、安装Docker Compose

yum install docker-compose


2、Docker Compose文件编写

Docker Compose通过yaml文件进行配置和工作,Docker Compose官方语法说明https://docs.docker.com/compose/compose-file,注意版本要和Docker引擎版本相匹配。Docker Compose的默认配置文件名应为docker-compose.yaml,或者通过-f指定其他配置名,如果文件路径为/mydocker/docker-compose.yml,那么容器的名字都会自动加上上级目录名为前缀,比如mydocker_centos_latest

version: "3.7"                 #指定Docker Compose版本
services:                    #在compose中每一个容器都定义为一个services
  redis:                   #第一个services命名为redis,进行扩容或管理操作需要用到这个名字
    image: redis:alpine          #指定使用的镜像来启动容器,如果镜像不存在会去仓库拉
    ports:                 #端口 映射
      - "6379"
    networks:
      - frontend             #创建一个自定义网络,默认为bridge,如果没有配置的话在启动compose时会根据docker-compose.yaml所属文件夹创建一个同名网络
    deploy:                 #指定与部署和运行服务相关的配置
      replicas: 2             #指定运行容器的数量,形成集群
      update_config:            #配置更新服务,用于无缝更新
        parallelism: 2         #一次更新容器的数量
        delay: 10s           #更新一组容器的等待时间
      restart_policy:           #重启策略
        condition: on-failure

  web:
    build:                      #该镜像不从仓库拉取而是本地构建
        context: ./flash            #定义需要从哪个目录读取dockerfile
        dockerfile: Dockerfile          #dockerfile的名字
    ports:
        - 8080:5000

  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:                        
      backend:                               #创建了一个名为backend的网络,并指定了网络类型和网段
        ipam:
          driver: default
          config:
            - subnet: "172.29.0.0./24"
    deploy:
      placement:
        constraints: [node.role == manager]

  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - "5000:80"
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure

  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
      placement:
        constraints: [node.role == manager]

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]


三、Docker Compose常用管理命令(需要在docker compose.yml文件所在路径执行)

docker-compose up -d  #创建并后台启动compose中的所有容器
docker-compose up -d --build  #如果配置文件中的容器发生修改,可以重新build并自动重启相关容器
docker-compose up --scale web=3  -d #将web这个容器扩展成3个(也可以缩容),并且自动实现负载均衡,
docker-compose down    #停止并删除容器
docker-compose restart  #重启容器
docker-compose stop      #停止所有容器
docker-compose ps 
docker-compose kill


评论