Docker命令-容器生命周期管理

Docker run 命令


docker run 命令用于创建并启动一个新的容器。

语法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用参数说明:

  • -d: 后台运行容器并返回容器 ID。

  • -it: 交互式运行容器,分配一个伪终端。

  • --name: 给容器指定一个名称。

  • -p: 端口映射,格式为 host_port:container_port

  • -v: 挂载卷,格式为 host_dir:container_dir

  • --rm: 容器停止后自动删除容器。

  • --env-e: 设置环境变量。

  • --network: 指定容器的网络模式。

  • --restart: 容器的重启策略(如 noon-failurealwaysunless-stopped)。

  • -u: 指定用户。

实例

  1. 基本使用

docker run ubuntu

拉取 ubuntu 镜像并在前台启动一个容器。

  1. 后台运行容器

docker run -d ubuntu

在后台运行 ubuntu 容器并返回容器 ID。

  1. 交互式运行并分配终端

docker run -it ubuntu /bin/bash

以交互模式运行 ubuntu 容器,并启动一个 Bash shell。

  1. 指定容器名称

docker run --name my_container ubuntu

运行一个 ubuntu 容器,并将其命名为 my_container。

  1. 端口映射

docker run -p 8080:80 nginx

将本地主机的 8080 端口映射到容器内的 80 端口,运行 nginx 容器。

  1. 挂载卷

docker run -v /host/data:/container/data ubuntu

将主机的 /host/data 目录挂载到容器内的 /container/data 目录。

  1. 设置环境变量

docker run -e MY_ENV_VAR=my_value ubuntu

设置环境变量 MY_ENV_VAR 的值为 my_value,运行 ubuntu 容器。

  1. 使用网络模式

docker run --network host nginx

使用主机的网络模式运行 nginx 容器。

  1. 指定重启策略

docker run --restart always nginx

设置容器的重启策略为 always,即使容器停止也会自动重启。

  1. 指定用户

docker run -u user123 ubuntu

以 user123 用户运行 ubuntu 容器。

  1. 组合多个选项

docker run -d -p 8080:80 -v /host/data:/data --name webserver nginx

后台运行一个命名为 webserver 的 nginx 容器,将主机的 8080 端口映射到容器的 80 端口,并将主机的 /host/data 目录挂载到容器的 /data 目录。

Docker start/stop/restart 命令


docker start 命令用于启动一个或多个已经创建的容器。

docker stop 命令用于停止一个运行中的容器。

docker restart 命令用于重启容器。


docker start 命令

语法

docker start [OPTIONS] CONTAINER [CONTAINER...]

参数

  • -a: 附加到容器的标准输入输出流。

  • -i: 附加并保持标准输入打开。

实例

启动一个容器:

docker start my_container

启动名称为 my_container 的容器。

启动并附加到容器:

docker start -a my_container

启动容器并附加到它的标准输入输出流。

同时启动多个容器:

docker start container1 container2 container3

同时启动 container1、container2 和 container3 容器。


docker stop 命令

语法

docker stop [OPTIONS] CONTAINER [CONTAINER...]

参数

-t, --time: 停止容器之前等待的秒数,默认是 10 秒。

实例

停止一个容器:

docker stop my_container

停止名称为 my_container 的容器。

指定等待时间停止容器:

docker stop -t 30 my_container

等待 30 秒后停止容器。

同时停止多个容器:

docker stop container1 container2 container3

同时停止 container1、container2 和 container3 容器。


docker restart 命令

语法

docker restart [OPTIONS] CONTAINER [CONTAINER...]

参数

-t, --time: 重启容器之前等待的秒数,默认是 10 秒。

实例

重启一个容器:

docker restart my_container

重启名称为 my_container 的容器。

指定等待时间重启容器:

docker restart -t 15 my_container

等待 15 秒后重启容器。

同时重启多个容器:

docker restart container1 container2 container3

同时重启 container1、container2 和 container3 容器。

Docker kill 命令


docker kill 命令用于立即终止一个或多个正在运行的容器。

与 docker stop 命令不同,docker kill 命令会直接发送 SIGKILL 信号给容器的主进程,导致容器立即停止,而不会进行优雅的关闭。

语法

