前言

本文主要学习Docker Compose 的命令操作方法

本文主要以docker-compose 版本1.29.2为例。

compose docker 中国 docker compose详解_compose docker 中国

Docker Compose的命令说明

对于 Compose 来说,⼤部分命令的对象既可以是项⽬本身,也可以指定为项⽬中的服务或者容器。 如果没有特别的说明,命令对象将是项⽬,这意味着项⽬中所有的服务都会受到命令影响。

执⾏docker-compose [COMMAND] --help或者docker-compose help [COMMAND]可以查看具体某个命令的使⽤格式。

docker-compose 命令的基本的使⽤格式是:

docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]

命令选项:

-f, --file FILE 指定使⽤的 Compose 模板⽂件,默认为 docker-compose.yml,可以多次指定。

-p, --project-name NAME 指定项⽬名称,默认将使⽤所在⽬录名称作为项⽬名。

–verbose 输出更多调试信息。

-v, --version 打印版本并退出。

-c, --context NAME 指定上下文名称

–log-level LEVEL 设置日志级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)

–ansi (never|always|auto) 控制何时打印 ANSI 控制字符

–no-ansi 不打印 ANSI 控制字符(已弃用)

-v, --version 打印版本并退出

-H, --host HOST 要连接的守护进程套接字

–tls 使用 TLS;由 --tlsverify 暗示

–tlscacert CA_PATH 仅由该 CA 签名的信任证书

–tlscert CLIENT_CERT_PATH TLS 证书文件的路径

–tlskey TLS_KEY_PATH TLS 密钥文件的路径

–tlsverify 使用 TLS 并验证远程

–skip-hostname-check 不检查守护进程的主机名客户端证书中指定的名称

–project-directory PATH 指定备用工作目录(默认:Compose 文件的路径)

–compatibility 如果设置,Compose 将尝试转换键在 v3 文件中到它们的非 Swarm 等效项(已弃用)

–env-file PATH 指定备用环境文件

1、build

格式为:docker-compose build [options] [SERVICE...] 构建(重新构建)项⽬中的服务容器:服务容器⼀旦构建后,将会带上⼀个标记名,例如对于 web 项⽬中的⼀个 db 容器,可能是 web_db。
可以随时在项⽬⽬录下运⾏ docker-compose build 来重新构建服务。
选项包括:

–force-rm 删除构建过程中的临时容器。

–no-cache 构建镜像过程中不使⽤ cache(会加长构建过程)。

–pull 始终尝试通过 pull 来获取更新版本的镜像。

–build-arg key=val 设置服务的构建时变量。

–compress 使用 gzip 压缩构建上下文。

-m, --memory MEM 设置构建容器的内存限制。

–no-rm 成功构建后不要删除中间容器。

–parallel 并行构建镜像。

–progress string 设置进度输出的类型(auto、plain、tty)。

-q, --quiet 不向 STDOUT 打印任何内容

2、config

格式为:docker-compose config [options] 验证 Compose ⽂件格式是否正确,若正确则显示配置,若格式错误显示错误原因。

选项包括:

–resolve-image-digests :为镜像添加对应的摘要信息;。

–no-interpolate 不要插入环境变量。

-q, --quiet 只检验格式正确与否,不输出内容。

–profiles 打印配置文件名称。

–services 打印出 Compose 中所有的服务信息;。

–volumes 打印出 Compose 中所有的挂载卷信息;。

–hash=“*” 打印服务配置哈希。为指定服务列表设置“service1,service2”或使用通配符来显示所有服务。

3、 create

格式为:docker-compose create [options] [SERVICE...] 为服务创建容器。此命令已弃用。将 up 命令与 --no-start 一起使用。

选项包括:

–force-recreate 重新创建容器,即使它们的配置和镜像没有改变。与 --no-recreate 不兼容。

–no-recreate 如果容器已经存在,不要重新创建它们。与 --force-recreate 不兼容。

–no-build 不构建镜像,即使它丢失了。

–build 在创建容器之前构建镜像。

4、down

格式为:docker-compose down [options] 此命令将会停⽌ up 命令所启动的容器,并移除⽹络。

–rmi type 删除镜像。指定删除镜像的类型,包括 all (所有镜像), local (仅本地);
v, --volumes 删除挂载数据卷;
–remove-orphans 清除孤儿容器,即未在 Compose 服务中定义的容器;
-t, --timeout TIMEOUT 指定超时时间,默认为 10s。

5、events

