docker官方提供的用于批量容器编排,compose是官方提供的开源项目node
主要的目的是实现一个应用同时须要多个子服务协同完成,根据docker-compose文件将不一样的服务部署到不一样的容器中python
单台机器,编排多个容器【如一个项目须要:redis,mysql,Nginx,web,至关于4个关联的容器】mysql
官网文档:https://docs.docker.com/compose/git
1.docker-compose安装github
# 下载 官方:sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 备用:sudo curl -L https://dn-dao-github-mirror.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" > /usr/local/bin/docker-compose # 赋权目录 sudo chmod +x /usr/local/bin/docker-compose # 查看 docker-compose --version docker-compose version 1.17.1, build 6d101fb docker-py version: 2.6.1 CPython version: 2.7.5 OpenSSL version: OpenSSL 1.0.2k-fips 26 Jan 2017
2.运用docker-compose三步骤web
Using Compose is basically a three-step process: 1. Define your app’s environment with a Dockerfile so it can be reproduced anywhere. 2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment. 3. Run docker-compose up and Compose starts and runs your entire app.
3.docker-compose.yaml文件编排规则redis
官方文档:https://docs.docker.com/compose/compose-file/sql
yaml文件版本和docker引擎的版本有关联docker
dockerfile文件同样都是键值对形式 # 第一层:版本层 version: '版本号' # 第二层:服务层 services: 服务1: # 服务配置 images build networks volumes 服务2: 服务3: # 第三层其它配置 volumes: networks: configs: # 关键字介绍 version 版本号,不一样的版本号对应着不一样的docker引擎,默认向下兼容,详细见上面的官方文档 Services 服务名称,定义不一样的服务 networks 网络,指定的网络,每一个服务也能够指定本身的网络,前提该网络必须先存在或者最外层networks定义的网络,默认建立 bridge 网络,若是使用相同的网络,docker就容许服务间经过服务名互相通讯了 volumes 用于指引 Docker 来建立新的卷 # 经常使用配置范例以下 version: "3.8" services: redis: # 将建立单独的容器的redis服务 image: redis:alpine # 指定镜像,通常是包含仓库地址的镜像名,会自动去仓库拉取 ports: - "6379:6379" # 指定容器映射出的端口 - "5000:5000" volumes: - type: volume # 定义一个volume新卷,注意不管在宿主机仍是容器中修改内容都会实时反应到对应文件中 source: myredis-data # 定义卷名,经过docker volume inspect myredis-data 可查看卷名对应的宿主机目录位置 target: /app # 定义上面的卷与redis服务中的/app目录 networks: - frontend # 指定容器使用的网络,必须在构建前先存在 command: python /app/AsyncIssuedMain.py -type 2 # 指定容器启动时启动的命令,默认覆盖dockerfile中cmd指定的命令 secrets: - source: web_token # 指定密钥的名字,须要在外层已经定义存在的,以普通文件挂载到副本中,在宿主机的位置为/run/secrets target: secret-name # 定义的密钥文件名,即在副本中为/run/secrets/secret-name stop_grace_period: 1m30s # 定义优雅的停服时间,停容器时给id为1的进程发送SIGTERM信号,默认10s,若是10s后没有处理该信号,则会被SIGKILL信号强制杀掉 deploy: # 此节点是用于集群模式在多台服务器上建立多个副本即多个相同的容器不容的ip和容器名,提高并发 replicas: 2 # 建立n个副本,默认为1 update_config: # 定义在滚动升级update时的具体操做 parallelism: 2 # 每次更新副本的数量 failure_action: rollback # 定义升级失败后自动回滚,默认是pause升级失败自动阻止其余副本升级 restart_policy: # 定义容器异常退出时的策略 condition: on-failure # 容器以非0返回值退出,会当即重启 max_attempts: 3 # 最多重启次数 window: 120s # 最多等待时间确认是否重启成功 delay: 10s # 每次重启的间隔时间 placement: # 定义本服务和主机属性相关的副本中的限制 max_replicas_per_node: 1 # 定义最大副本的数量 constraints: - "node.role==manager" # 表示只在管理节点上部署副本,支持副本id、hostname、引擎标签、自定义标签指定 db: build: . # 基于当前yaml文件目录下的dockerfile文件构建镜像,默认镜像名为:compose文件目录名_compose文件定义的服务名 volumes: - /usr/db-data:/var/lib/postgresql/data # 指定主机与容器对应的映射目录 - /configs/config.py:/app/config.py # 宿主机目录中的文件在容器第一次启动时会覆盖容器中对应文件名的内容 networks: - backend secrets: - db_password # 指定使用的密钥 environment: # 在副本中添加环境变量 DB_USER: SUN DB_PASSWD_FILE: /run/secrets/db_password # 密码的位置(挂载到每一个服务副本中的密钥) DB_NAME: ORDER deploy: placement: # 定义本服务和主机属性相关的副本中的限制 constraints: - 'node.role == worker' # 部署在工做节点上 # 自定义标签须要经过docker node update --label-add db_center=yes 工做节点主机名,部署前提交建立 - 'node.labels.db_center == yes' # 且工做节点的自定义标签为db_center的机器上 networks: frontend: backend: driver: overlay # 默认都是采用此网络驱动 driver_opts: encrypted: 'yes' # 是否加密数据层,通常涉及数据库支付等时根据需求配置,会增长开销 volumes: db-data: secrets: # 数据层加密时配置密钥 db_password: external: true # 密钥定义为stack部署前必须存在 web_token: file: ./devsecrets/payment_token # 部署时按需建立密钥,须要在主机路劲下的文件中配置所需的值,不安全 实战部署wordpress博客程序 官方文档:https://docs.docker.com/compose/wordpress/ 经常使用命令 执行下面全部的命令前提是,切换到含有docker-compose.yml文件的目录下 # 帮助命令 docker-compose --hlep # 加-d之后台运行服务 docker-compose up -d # 按指定的文件构建容器,默认是当前目录下的docker-compose.yml文件构建 docker-compose -f docker-compose-beijin.yml up -d # 中止而且删除服务,并删掉全部的资源如容器、网络等镜像和映射不会删 docker-compose down # 查看服务运行状况 docker-compose ps # 查看服务的启动日志及服务标准输出日志 docker-compose logs # 重启服务 docker-compose restart # 中止服务运行 docker-compose stop # 查看容器中的运行的进程状况,默认每一个服务的进程id为1 docker-compose top # stop掉服务了,删除资源使用以下命令 docker-compose rm