• Docker-compose


    Docker-compose

    服务编排:

    应用编排:

    • 单机环境下:shell/python脚本
    • 多机/集群环境下:ansible、saltstack、pubbet

    docker容器编排:

    • 单机:docker-compose
    • 多机/集群:docker swarm,mesos+ marathon,kubernetes

    一、Docker-Compose简介

    1.1 什么是Docker-Compose

    我们知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,今天给大家介绍Docker 官方产品Docker Compose。

    Dockerfile可以让用户管理一个单独的应用容器;而Compose则 允许用户在一个模板(YAML格式) 中定义一组相关联的应用容器( 被称为一个project,即项目),例如一个Web服务容器再加上后端的数据库服务容器等。

    Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

    Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service) 以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务 发现及负载均衡,比如Consul。

    Docker-Compose的工程配置文件默认为docker-compose. yml,可通过环境变量COMPOSE_FILE 或 -f 参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

    使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

    Compose允许用户通过一个单独的docker-compose. yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目 (project) 。

    Docker-Compose项目由Python编写,调用Docker服 务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。

    二、compose 部署

    2.1 Docker Compose 环境安装

    Docker Compose是 Docker 的独立产品,因此需要安装 Docker 之后再单独安装Docker Compose。

     #方法一:下载。
     curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
     #安装,给予执行权限
     chmod +x /usr/local/bin/docker-compose
     #查看版本
     docker-compose --version#方法二:也可以提前下载好安装包,之后上传到系统中。
     cd /opt/
     ls
     chmod +x docker-compose
     mv docker-compose /usr/local/bin/
     docker-compose --version
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.2 YAML文件格式及编写注意事项

    YAML文件格式

    YAML是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 json 数据描述语言,语法比 json简单的很多。

    • YAML数据结构通过缩进来表示
    • 连续的项目通过减号来表示
    • 键值对用冒号分隔
    • 数组用中括号 [ ] 括起来
    • hash 用花括号 { } 括起来
     #一个键如果有多个值。符号可以不缩进,但值要缩进。
     name:
     - zhangsan
     - lisi
     - wangwu
     ​
     name:
      - zhangsan
      - lisi
      - wangwu
      
     name: ["zhangsan", "lisi", "wangwu"]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    使用YAML时需要注意下面事项
    • 大小写敏感
    • 通过缩进表示层级关系
    • 不支持制表符tab键缩进T只能使用空格缩进
    • 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
    • 用 # 号注释
    • 符号字符后缩进1个空格,如"冒号 : "、 “逗号 ,”、"横杠 - "
    • 如果包含特殊字符用单引号(’ ')引起来会作为普通字符串处理,双引号(" "):特殊字符作为本身想表示的意思。
     #双引号示例:
     name: "Hi, \nTom"
     最后name值是两行内容
     name: Hi,
           Tom
     ​
     #单引号示例:
     name: 'Hi, \nTom'
     只会作为普通字符 
     name: Hi,\nTom
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    数据结构
     #对象: 键值对的字典
     animal: pets
     ​
     #数组: 一组按次序排列的列表
     - cat
     - dog
     - goldfish
     ​
     #布尔值
     debug: "true"
     debug: "false"
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    如何做好测试用例设计
    do while实现九宫格概率抽奖
    沙丁鱼优化算法(Sardine optimization algorithm,SOA)求解23个函数MATLAB
    Scala学习笔记
    【Python】(9)容器类型:集合(性质、添加、删除、运算)
    NPDP产品经理知识(市场调研-文化,团队,领导力)
    创建一个Keil项目
    设计模式_责任链
    WPF学习(3) -- 控件模板
    Android Studio实现一个新闻APP
  • 原文地址:https://blog.csdn.net/Y_S_J_112/article/details/128173401