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
: 容器的重启策略(如no
、on-failure
、always
、unless-stopped
)。 -
-u
: 指定用户。
实例
-
基本使用
docker run ubuntu
拉取 ubuntu 镜像并在前台启动一个容器。
-
后台运行容器
docker run -d ubuntu
在后台运行 ubuntu 容器并返回容器 ID。
-
交互式运行并分配终端
docker run -it ubuntu /bin/bash
以交互模式运行 ubuntu 容器,并启动一个 Bash shell。
-
指定容器名称
docker run --name my_container ubuntu
运行一个 ubuntu 容器,并将其命名为 my_container。
-
端口映射
docker run -p 8080:80 nginx
将本地主机的 8080 端口映射到容器内的 80 端口,运行 nginx 容器。
-
挂载卷
docker run -v /host/data:/container/data ubuntu
将主机的 /host/data 目录挂载到容器内的 /container/data 目录。
-
设置环境变量
docker run -e MY_ENV_VAR=my_value ubuntu
设置环境变量 MY_ENV_VAR 的值为 my_value,运行 ubuntu 容器。
-
使用网络模式
docker run --network host nginx
使用主机的网络模式运行 nginx 容器。
-
指定重启策略
docker run --restart always nginx
设置容器的重启策略为 always,即使容器停止也会自动重启。
-
指定用户
docker run -u user123 ubuntu
以 user123 用户运行 ubuntu 容器。
-
组合多个选项
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 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
你可以使用以下命令删除它们:
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 | # ~/.bash_aliases |
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
: 容器的重启策略(如no
、on-failure
、always
、unless-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 的容器,然后再进行操作。