跳到主要内容

Docker Compose 命令详解

· 阅读需 4 分钟
素明诚
Full stack development

docker-compose up

此命令用于创建、重建、启动和连接容器。在前台运行时,会显示所有服务的启动日志。

Creating network "myapp_default" with the default driver
Creating volume "myapp_dbdata" with default driver
Creating myapp_web_1 ... done
Creating myapp_db_1 ... done
Attaching to myapp_web_1, myapp_db_1

docker-compose down

默认情况下,docker-compose down 不会 删除由 docker-compose.yml 文件中定义的卷(即那些通过 volumes: 部分指定的卷)。这些卷会保留以便将来重用,除非您手动删除它们。

Stopping myapp_web_1 ... done
Stopping myapp_db_1 ... done
Removing myapp_web_1 ... done
Removing myapp_db_1 ... done
Removing network myapp_default

docker-compose build

如果有 build 的配置会重新构建服务。

db uses an image, skipping
Building web
Step 1/3 : FROM node:10
---> 123abc
Step 2/3 : ADD . /code
---> Using cache
---> 456def
Step 3/3 : RUN npm install
---> Running in 789ghi

docker-compose ps

显示与配置中定义的服务相关的容器。

     Name                   Command              State           Ports
---------------------------------------------------------------------------------
myapp_web_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp,:::80->80/tcp
myapp_db_1 docker-entrypoint.sh postgres Up 5432/tcp

docker-compose start

启动一个或多个已停止的容器。

Starting db_1 ... done
Starting web_1 ... done

docker-compose stop

停止正在运行的容器。

Stopping myapp_web_1 ... done
Stopping myapp_db_1 ... done

docker-compose restart

重启服务。

Restarting myapp_web_1 ... done
Restarting myapp_db_1 ... done

docker-compose logs

查看服务的日志输出。

Attaching to myapp_web_1, myapp_db_1
web_1 | Example app listening at http://localhost:3000
db_1 | 2021-01-01 12:00:00.000 UTC [1] LOG: database system is ready to accept connections

docker-compose pull

拉取服务依赖的镜像。

Pulling db (postgres:latest)...
latest: Pulling from library/postgres
Digest: sha256:abc123
Status: Downloaded newer image for postgres:latest

docker-compose push

将服务中涉及的镜像推送到 Docker Hub 或其他镜像仓库。

Pushing api (myregistry.com/myapp/api)...
The push refers to repository [docker.io/myapp/api]
5f70bf18a086: Pushed

docker-compose exec

如果您的 docker-compose.yml 定义中某个服务配置为多个容器实例,执行 docker-compose exec 命令将默认选择由该服务创建的第一个容器。如果需要在特定的容器上执行命令,通常需要通过 Docker 的底层命令来处理

$ docker-compose exec db psql -U postgres

psql (12.2)
Type "help" for help.

postgres=#

docker-compose run

使用一个服务以一次性模式执行命令。

$ docker-compose run web env

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=8b1b53f6cfa9

docker-compose rm

删除所有(停止状态的)服务容器。

Going to remove myapp_web_1, myapp_db_1
Are you sure? [yN] y
Removing myapp_web_1 ... done
Removing myapp_db_1 ... done

docker-compose config

验证并查看配置。

services:
db:
image: postgres
restart: always
web:
build: .
ports:
- "5000:5000"
version: '3.0'

docker-compose kill

kill 不会删除容器,也不会删除容器的网络配置或者挂载的卷。这意味着您可以使用 docker-compose start 命令再次启动这些容器,而其环境配置和数据将保持不变。这使得 kill 命令非常适用于需要快速停止服务而不希望丢失任何数据的场景

Killing myapp_web_1 ... done
Killing myapp_db_1 ... done

docker-compose pause

对容器使用 pause 命令时,Docker 会使用 Linux 内核的 cgroups 功能来暂停容器中所有的进程。这意味着这些进程会立即停止执行,所有的 CPU 操作将会被冻结,但是容器的内存状态保持不变。容器中的进程就像是被“冻结”在某个特定的时刻。

这个功能特别适用于需要临时释放系统资源(如 CPU 使用率)但又不想结束或重启容器的情况。例如,如果您运行的某个服务暂时不需要处理任务,但您希望保留其当前的状态,可以暂停该服务,之后再恢复其运行,恢复时容器会从暂停时的状态继续运行。

砸瓦鲁多~

Pausing myapp_web_1 ... done
Pausing myapp_db_1 ... done

docker-compose unpause

恢复服务中已暂停的容器。

Unpausing myapp_web_1 ... done
Unpausing myapp_db_1 ... done

docker-compose port

打印绑定的公开端口。

$ docker-compose port web 5000
0.0.0.0:49153

docker-compose top

显示运行的容器中的进程。

myapp_web_1
UID PID PPID C STIME TTY TIME CMD
root 2618 2595 0 10:00 ? 00:00:02 nginx: master process nginx -g daemon off;

使用自定义配置文件

如果您有一个不是标准命名(即非 docker-compose.yml)的配置文件,比如叫 custom-compose.yaml,您可以这样运行 docker-compose 命令:

docker-compose -f custom-compose.yaml up

整理不易,求关注