格式为:docker-compose events [options] [SERVICE... ]
实时监控容器的事件信息。

选项包括:

-json: Json 对象流格式输出事件信息。

6、exec

格式为: docker-compose exec [options] [-e KEY=VAL...] [--] SERVICE COMMAND [ARGS...]

选项包括:

-d, --detach 分离模式:在后台运行命令。
–privileged 为进程提供扩展权限。
-u, --user USER 以该用户身份运行命令。
-T 禁用伪 tty 分配。默认情况下docker-compose exec分配一个 TTY。
–index=index 容器的索引,如果有多个 服务实例 [默认值:1]
-e, --env KEY=VAL 设置环境变量(可以多次使用,API < 1.25 不支持)
-w, --workdir DIR 此命令的 workdir 目录的路径。

7、help

获得⼀个命令的帮助。

8、images

格式为: images [options] [--] [SERVICE...] 列出 Compose ⽂件中包含的镜像。

选项包括:
-q :仅显示镜像的 ID。

9、kill

格式为:docker-compose kill [options] [SERVICE...]
通过发送 SIGKILL 信号来强制停⽌服务容器。⽀持通过 -s 参数来指定发送的信号,例如通过如下指令发送 SIGINT 信号。

docker-compose kill -s SIGINT

10、logs

格式为:docker-compose logs [options] [SERVICE...] 查看服务容器的输出。默认情况下, docker-compose 将对不同的服务输出使⽤不同的颜⾊来区分。

选项包括:

–no-color 关闭彩色输出。

-f, --follow 跟随日志输出。
-t, --timestamps 显示时间戳。
–tail=“all” 仅显示指定行数的最新日志消息。 --no-log-prefix 不在日志中打印前缀。

11、pause

格式为docker-compose pause [SERVICE...] 暂停⼀个服务容器。

12、port

格式为docker-compose port [options] SERVICE PRIVATE_PORT,打印某个容器端⼝所映射的公共端⼝。

选项:

–protocol=proto 指定端⼝协议,tcp(默认值)或者 udp。

–index=index 如果同⼀服务存在多个容器,指定命令对象容器的序号(默认为 1)。

13、ps

格式为docker-compose ps [options] [SERVICE...] 列出项⽬中⽬前的所有容器。
选项:

-q 只打印容器的 ID 信息。

14、pull

格式为 docker-compose pull [options] [SERVICE...] 拉取服务依赖的镜像。

选项:

–ignore-pull-failures 忽略拉取镜像过程中的错误。

15、push

格式:push [options] [--] [SERVICE...] 推送服务依赖的镜像到 Docker 镜像仓库。

选项:

–ignore-push-failures 推送它可以推送的内容并忽略推送失败的图像。

16、restart

格式为docker-compose restart [options] [--] [SERVICE...] 重启项⽬中的服务。

选项:

-t, --timeout TIMEOUT 指定重启前停⽌容器的超时(默认为 10 秒)。

17、rm

格式为docker-compose rm [options] [SERVICE...] 删除所有(停⽌状态的)服务容器。推荐先执⾏ docker-compose stop 命令来停⽌容器。
选项:

-f, --force 强制直接删除,包括⾮停⽌状态的容器。⼀般尽量不要使⽤该选项。

-v 删除容器所挂载的数据卷。

-s, --stop 如果需要,在删除之前停止容器

-a, --all 已弃用 - 无效。

18、run

格式为docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND][ARGS...] 在指定服务上执⾏⼀个命令。例如:

docker-compose run ubuntu ping docker.com

将会启动⼀个 ubuntu 服务容器,并执⾏ ping docker.com 命令。默认情况下,如果存在关联,则所有关联的服务将会⾃动被启动,除⾮这些服务已经在运⾏中。

该命令类似启动容器后运⾏指定的命令,相关卷、链接等等都将会按照配置⾃动创建。

给定命令将会覆盖原有的⾃动运⾏命令; 不会⾃动创建端⼝,以避免冲突。

如果不希望⾃动启动关联的容器,可以使⽤ --no-deps 选项,例如:

docker-compose run --no-deps web python manage.py shell

将不会启动 web 容器 所关联的其它容器,选项:

-d 后台运⾏容器。

–name NAME 为容器指定⼀个名字。

–entrypoint CMD 覆盖默认的容器启动指令。

-e KEY=VAL 设置环境变量值,可多次使⽤选项来设置多个环境变量。

-l, --label KEY=VAL 添加或覆盖一个标签(可以多次使用)