docker kill [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

  • -s, --signal: 发送给容器的信号(默认为 SIGKILL)。

常用信号

  • SIGKILL: 强制终止进程(默认信号)。

  • SIGTERM: 请求进程终止。

  • SIGINT: 发送中断信号,通常表示用户请求终止。

  • SIGHUP: 挂起信号,通常表示终端断开。

实例

立即终止一个容器:

docker kill my_container

立即终止名称为 my_container 的容器。

发送自定义信号:

docker kill -s SIGTERM my_container

向名称为 my_container 的容器发送 SIGTERM 信号,而不是默认的 SIGKILL 信号。

同时终止多个容器:

docker kill container1 container2 container3

立即终止 container1、container2 和 container3 容器。

docker kill 命令用于立即终止一个或多个正在运行的容器,通过发送信号(默认 SIGKILL)给容器的主进程实现。与 docker stop 不同,docker kill 不会等待容器优雅地停止,而是直接终止进程。该命令在需要快速停止容器时非常有用,但应谨慎使用以避免数据损失或不一致。

Docker rm 命令


docker rm 命令用于删除一个或多个已经停止的容器。

docker rm 命令不会删除正在运行的容器,如果你需要先停止容器,可以使用 docker stop 命令。

语法

docker rm [OPTIONS] CONTAINER [CONTAINER...]

  • CONTAINER [CONTAINER...]: 一个或多个要删除的容器的名称或 ID。

OPTIONS说明:

  • -f, --force: 强制删除正在运行的容器(使用 SIGKILL 信号)。

  • -l, --link: 删除指定的连接,而不是容器本身。

  • -v, --volumes: 删除容器挂载的卷。

删除单个容器:

docker rm <container_id_or_name>

你可以一次性删除多个容器,只需将容器 ID 或名称用空格分隔:

docker rm <container_id_or_name1> <container_id_or_name2> ...

你可以使用以下命令来删除所有已停止的容器:

docker container prune这个命令会提示你确认删除所有已停止的容器。

实例

假设你有以下两个容器:

1
2
3
CONTAINER ID        IMAGE          COMMAND             CREATED             STATUS              PORTS      NAMES
abcd1234 nginx "nginx -g 'daemon…" 2 minutes ago Exited (0) 1 minute ago my_nginx
efgh5678 redis "redis-server" 3 minutes ago Exited (0) 2 minutes ago my_redis

你可以使用以下命令删除它们:

docker rm abcd1234 efgh5678

或者,你可以使用容器名称删除它们:

docker rm my_nginx my_redis

删除所有已经停止的容器:

docker rm $(docker ps -a -q)

杀死所有正在运行的容器

docker kill $(docker ps -a -q)

删除所有未打 dangling 标签的镜像

docker rmi $(docker images -q -f dangling=true)

通过镜像的id来删除指定镜像

docker rmi <image id>

删除所有镜像

docker rmi $(docker images -q)

为这些命令创建别名

1
2
3
4
5
6
7
8
9
10
11
12
13
# ~/.bash_aliases

# 杀死所有正在运行的容器.
alias dockerkill='docker kill $(docker ps -a -q)'

# 删除所有已经停止的容器.
alias dockercleanc='docker rm $(docker ps -a -q)'

# 删除所有未打标签的镜像.
alias dockercleani='docker rmi $(docker images -q -f dangling=true)'

# 删除所有已经停止的容器和未打标签的镜像.
alias dockerclean='dockercleanc || true && dockercleani'

Docker pause/unpause 命令


docker pause 和 docker unpause 命令用于暂停和恢复容器中的所有进程。

docker pause - 暂停容器中所有的进程。

docker unpause - 恢复容器中所有的进程。

暂停的容器不会被终止,但其进程将被挂起,直到容器被恢复。这在需要临时暂停容器活动的情况下非常有用。


docker pause 命令

docker pause 命令用于暂停一个或多个容器中的所有进程。

语法

docker pause CONTAINER [CONTAINER...]

实例

暂停一个容器:

docker pause my_container

暂停名称为 my_container 的容器中的所有进程。

暂停多个容器:

docker pause container1 container2

同时暂停 container1 和 container2 容器中的所有进程。


docker unpause 命令

docker unpause 命令用于恢复一个或多个已暂停容器中的所有进程。

语法

docker unpause CONTAINER [CONTAINER...]

实例

恢复一个容器:

docker unpause my_container

恢复名称为 my_container 的容器中的所有进程。

恢复多个容器:

docker unpause container1 container2

同时恢复 container1 和 container2 容器中的所有进程。

使用场景

  • 临时暂停活动: 当需要临时暂停容器中的所有活动以进行系统维护或资源管理时,可以使用 docker pause

  • 资源管理: 在需要重新分配系统资源时,暂停不必要的容器以释放资源。

  • 调试和故障排除: 在调试或故障排除过程中暂停容器以分析当前状态。

总结

  • docker pause: 用于暂停容器中的所有进程。暂停的容器仍然存在,但其进程将挂起,直到恢复。

  • docker unpause: 用于恢复已暂停容器中的所有进程,使其恢复正常运行。

Docker create 命令


docker create 命令用于创建一个新的容器,但不会启动它。

docker create 命令会根据指定的镜像和参数创建一个容器实例,但容器只会在创建时进行初始化,并不会执行任何进程。

用法同 [docker run]。

语法

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

常用参数

  • --name: 给容器指定一个名称。

  • -p, --publish: 端口映射,格式为 host_port:container_port

  • -v, --volume: 挂载卷,格式为 host_dir:container_dir

  • -e, --env: 设置环境变量。

  • --network: 指定容器的网络模式。

  • --restart: 容器的重启策略(如 noon-failurealwaysunless-stopped)。

  • -u, --user: 指定用户。

  • --entrypoint: 覆盖容器的默认入口点。

  • --detach: 在后台创建容器。

实例

创建一个容器:

docker create ubuntu

根据 ubuntu 镜像创建一个容器,但不会启动它。

创建并指定容器名称:

docker create --name my_container ubuntu

创建一个名为 my_container 的容器,但不会启动它。

创建并设置环境变量:

docker create -e MY_ENV_VAR=my_value ubuntu

创建一个容器,并设置环境变量 MY_ENV_VAR 的值为 my_value。

创建并挂载卷:

docker create -v /host/data:/container/data ubuntu

创建一个容器,并将主机的 /host/data 目录挂载到容器的 /container/data 目录。

创建并端口映射:

docker create -p 8080:80 nginx

创建一个容器,将本地主机的 8080 端口映射到容器的 80 端口,但不会启动它。

创建并指定重启策略:

docker create --restart always nginx

创建一个容器,并将重启策略设置为 always。

创建并指定用户:

docker create -u user123 ubuntu

创建一个容器,并以 user123 用户运行容器。

查看容器

在创建容器之后,可以使用 docker ps -a 命令查看所有容器,包括已创建但未启动的容器。

docker ps -a

启动已创建的容器

使用 docker start 命令来启动已创建但未启动的容器:

docker start my_container

总结

  • docker create: 用于创建一个新的容器实例但不启动它。可以通过各种参数设置容器的配置。

  • docker start: 启动已创建的容器,使其开始运行。

docker create 命令允许用户预先配置容器的设置,并在需要时手动启动容器,这对于自动化部署和测试场景特别有用。

Docker exec 命令


docker exec 命令用于在运行中的容器内执行一个新的命令。这对于调试、运行附加的进程或在容器内部进行管理操作非常有用。

语法

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

常用参数

  • -d, --detach: 在后台运行命令。

  • --detach-keys: 覆盖分离容器的键序列。

  • -e, --env: 设置环境变量。

  • --env-file: 从文件中读取环境变量。

  • -i, --interactive: 保持标准输入打开。

  • --privileged: 给这个命令额外的权限。

  • --user, -u: 以指定用户的身份运行命令。

  • --workdir, -w: 指定命令的工作目录。

  • -t, --tty: 分配一个伪终端。

实例

在容器内运行命令:

docker exec my_container ls /app

在运行中的 my_container 容器内执行 ls /app 命令,列出 /app 目录的内容。

以交互模式运行命令:

docker exec -it my_container /bin/bash

在运行中的 my_container 容器内启动一个交互式的 Bash shell。-i 保持标准输入打开,-t 分配一个伪终端。

在后台运行命令:

docker exec -d my_container touch /app/newfile.txt

在运行中的 my_container 容器内后台执行 touch /app/newfile.txt 命令,创建一个新文件。

设置环境变量:

docker exec -e MY_ENV_VAR=my_value my_container env

在运行中的 my_container 容器内执行 env 命令,并设置环境变量 MY_ENV_VAR 的值为 my_value。

以指定用户身份运行命令:

docker exec -u user123 my_container whoami

在运行中的 my_container 容器内以 user123 用户身份执行 whoami 命令。

指定工作目录:

docker exec -w /app my_container pwd

在运行中的 my_container 容器内以 /app 目录为工作目录执行 pwd 命令。

使用场景

  • 调试容器: 进入容器内部进行调试和排查问题。

  • 管理任务: 在容器内运行附加的管理任务或维护操作。

  • 监控和检查: 在容器内执行监控和检查命令,获取运行状态和日志。

总结

docker exec 命令是 Docker 中非常强大的工具,允许用户在运行中的容器内执行额外的命令。这对于调试、管理和维护容器非常有用,能够帮助用户更灵活地控制和操作容器内部的环境。

Docker rename 命令


docker rename 命令用于重命名已存在的容器。该命令允许你在不停止或删除容器的情况下,直接修改容器的名称。

语法

docker rename <当前容器名称或ID> <新容器名称>

常用参数说明:

  • 当前容器名称或ID:需要修改名称的现有容器的名称或者 ID。

  • 新容器名称:将容器重命名为指定的新名称。这个名称必须唯一,不能与其他正在运行的容器冲突。

实例

1、重命名容器

假设有一个正在运行的容器,名称为 my_old_container,并且需要将它重命名为 my_new_container:

docker rename my_old_container my_new_container

执行成功后,容器的名称将变为 my_new_container。你可以通过以下命令确认:

docker ps -a

2、使用容器 ID 重命名

如果你不知道容器的名称,但知道其 ID,可以使用容器的 ID 来重命名。例如:

docker rename 123abc456def my_new_container

同样,123abc456def 是容器的 ID,重命名后可以通过 docker ps -a 查看。

3、检查是否重名

如果你尝试重命名的名称已经被其他容器使用,Docker 会返回错误:

docker rename my_old_container existing_container_name

输出:

Error response from daemon: Conflict. The container name "/existing_container_name" is already in use by container "abc123". You have to remove (or rename) that container to be able to reuse that name.

此时需要先重命名或移除 existing_container_name 的容器,然后再进行操作。