docker-Compose 相关命令

下面将介绍 docker-compose 子命令的使用。也可以通过运行 docker-compose --help来查看这些信息。

build

1
2
3
4
5
用法:build [options] [SERVICE...]
选项:
--force-rm 总是移除构建过程中产生的中间项容器
--no-cache 构建镜像过程中不使用Cache
--pull 总是尝试获取更新版本的镜像

构建服务并打上project_service风格的标签(如:composetest_db)。如果你更改了服务的Dockerfile或者构建目录下的内容,需要运行docker-compose build重新构建服务。

help

1
用法:help COMMAND

显示命令的帮助信息及用法教程。

kill

1
2
3
用法:kill [options] [SERVICE...]
选项:
-s SIGNAL SIGNAL 是发送给容器的信号量,默认是 SIGKILL

通过发送SIGKILL信号来强制终止运行中的容器,也可以发送指定的信号量,例如:

1
$ docker-compose kill -s SIGINT

ps

1
2
3
用法:ps [options] [SERVICE...]
选项:
-q 仅仅显示容器ID

列出容器。

restart

1
2
3
用法:restart [options] [SERVICE...]
选项:
-t, --timeout TIMEOUT 设置关闭服务的超时时间,单位为秒,默认为10

重启服务。

run

1
2
3
4
5
6
7
8
9
10
11
用法:run [options] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
选项:
-d 分离模式:在后台运行容器,只打印新的容器名称
--entrypoint CMD 覆盖镜像的入口点(CMD ...)
-e KEY=VAL 设置环境变量,可以使用多次
-u, --user="" 通过指定的用户名或用户id来运行
--no-deps 不启动link连接的服务
--rm 运行结束后移除容器,在分离模式下将被忽略
-p, --publish=[] 将容器暴露端口映射到主机端口
--service-ports 通过服务映射到主机的端口执行命令
-T 禁用pseudo-tty分配,默认会分配一个TTY

对服务运行的命令。例如,以下命令启动web服务并运行bash命令

1
$ docker-compose run web bash

run命令,将使用服务中已经定义的配置来创建运行一个新的容器。也就是说,如此创建的容器,将会使用相同的挂载卷、容器连接等相同的配置,但它们依旧可以存在差异。

第一个区别是,可以使用run命令覆盖服务中指定的运行命令。例如,web服务中的配置指定的运行命令为bash,那么docker-compose run web python app.py将使用python app.py来覆盖它。

第二个区别是,docker-compose run命令不会创建任何服务配置中指定的端口映射,这样可以防止多个容器映射同一端口的冲突。如果你需要使得服务的端口创建并映射到主机,需要指定--service-ports标记,如下:

1
$ docker-compose run --service-ports web python manage.py shell

或者可以手动指定端口映射,和使用docker run一样,使用--publish-p选项:

1
$ docker-compose run --publish 8080:80 -p 2022:22 -p 127.0.0.1:2021:21 web python manage.py shell

如果启动一个带有容器连接的服务,run命令将首先检查连接到的服务是否已运行,如果是停止状态,将会启动它,直到所有的相关服务都处于正在运行状态,才会执行你创建的命令。例如:

1
$ docker-compose run db psql -h db -U docker

这将创建一个与PostgreSQL容器db交互服务。

如果你不希望启动相关联容器,可以使用--no-deps标记:

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

start

1
用法:start [SERVICE...]

启动服务中已经存在的容器。

up

1
2
3
4
5
6
7
8
9
用法:up [options] [SERVICE...]
选项:
-d 分离模式:在后台运行容器,只打印新的容器名称
--no-color 单色输出
--no-deps 不启动link连接的服务
--force-recreate 强制重新创建容器,即使镜像没有任何改变。与--no-recreate会冲突
--no-recreate 如果对应容器已经存在,不重新创建它。与--force-recreate会冲突
--no-build 不构建镜像,即使缺失
-t, --timeout TIMEOUT 为容器设置关闭超时时间,单位:秒 (默认为 10)

对服务,构建镜像、(重新)创建容器、启动容器。

该命令还将启动任何相关的且没有被启动的服务。

docker-compose up命令将显示所有容器的输出,命令结束时,所有容器都将关闭。运行docker-compose up -d将在后台启动运行容器。

如果服务中已经存在运行中的容器了,并且在容器创建后更改服务配置或者镜像,docker-compose up命令将会停止当前容器(保存挂载卷)并重新构建启动容器。当然,也可以通过--no-recreate选项来避免重新构建。

使用--force-recreate标记,可以强制停止并重构所有容器。

logs

1
2
3
用法:logs [options] [SERVICE...]
选项:
--no-color 单色输出

显示服务输出的日志内容。

port

1
2
3
4
用法:port [options] SERVICE PRIVATE_PORT
选项:
--protocol=proto tcp 或 udp [默认为 tcp]
--index=index 对应实例服务的第几个容器[默认为 1]

打印服务中端口绑定对应的主机端口。

pull

1
2
3
用法:pull [options] [SERVICE...]
选项:
--ignore-pull-failures 尽可能拉取服务,忽略拉取失败

拉取服务镜像。

rm

1
2
3
4
用法:rm [options] [SERVICE...]
选项:
-f, --force 强制删除,不询问确认信息
-v 移除容器挂载的卷

删除停止的服务容器。

scale

1
用法:scale [SERVICE=NUM...]

设置一个服务需要运行的容器数量。
参数形式为service=num。例如:

1
$ docker-compose scale web=2 worker=3

stop

1
2
3
用法:stop [options] [SERVICE...]
选项:
-t, --timeout TIMEOUT 设置关闭容器的超时时间

停止容器而不移除,可以通docker-compose start重新启动。

QA

上面的doc并非本人撰写,但是我忘记在哪里看到并且下载到本地了,如有版权问题,请联系我补充更正,谢谢。