Skip to content

Docker - 容器

容器是 Docker 镜像的运行实例。它们封装了应用程序及其依赖项。Docker 的主要目的是构建、分发和 运行 容器。本章重点介绍容器生命周期的管理。

创建和启动容器的基本命令是 docker run。我们已经看了一些基本示例,让我们回顾一下交互式运行:

# Run a container from the 'ubuntu' image, interactively (-it), and start a bash shell
# 从 'ubuntu' 镜像运行一个容器,使用交互模式 (-it),并在其内部启动一个 bash shell
docker run -it ubuntu bash

这将启动容器,连接您的终端,并在其中运行 bash 命令。您可以使用 Ctrl+P, Ctrl+Q 分离(detach),保留容器在后台运行,或者输入 exit 来停止它。

要在后台(分离模式)运行容器,请使用 -d 标志:

# Run an nginx container in the background
# 在后台运行一个 nginx 容器
docker run -d --name my-web-server nginx

此命令启动容器并打印容器 ID,然后返回到主机的 shell 提示符。

要查看系统上当前 正在运行 的容器,请使用 docker ps(或 docker container ls)。

docker ps

输出列通常包括:

  • CONTAINER ID: 唯一的 ID(显示短版本)。
  • IMAGE: 容器基于的镜像。
  • COMMAND: 在容器内部执行的命令。
  • CREATED: 容器创建以来的时间。
  • STATUS: 当前状态(例如,‘Up 2 minutes’,‘Exited (0) 5 seconds ago’)。
  • PORTS: 端口映射(例如,0.0.0.0:8080->80/tcp)。
  • NAMES: 分配给容器的名称(如果未使用 --name 指定,则自动生成)。

要查看 所有 容器,包括已停止或退出的容器,请添加 -a 标志:

docker ps -a

这对于查看短暂运行后退出的容器,或者您手动停止的容器很有用。

查看容器历史(镜像层 - docker history)

Section titled “查看容器历史(镜像层 - docker history)”

docker history 命令并不显示在容器实例 内部 运行的命令,而是显示 镜像本身的构建历史,一层一层地展示。它显示了创建每一层的 Dockerfile 中的命令。

# Show the build history of the 'nginx:latest' image
# 显示 'nginx:latest' 镜像的构建历史
docker history nginx:latest

这有助于理解镜像的结构。

要查看在容器内部运行的主进程生成的输出(stdout/stderr),请使用 docker logs。

# Show logs for the container named 'my-web-server'
# 显示名为 'my-web-server' 的容器的日志
docker logs my-web-server
# Follow logs in real-time (like tail -f)
# 实时跟踪日志(类似于 tail -f)
docker logs -f my-web-server
# Show the last 10 lines of logs
# 显示日志的最后 10 行
docker logs --tail 10 my-web-server

这对于调试在容器中运行的应用程序至关重要。

您可以停止和重新启动现有容器:

# Stop the container named 'my-web-server' gracefully (sends SIGTERM, then SIGKILL)
# 优雅地停止名为 'my-web-server' 的容器(发送 SIGTERM 信号,然后是 SIGKILL)
docker stop my-web-server
# Start a stopped container
# 启动一个已停止的容器
docker start my-web-server
# Restart a running or stopped container
# 重新启动一个正在运行或已停止的容器
docker restart my-web-server
# Forcefully stop a container immediately (sends SIGKILL)
# 立即强制停止容器(发送 SIGKILL 信号)
docker kill my-web-server

当您不再需要某个容器时,可以使用 docker rm 将其移除。容器必须先停止才能被移除。

# Stop the container first (if running)
# 先停止容器(如果正在运行)
docker stop my-web-server
# Remove the stopped container
# 移除已停止的容器
docker rm my-web-server
# Force remove a running container (stops and removes)
# 强制移除正在运行的容器(停止并移除)
docker rm -f my-web-server

要轻松移除所有已停止的容器:

docker container prune

这个命令会提示您确认。