Skip to content

Docker - 使用容器

本章探讨了在 Docker 容器生命周期中,用于管理和与其交互的常用命令。

以 JSON 格式提供关于容器的详细底层信息。对于查找 IP 地址、卷挂载(volume mounts)、环境变量(environment variables)、端口映射(port mappings)等非常有用。

# 按名称或 ID 检查容器
docker inspect my-running-container

显示特定容器内正在运行的进程(processes),类似于 Linux 中的 top 命令。

docker top my-running-container

提供一个或多个正在运行容器的资源使用统计信息(CPU、内存、网络 I/O、磁盘 I/O)的实时流。

# 显示所有正在运行容器的统计信息
docker stats
# 显示特定容器的统计信息
docker stats container1 container2

按下 Ctrl+C 退出实时流。

暂停和取消暂停 (docker pause, docker unpause)

Section titled “暂停和取消暂停 (docker pause, docker unpause)”

这些命令使用 cgroups freezer 暂停或恢复容器内的所有进程。

# 暂停容器中的所有进程
docker pause my-running-container
# 恢复已暂停容器中的进程
docker unpause my-running-container

暂停对于临时释放资源或对容器状态进行快照(尽管卷(volume)数据不会冻结)很有用。

停止、启动、重启 (docker stop, start, restart, kill)

Section titled “停止、启动、重启 (docker stop, start, restart, kill)”

这些命令管理容器的运行状态:

  • docker stop <container>: 向主进程(main process)发送 SIGTERM 信号,允许优雅地关闭(graceful shutdown)(等待默认超时时间,然后发送 SIGKILL)。
  • docker kill <container>: 立即发送 SIGKILL 信号,强制停止容器。
  • docker start <container>: 启动一个或多个已停止的容器。
  • docker restart <container>: 停止然后启动一个容器。
docker stop my-container
docker start my-container

删除一个或多个容器。容器必须先停止才能移除,除非使用 -f(force,强制)标志。

# 移除一个已停止的容器
docker rm my-stopped-container
# 停止并移除一个正在运行的容器
docker rm -f my-running-container

将终端(terminal)的标准输入(standard input)、输出(output)和错误流(error streams)连接到容器内运行的主进程。对于与前台进程(foreground processes)交互很有用。

# 附加到运行交互式 shell 或应用程序的容器
docker attach my-interactive-container

使用 Ctrl+P, Ctrl+Q 分离(detach)而无需停止容器。请注意,通常更推荐使用 docker exec 来在运行中的容器内执行附加命令或获取一个 shell。

容器通常会经历以下状态(states):

  • Created(已创建): 容器已创建(例如,通过 docker create 或 docker run 的第一步),但尚未启动。
  • Running(正在运行): 容器正在积极执行其主进程 (docker run, docker start)。
  • Paused(已暂停): 容器内的所有进程都被暂停 (docker pause)。
  • Stopped/Exited(已停止/已退出): 容器的主进程已完成或被终止 (docker stop,或进程已完成/崩溃)。
  • Removing(正在移除): 容器正在被删除 (docker rm)。
  • Dead(死亡): 守护进程(daemon)无法访问容器(不常见)。

start、stop、pause、unpause、kill 和 restart 等命令使容器在这些状态之间转换,而 rm 则完全移除容器。