1、概述

1.1 简介

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
将所管理的容器分为三层:

  • 工程(project)
  • 服务(service)
  • 容器(container)

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
Docker-Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

1.2 步骤

  • ①使用Dockerfile文件定义应用程序的环境。
  • ②使用docker-compose.yml文件定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • ③执行docker-compose up命令来创建并启动所有服务。

Docker Compose的项目地址

2、部署

2.1 下载方式

进入Docker-compose的Github发布页面选择合适的版本
docker-compose 1.29.2
image.png

2.2 安装

  1. # Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。
  2. curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  3. # 国内的地址
  4. curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  5. # 设置文件可执行权限
  6. chmod +x /usr/local/bin/docker-compose
  7. # 创建软链接
  8. sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  9. # 查看版本信息
  10. docker-compose -version

2.3 卸载

  1. # 二进制包方式安装的,删除二进制文件即可
  2. rm /usr/local/bin/docker-compose

3、常用命令

3.1 命令格式

  1. docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  2. 命令选项如下:
  3. -f --file FILE指定Compose模板文件,默认为docker-compose.yml
  4. -p --project-name NAME 指定项目名称,默认使用当前所在目录为项目名
  5. --verbose 输出更多调试信息
  6. -v,-version 打印版本并退出
  7. --log-level LEVEL 定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL)
  • 命令补全
    1. curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

    3.2 启动容器 - up

    ```bash docker-compose up [options] [—scale SERVICE=NUM…] [SERVICE…]

命令选项包括: -d 在后台运行服务容器 -no-color 不是有颜色来区分不同的服务的控制输出 -no-deps 不启动服务所链接的容器 —force-recreate 强制重新创建容器,不能与-no-recreate同时使用 —no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用 —no-build 不自动构建缺失的服务镜像 —build 在启动容器前构建服务镜像 —abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用 -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒) —remove-orphans 删除服务中没有在compose文件中定义的容器

<a name="jmhLO"></a>
## 3.3 停止容器 - down
```bash
docker-compose down [options]
停止和删除容器、网络、卷、镜像。
选项包括:
–rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
-v, --volumes,                删除已经在compose文件中定义的和匿名的附在容器上的数据卷
--remove-orphans,        删除服务中没有在compose中定义的容器
docker-compose down  停用移除所有容器以及网络相关

3.4 查看日志 - logs

# 查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
docker-compose logs [options] [SERVICE...]

-f 跟踪日志输出

3.5 重新构建 - bulid

# 构建(重新构建)项目中的服务容器
docker-compose build [options] [--build-arg key=val...] [SERVICE...]

# 选项包括:
--compress 通过gzip压缩构建上下环境
--force-rm 删除构建过程中的临时容器
--no-cache 构建镜像过程中不使用缓存
--pull 始终尝试通过拉取操作来获取更新版本的镜像
-m, --memory MEM为构建的容器设置内存大小
--build-arg key=val为服务设置build-time变量
服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新构建服务

3.6 查看配置 - config

# 验证并查看compose文件配置
docker-compose config [options]

选项包括:
--resolve-image-digests 将镜像标签标记为摘要
-q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
--services 打印服务名,一行一个
docker-compose config --services

--volumes 打印数据卷名,一行一个
docker-compose config --volumes

3.7 进入容器 - exec

docker-compose exec [options] SERVICE COMMAND [ARGS...]
选项包括:
-d 分离模式,后台运行命令。
–privileged 获取特权。
–user USER 指定运行的用户。
-T 禁用分配TTY,默认docker-compose exec分配TTY。
–index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:
docker-compose exec –index=1 web /bin/bash ,web服务中包含多个容器

docker-compose exec [serviceName] bash

3.8 端口映射 - port

# 显示某个容器端口所映射的公共端口
docker-compose port [options] SERVICE PRIVATE_PORT

选项包括:
--protocol=proto,指定端口协议,TCP(默认值)或者UDP
--index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)

docker-compose port cem-custom 80
0.0.0.0:8084

其他命令

# 列出项目中所有的容器
docker-compose  ps [options] [SERVICE...]
-------------------------------------------------------------------------------------------
# 停止正在运行的容器
docker-compose stop [options] [SERVICE...]
选项包括
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
可以通过docker-compose start 再次启动

-------------------------------------------------------------------------------------------
# 重启项目中的服务
docker-compose restart [options] [SERVICE...]
选项包括:
-t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒)

-------------------------------------------------------------------------------------------
# 删除所有(停止状态的)服务容器
docker-compose rm [options] [SERVICE...]
选项包括:
–f, –force,强制直接删除,包括非停止状态的容器
-v,删除容器所挂载的数据卷
docker-compose rm
删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器。


-------------------------------------------------------------------------------------------
# 拉取服务依赖的镜像
docker-compose pull [options] [SERVICE...]
选项包括:
–ignore-pull-failures,忽略拉取镜像过程中的错误
–parallel,多个镜像同时拉取
–quiet,拉取镜像过程中不打印进度信息

# 推送服务依赖的镜像
docker-compose push [options] [SERVICE...]
选项包括:
–ignore-push-failures 忽略推送镜像过程中的错误

-------------------------------------------------------------------------------------------
# 在指定服务上执行一个命令
docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
docker-compose run ubuntu ping www.baidu.com
在指定容器上执行一个ping命令。

-------------------------------------------------------------------------------------------
# 设置指定服务运行的容器个数。通过service=num的参数来设置数量
docker-compose scale web=3 db=2

-------------------------------------------------------------------------------------------
# 通过发送SIGKILL信号来强制停止服务容器。
# 支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号:
docker-compose kill -s SIGINT

-------------------------------------------------------------------------------------------