首页 > 其他 > 详细

Docker Compose容器编排

时间:2020-04-24 19:09:01      阅读:70      评论:0      收藏:0      [点我收藏+]
什么是Docker Compose容器编排
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。
其代码目前在 https://github.com/docker/compose 上开源。
Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。
通过第一部分中的介绍,我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 中有两个重要的概念:

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
    Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
    Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理

Docker Compose文件格式

  • Docker Compose使用的是yaml文件格式,后缀是 .yml
  • YAML是一种标记语言,很直观的数据序列化格式
  • 文件格式及编写注意事项:
    不支持制表符tab键缩进,需要使用空格缩进
    通常开头缩进2个空格
    字符后缩进一个空格,如冒号、逗号、横杠
    用井号注释
    如果包含特殊字符用单引号引起来
    Docker Compose配置常用字段
  • build dockerfile context:指定Dockerfile文件名构建镜像上下文路径
  • image:指定镜像
  • command:执行命令,覆盖默认命令
  • container name:指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale
  • deploy:指定部署和运行服务相关配置,只能在Swarm模式使用
  • environment:添加环境变量
  • networks:加入网络
  • ports:暴露容器端口,与-p相同,但是端口不能低于60
  • volumes:挂载宿主机路径或命令卷
  • restart:重启策略,默认no,always,no-failure,unless-stoped
  • hostname:容器主机名
    Docker Compose常用命令
  • build:重新构建服务
  • ps:列出容器
  • up:创建和启动容器
  • exec:在容器里面执行命令
  • scale:指定一个服务器启动数量
  • top:显示容器进程
  • logs:查看容器输出
  • down:删除容器、网络、数据卷和镜像
  • stop/start/restart:停止/启动/重启服务
    Compose命令说明
    基本使用格式
    docker-compose [选项] [命令] [参数...]
    docker-compose选项
  • --verbose输出更多调试信息
  • --version打印版本并输出
  • -f,--file FILE使用特定的compose模板文件,默认为docker-compose.yml
  • -p,--project-name NAME指定项目名称,默认使用目录名称
    编排脚本的结构
  • 编排脚本文件名要以.yml为后缀结尾
  • 一个完整的编排文件主要包含三个部分:version(版本)、services(服务)、networks(网络)
  • version是指docker-compose的版本,使用docker-compose version命令可以查看版本信息
  • services下的二级标签可以定义多个服务,用以创建多个服务,其中包含服务名称,镜像文件或者Dockerfile文件目录,端口映射,网络,数据卷挂载
  • networks,加入指定网络
    实战:Compose创建nginx服务
    1.目录结构
    [root@docker compose_nginx]# tree ./
    ./
    ├── docker-compose.yml  //创建模板脚本
    ├── nginx
    │   ├── Dockerfile      //创建容器脚本
    │   ├── nginx-1.12.2.tar.gz //复制源码包
    │   └── run.sh          //启动服务脚本
    └── wwwroot
    └── index.html      //站点文件

    2.下载compose

    [root@docker ~]# curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    [root@docker ~]# chmod +x /usr/local/bin/docker-compos

    3.创建镜像脚本

    [root@docker compose_nginx]# mkdir nginx
    [root@docker compose_nginx]# cd nginx/
    #创建Dockerfile文件
    [root@docker nginx]# vim Dockerfile
    #基础镜像
    FROM centos:7
    #用户信息
    MAINTAINER This is Nginx test
    #基于基础镜像系统更新,环境包安装
    RUN yum -y update
    RUN yum -y install make gcc gcc-c++ pcre-devel zlib-devel tar
    #创建nginx用户
    RUN useradd -M -s /sbin/nologin nginx
    #上传nginx软件包,解压(使用ADD选项可以直接解压上传的包)
    COPY nginx-1.12.2.tar.gz /opt/
    RUN tar zxvf /opt/nginx-1.12.2.tar.gz -C /opt
    #在指定目录下,开始编译安装nginx
    WORKDIR /opt/nginx-1.12.2/
    RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
    RUN make && make install
    #设置环境变量
    ENV PATH /usr/local/nginx/sbin:$PATH
    #指定端口
    EXPOSE 80
    #修改Nginx配置文件,以非daemon方式启动
    RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
    #添加运行脚本,设置权限
    ADD run.sh /run.sh
    RUN chmod 755 /run.sh
    #指定容器开启时执行的脚本
    CMD ["/run.sh"]
    #创建运行脚本
    [root@docker nginx]# vim run.sh
    #!/bin/bash
    /usr/local/nginx/sbin/nginx

    4.创建编排脚本

    [root@docker compose_nginx]# vim docker-compose.yml
    version: ‘3‘
    services:
    nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
     - 1234:80
     - 1235:443
    networks:
     - abc
    volumes:
     - ./wwwroot:/usr/local/nginx/html
    networks:
    abc:

    5.创建站点挂载目录

    [root@docker compose_nginx]# mkdir wwwroot
    [root@docker compose_nginx]# cd wwwroot/
    [root@docker wwwroot]# vim index.html
    <h1>this is nginx test web</h1>

    6.运行容器

    [root@docker compose_nginx]# docker-compose -f docker-compose.yml up -d
    [root@docker compose_nginx]# docker images
    REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
    compose_nginx_nginx   latest              01537841f84e        13 seconds ago      585MB
    centos                7                   5e35e350aded        5 months ago        203MB
    [root@docker compose_nginx]# docker ps -a
    CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                                         NAMES
    7a90b2804334        compose_nginx_nginx   "/run.sh"           18 seconds ago      Up 18 seconds       0.0.0.0:1234->80/tcp, 0.0.0.0:1235->443/tcp   compose_nginx_nginx_1

    技术分享图片

Docker Compose容器编排

原文:https://blog.51cto.com/14557905/2489974

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!