-u, --user=“” 指定运⾏容器的⽤户名或者 uid。

–no-deps 不⾃动启动关联的服务容器。

–rm 运⾏命令后⾃动删除容器,d 模式下将忽略。

-p, --publish=[] 映射容器端⼝到本地主机。

–service-ports 配置服务端⼝并映射到本地主机。

–use-aliases 在网络中使用服务的网络别名容器连接到。

-v, --volume=[] 绑定挂载卷(默认[])

-T 不分配伪 tty,意味着依赖 tty 的指令将⽆法运⾏。

-w, --workdir=“” 容器内的工作目录

19、scale

格式为docker-compose scale [options] [SERVICE=NUM...]

设置指定服务运⾏的容器个数。
通过 service=num 的参数来设置数量。例如:

docker-compose scale web=3 db=2

将启动 3 个容器运⾏ web 服务,2 个容器运⾏ db 服务。

⼀般的,当指定数⽬多于该服务当前实际运⾏容器,将新创建并启动容器;反之,将停⽌容器。
选项:

-t, --timeout TIMEOUT 停⽌容器时候的超时(默认为 10 秒)。

20、start

格式为docker-compose start [SERVICE...] 启动已经存在的服务容器。

20、stop

格式为docker-compose stop [options] [SERVICE...], 停⽌已经处于运⾏状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。

选项:

-t, --timeout TIMEOUT 停⽌容器时候的超时(默认为 10 秒)。

21、top

格式为top [SERVICE...] 查看各个服务容器内运⾏的进程。

22、unpause

格式为docker-compose unpause [SERVICE...] 恢复处于暂停状态中的服务。

23、up

格式为docker-compose up [options] [--scale SERVICE=NUM...] [--] [SERVICE...]

该命令⼗分强⼤,它将尝试⾃动完成包括构 建镜像,(重新)创建服务,启动服务,并关联服务相关容器的⼀系列操作。链接的服务都将会被⾃ 动启动,除⾮已经处于运⾏状态。 可以说,⼤部分时候都可以直接通过该命令来启动⼀个项⽬。

默认情况, docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可 以很⽅便进⾏调试。 当通过 Ctrl-C 停⽌命令时,所有容器将会停⽌。

如果使⽤ docker-compose up -d ,将会在后台启动并运⾏所有的容器。⼀般推荐⽣产环境下使⽤该选项。

默认情况,如果服务容器已经存在, docker-compose up 将会尝试停⽌容器,然后重新创建(保持使⽤ volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml ⽂件的最新内容。如果⽤户不希望容器被停⽌并重新创建,可以使⽤ docker-compose up --no-recreate 。这样将只会启动 处于停⽌状态的容器,⽽忽略已经运⾏的服务。

如果⽤户只想重新部署某个服务,可以使⽤ docker-compose up --no-deps -d <SERVICE_NAME> 来重新 创建服务并后台停⽌旧服务,启动新服务,并不会影响到其所依赖的服务。

选项:

-d 在后台运⾏服务容器。

–no-color 不使⽤颜⾊来区分不同的服务的控制台输出。

–no-deps 不启动服务所链接的容器。

–force-recreate 强制重新创建容器,不能与 --no-recreate 同时使⽤。

–no-recreate 如果容器 已经存在了,则不重新创建,不能与 --force-recreate 同时使⽤。 --no-build
不⾃动构建缺失的服务镜像。

-t, --timeout TIMEOUT 停⽌容器时候的超时(默认为 10 秒)。

–quiet-pull 拉取不打印进度信息

–always-recreate-deps 重新创建依赖容器。与 --no-recreate 不兼容。

–no-build 不要构建镜像,即使它丢失了。

–no-start 创建服务后不启动服务。

–build 在启动容器之前构建镜像。

–abort-on-container-exit 停止所有容器,如果有任何容器停了下来。与 -d 不兼容。

–attach-dependencies 附加到依赖容器。

-V, --renew-anon-volumes 重新创建匿名卷而不是检索来自先前容器的数据。

–remove-orphans 删除未定义服务的容器 在撰写文件中。

–exit-code-from SERVICE 返回所选服务的退出代码容器。暗示 --abort-on-container-exit。

–scale SERVICE=NUM 将 SERVICE 扩展到 NUM 个实例。覆盖Compose 文件中的 scale 设置(如果存在)。

–no-log-prefix 不要在日志中打印前缀。

24、version

格式为 docker-compose version [--short] 打印版本信息。

选项:

–short 仅显示 Compose 的版本号。