11 docker compose 编排工具

11.1 docker compose 介绍

根据前面所学的知识可知,想要使用Docker部署应用,就要先在应用中编写Dockerfile 文件来构建镜像。同样,在微服务项目中,我们也需要为每一个服务编写Dockerfile文件 来构建镜像。构建完成后,就可以根据每一个镜像使用docker run或者docker service create命令创建并启动容器,这样我们就可以访问容器中的服务了。 微服务架构中:涉及的服务数量巨多。 虽然使用上述方式可以部署微服务项目,但考虑到微服务项目可能有多个子服务组成, 并且每个服务启动过程中都需要配置额外的参数(如-e配置环境变量、--network指定网 络、磁盘挂载等等)。这种情况下,每次更新微服务后,都要手动运行指令来重新启动 容器,这就显得相当麻烦了。针对这种多服务部署的情况,Docker提供了Docker Compose编排工具来对多服务应用进行统一部署。Compose是Docker的服务编排工 具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个 Docker容器,非常适合组合使用多个容器进行开发的场景。 通过该编排工具,可以使用yml(或yaml)文件来配置应用程序服务,然后只需要一条简 单的服务部署指令就可以从配置中创建并启动所有服务。

11.2 docker compose 安装与卸载

安装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

11.3 docker compose 使用

11.3.1 例子

 步骤:分为三步(在创建的一个空目录下执行)
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 注意:键值对冒号后要有空格

11.3.2 docker compose 指令说明

 1 version: '3'  
 2 services:  
 3   web:  
 4     image: id/imagename:lable  
 5     restart: on‐failure  
 6     container_name: my‐web‐container  
 7     ports:  
 8       ‐ 8080:8080  
 9    networks:   
 10       ‐ example‐net
 11     depends_on:
 12       ‐ db
 13     deploy:
 14       replicas: 2
 15       restart_policy:
 16         condition: on‐failure
 17   db:
 18     image: mysql:5.6
 19     restart: on‐failure
 20     container_name: my‐mysql‐container    
 21     ports:
 22       ‐ 3306:3306
 23     volumes:
 24       ‐ example‐mysql:/var/lib/mysql
 25     networks:
 26       ‐ example‐net
 27     environment:
 28       MYSQL_ROOT_PASSWORD: root
 29       MYSQL_DATABASE: mysql_database
 30     deploy:
 31       replicas: 1
 32       restart_policy:
 33         condition: on‐failure
 34       placement:
 35         constraints: [node.role == manager]
 36 networks:
 37   example‐net:
 38 volumes:
 39   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/

docker--docker compose 编排工具的更多相关文章

  1. Docker Compose编排工具部署lnmp实践及理论(详细)

    目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...

  2. docker之compose 编排项目

    一.docker-compose 的介绍 docker-compose是一种容器编排工具,可以将多个docker容器关联部署.通过yaml文件,可以描述应用的架构,如使用什么镜像.数据卷.网络.绑定服 ...

  3. 走进docker-swarm 带大家快速掌握docker自带编排工具

    什么是Docker Swarm? 对比Docker 前面我们介绍过Docker可以理解成是一个我们的服务的独立运行的容器,那么在实际工作中,我们的系统可能是一个微服务应用,系统中根据业务拆分成多个模块 ...

  4. (转)Docker - 使用 compose 编排服务

    在园子里看到了这篇关于 compose 的文章,非常好!!转过来,先附上原文地址 http://www.cnblogs.com/52fhy/p/5991344.html ----- 入门示例 一般步骤 ...

  5. Docker集群编排工具之Kubernetes(K8s)介绍、安装及使用

    K8s基础原理 k8s中文社区:https://www.kubernetes.org.cn/ 简介 Kubernetes与较早的集群管理系统Mesos和YARN相比,对容器尤其是 Docker的支持更 ...

  6. Docker:单机编排工具docker-compose [十二]

    一.docker-compose的安装 1.安装 curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.re ...

  7. Docker之Compose服务编排

    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...

  8. (转)Docker之Compose服务编排

    转自:https://www.cnblogs.com/52fhy/p/5991344.html Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过 ...

  9. docker compose 编排

    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...

随机推荐

  1. win32创建工具栏的自定义图标

    注意点:使用LoadImage函数加载bmp图片,这里特指BMP图片,其实LoadImage可以加载很多格式的图片 HBITMAP bitmap = (HBITMAP)LoadImage((HINST ...

  2. 【HDU1011】Starship Troopers

    题目大意:给定一棵 N 个节点的无根树,每个节点有一个重量和一个价值,现给出一些单位,每个单位可以接受 20 个重量单位,求如何分配这些单位,使得获得的价值最大. 题解:dp 好题qwq..真的毒瘤. ...

  3. NETCONF

    NETCONF协议(Network Configration Protocol) NETCONF是一个基于XML的交换机配置接口,用于替代CLI.SNMP等配置交换机. 本质上来说,NETCONF就是 ...

  4. 关于Vue 刷新页面

    前言 Vue 中是单页面,当然需要刷新数据咯 你一定遇到这样的需求::比如在删除或者增加一条记录的时候希望当前页面可以重新刷新或者 这个页面有个组件 ,但是这个组件里面的点击事件还是到当前页面 怎么就 ...

  5. DRF介绍,DRF项目开发,DRF项目的视图类的dispatch源码解析

    目录 一.DRF介绍 1. 什么是DRF 2. 为什么要用DRF (1)使用DRF的原因 (2)站在开发者的角度来说用DRF的好处(暂时列举这么多) 二.用DRF开发后端项目 三.APIView请求生 ...

  6. shell练习--PAT题目1003:我要通过!(成功案例)

    “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: ...

  7. net core 返回404方法

    public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { ...

  8. mysql AVG()函数 语法

    mysql AVG()函数 语法 作用:AVG 函数返回数值列的平均值.NULL 值不包括在计算中.大理石模组 语法:SELECT AVG(column_name) FROM table_name m ...

  9. .NET面试题系列(二十)XX

    遍历树.实现造成锁的代码.在线音乐网站 抽象工厂和工厂的区别 简单工厂 : 用来生产同一等级结构中的任意产品.(对于增加新的产品,无能为力) 工厂方法 :用来生产同一等级结构中的固定产品.(支持增加任 ...

  10. 2018百度之星初赛B轮 p1m2

    p1m2 Accepts: 954 Submissions: 4063 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/1310 ...