于2021年10月9日学习,注意此篇内容是建立在上一篇的案例上的。
一、compose命令
废话不多说,先来查看一下帮助
docker-compose help
docker-compose [COMMAND] --help
docker-compose help [COMMAND]
对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。
如果没有特别的说明,命令对象将是项目,会对项目中所有的服务生效。
语法
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
:'
[-f=<arg>...]:指定模板文件
[options]:选项
[COMMAND]:命令
[ARGS...]:参数
'
常用选项
-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
-p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
--verbose 输出更多调试信息。
-v, --version 打印版本并退出。
案例
docker-compose -f docker-compose-base.yml -f docker-compose-prod.yml
docker-compose -p web
docker-compose --verbose
docker-compose -v
使用docker-compose命令需要进入项目文件夹中才能使用
二、管理命令
up
自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
默认情况,docker-compose up
启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
通过 Ctrl-C
停止命令时,所有容器将会停止。
如果服务容器已经存在,docker-compose up
将会停止容器,然后重新创建,以保证使用最新 docker-compose.yml
文件内容。
docker-compose up
#只启动处于停止状态的容器,忽略已经运行的服务
docker-compose up --no-recreate
#重新创建web服务,不影响web服务依赖的其他服务
docker-compose up --no-deps -d web
:'
-d 在后台运行服务容器。
--no-color 不使用颜色来区分不同的服务的控制台输出。
--no-deps 不启动服务所链接的容器。
--force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。
--no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。
--no-build 不自动构建缺失的服务镜像。
-t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
'
build
构建或重新构建项目中的服务容器;第一次运行为构建服务容器,第二次运行为重新构建。
服务容器一旦构建后,将会带上一个标记名,这个标记名就是创建的项目文件夹名;例如 web 项目文件夹中的一个名为db的容器,最后使用docker ps
查看容器名为web_db。
语法
docker-compose build [options] [SERVICE...]
案例
docker-compose build
:'
包括的选项有
--force-rm 删除构建过程中的临时容器。
--no-cache 构建镜像过程中不使用 cache(这将加长构建过程)。
--pull 始终尝试通过 pull 来获取更新版本的镜像。
'
start
启动已经存在的服务容器,服务容器必须存在,也就是说需要先构建容器后才能使用该命令。
docker-compose start web
stop
停止已经处于运行状态的容器。
docker-compose start web
:'
-t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
'
restart
重启项目中的服务。
#重启所有服务
docker-compose restart
#只重启web服务
docker-compose restart web
:'
-t, --timeout TIMEOUT 指定重启容器超时时间(默认为 10 秒)。
'
pause
暂停一个服务容器。
docker-compose pause web
unpause
恢复处于暂停状态中的服务。
docker-compose unpause web
kill
通过发送 SIGKILL
信号来强制停止服务容器。
#杀死全部容器
docker-compose kill -s SIGINT
#杀死web服务容器
docker-compose kill -s SIGINT web
rm
删除所有(停止状态的)服务容器。
需要先执行 docker-compose stop
命令来停止容器才能使用。
docker-compose rm
docker-compose rm web
:'
-f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
-v 删除容器所挂载的数据卷。
'
down
此命令将会停止 up
命令所启动的容器,并移除网络。
docker-compose down
可以看到compose会创建一个以项目名命名,名为web_default
的网络,以后介绍。
三、常用命令
config
验证 Compose 文件格式是否正确,若正确则显示配置,若格式错误显示错误原因。
需要在项目文件夹中运行
docker-compose config
run
在指定服务上执行一个命令。
如果存在关联,则所有关联的服务将会自动被启动,除非这些服务已经在运行中。
#启动ubuntu服务容器ping百度
docker-compose run ubuntu ping www.baidu.com
:'
-d 后台运行容器。
--name NAME 为容器指定一个名字。
--entrypoint CMD 覆盖默认的容器启动指令。
-e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量。
-u, --user="" 指定运行容器的用户名或者 uid。
--no-deps 不自动启动关联的服务容器。
--rm 运行命令后自动删除容器,d 模式下将忽略。
-p, --publish=[] 映射容器端口到本地主机。
--service-ports 配置服务端口并映射到本地主机。
-T 不分配伪 tty,意味着依赖 tty 的指令将无法运行。
'
exec
进入指定的容器,这里的web是上一篇博文案例中的web服务。
#查看运行的容器
docker-compose ps
#进入web容器
docker-compose exec web sh
#执行ping命令
docker-compose exec web ping www.baidu.com
#当服务有多个容器时,使用--index指定第几个,默认是第一个
docker-compose exec --index=2 web sh
效果如下
images
列出 Compose 文件中包含的镜像。
docker-compose images
logs
查看服务容器的日志。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。
#查看web服务容器的日志
docker-compose logs web
port
打印某个容器端口所映射的公共端口。
docker-compose port web 5000
:'
其他选项
--protocol=proto 指定端口协议,tcp(默认值)或者 udp。
--index=index 如果同一服务存在多个容器,指定命令对象容器的序号(默认为 1)。
'
注意这是将容器端口映射的宿主机端口打印出来,映射端口需要在docker-compose-base.yml文件中修改
ps
列出项目中目前的所有容器。
docker-compose ps
#只打印容器ID信息
docker-compose ps -q
pull
拉取服务依赖的镜像。
#拉取全部服务镜像
docker-compose pull
#只拉取web服务镜像
docker-compose pull web
:"
--ignore-pull-failures 忽略拉取镜像过程中的错误。
"
push
推送服务依赖的镜像到 Docker 镜像仓库。
#推送全部服务镜像
docker-compose push
#只推送web服务镜像
docker-compose push web
scale
设置指定服务运行的容器个数。
当指定数目多于该服务当前实际运行容器,将新创建并启动容器;反之,将停止容器。
#启动3个web服务容器,启动2个db服务容器
docker-compose scale web=3 db=2
:'
-t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
'
top
查看各个服务容器内运行的进程。
docker-compose top web
version
打印版本信息。
docker-compose version