docker compose编排工具

docker compose介绍

想要使用Docker部署应用,就要先在应用中编写Dockerfile文件来构建镜像。同样,在微服务项目中,我们也需要为每一个服务编写Dockerfile文件来构建镜像。构建完成后,就可以根据每一个镜像使用docker run或者docker service create命令创建并启动容器,这样我们就可以访问容器中的服务了。

虽然使用上述方式可以部署微服务项目,但考虑到微服务项目可能有多个子服务组成,并且每个服务启动过程中都需要配置额外的参数(如-e配置环境变量、–network指定网络、磁盘挂载等等)。这种情况下,每次更新微服务后,都要手动运行指令来重新启动容器,这就显得相当麻烦了。针对这种多服务部署的情况,Docker提供了Docker Compose编排工具来对多服务应用进行统一部署。Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景。

通过该编排工具,可以使用yml(或yaml)文件来配置应用程序服务,然后只需要一条简单的服务部署指令就可以从配置中创建并启动所有服务。

docker compose安装与卸载

  1. 环境要求:Docker Compose是依赖于Docker引擎的,所以在安装Docker Compose之前要确保机器上已经安装了Docker。https://github.com/docker/compose/releases (查看docker compose版本)
  2. 下载docker‐compose工具
    curl ‐L https://github.com/docker/compose/releases/download/1.24.0/docker‐compose‐`uname ‐s`‐`uname ‐m` ‐o /usr/local/bin/docker‐compose
  3. 设置docker compose可执行文件权限
    chmod +x /usr/local/bin/docker‐compose
    r:read w:write x:ex
  4. 查看docker compose版本
    docker‐compose ‐‐version
    PS:卸载docker compose
    sudo rm /usr/local/bin/docker‐compose

docker compose使用

步骤:分为三步(在创建的一个空目录下执行)

  1. 编写Dockerfile文件(为每个服务构建需要的镜像,方便迁移‐不是必须的)
  2. 编写docker‐compose.yml文件(编写部署服务相关指令)
  3. 运行docker‐compose up(启动yml文件中服务)
  1. 准备:两个镜像(本次演示就不通过Dockerfile构建了)
    docker pull mysql:5.7
    docker pull wordpress
  2. 需要新建一个空白目录,例如rwtest。新建一个docker‐compose.yml,编辑该文件
version: '3'
services:
  db:
    image: mysql:5.7
    volumes:
      ‐ db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  wordpress:
    depends_on:
      ‐ db
    image: wordpress:latest
    ports:
      ‐ "8001:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
volumes:
  db_data:

该文件中内容:新建db和wordpress容器。等同于:
docker run ‐‐name db ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql
docker run ‐‐name some‐wordpress ‐‐link db:mysql ‐p 8002:80 ‐d wordpress
3. 启动docker compose
docker‐compose up
4. 浏览器访问
http://ip:8001
5. 停止/重启服务:
docker‐compose stop/restart

docker compose指令说明

version: '3'
services:
  web:
    image: id/imagename:lable
    restart: on‐failure
    container_name: my‐web‐container
    ports:
      ‐ 8080:8080
    networks:
      ‐ example‐net
    depends_on:
      ‐ db
    deploy:
      replicas: 2
      restart_policy:
        condition: on‐failure
  db:
    image: mysql:5.6
    restart: on‐failure
    container_name: my‐mysql‐container
    ports:
      ‐ 3306:3306
    volumes:
      ‐ example‐mysql:/var/lib/mysql
    networks:
      ‐ example‐net
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mysql_database
    deploy:
      replicas: 1
      restart_policy:
        condition: on‐failure
      placement:
        constraints: [node.role == manager]
networks:
  example‐net:
volumes:
  example‐mysql:
  • version:version通常在一个docker-compose.yml文件的最顶部,用来表示文件内容的约束版本(类似于XML文件约束)(版本越高,支持的指令越多)
  • services用来声明服务,在services下的所有同缩进的应用名称都代表一个服务,如上面示例中的web和db。在进行多服务部署的时候,有多少个服务需要同时部署,就需要在services参数下面声明并配置多少个服务
    • image:容器启动需要依赖的镜像(如果本地没有会自动pull)
    • restart:服务重启策略
      • restart: “no” #服务默认值为no,即服务失败后没有任何动作
      • restart: always #表示服务会一直重新启动
      • restart: on-failure #表示服务提示失败错误后会重新启动
      • restart: unless-stopped #表示只有服务在停止后才会重启
    • container_name:指定容器名称
    • ports:指定服务向外暴露的端口
    • networks:指定容器使用的网络
    • depends_on:服务依赖决定了服务的依赖关系,如示例中的web依赖db,所以db服务会先于web服务启动,但并不表示db服务完全启动成功后才启动web服 务,它只决定启动的先后顺序而已
    • deploy:deploy参数是Docker Compose针对Swarm集群部署提供的,子参数专门用于指定与服务部署和运行相关的配置
      • replicas:表示服务实例的副本数量
      • restart_policy:estart_policy参数同前面介绍的restart类似,都是用来配置服务重启策略的,只是该属性配置在deploy参数下,并只在集群环境下生 效。该参数包含多个子属性及属性值
        • condition: on-failure #表示服务重启的条件,值有none、on-failure和any
        • delay: 5s #表示重启服务之间等待时间,默认为0
        • max_attempts: 3 #表示失败后尝试重启的次数
        • window: 120s #表示等待多久来确定服务是否启动成功
      • placement:placement用来配置指定位置的约束,当服务在Swarm集群环境下部署时会随机分配到管理节点和其他工作节点上。在上述示例中由于将mysql数据挂载到了本机example-mysql数据卷中,所以使用了placement 的子参数constraints:[node.role == manager]指定该服务只在manager管理节点上运行
    • environment用于配置服务启动时需要的环境变量。如上述示例中
      MYSQL_ROOT_PASSWORD表示数据库root用户的密码,MYSQL_DATABASE表示数据库启动后自动创建的数据库。
  • networks:用于配置服务网络
  • volumes:目录挂载,上述示例中是将mysql数据挂载到本地example-mysql数据卷
    中,如果该数据卷不存在,服务启动时也会默认创建

其他配置可参考:https://docs.docker.com/compose/compose-file/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值