目录
2.2 容器 (Container)
容器是 Docker 镜像的运行实例,它提供了一个独立的、隔离的运行环境,包含了自己的文件系统、进程空间和网络栈。容器化技术使得应用程序可以在不同的环境中保持一致的行为,并且可以快速启动和停止。本节将详细介绍容器的生命周期管理、如何启动、停止和删除容器,以及如何查看容器的状态和日志。
2.2.1 容器的生命周期管理
容器的生命周期包括创建、启动、运行、停止、重启和删除等阶段。Docker 提供了一系列命令来管理容器的生命周期,确保你可以灵活地控制容器的运行状态。
容器的生命周期阶段
- 创建 (Create):使用
docker create
命令创建一个容器,但不立即启动它。你可以稍后通过docker start
启动该容器。 - 启动 (Start):使用
docker start
命令启动一个已创建但未运行的容器。 - 运行 (Run):使用
docker run
命令创建并立即启动一个容器。这是最常用的命令,结合了创建和启动两个步骤。 - 停止 (Stop):使用
docker stop
命令优雅地停止一个正在运行的容器。Docker 会向容器发送SIGTERM
信号,给应用程序一定的时间进行清理操作。如果超时,Docker 会发送SIGKILL
强制终止容器。 - 重启 (Restart):使用
docker restart
命令重启一个已经停止的容器。Docker 会先停止容器,然后重新启动它。 - 删除 (Remove):使用
docker rm
命令删除一个已停止的容器。你也可以使用-f
选项强制删除正在运行的容器。 - 暂停 (Pause):使用
docker pause
暂停容器中的所有进程。暂停后的容器不会消耗 CPU 资源,但仍然占用内存。 - 恢复 (Unpause):使用
docker unpause
恢复被暂停的容器,使其继续运行。
2.2.2 启动、停止、删除容器
启动容器
-
创建并启动容器:使用
Bashdocker run
命令创建并立即启动一个容器。你可以指定容器的名称、端口映射、卷挂载等参数。深色版本
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用选项:
-d
:后台运行容器(detached mode)。-p
:将主机端口映射到容器端口。格式为host_port:container_port
。-v
:将主机目录或文件挂载到容器中。格式为host_path:container_path
。--name
:为容器指定一个名称。-e
:设置环境变量。
示例:
- 后台启动一个 Nginx 容器,并将主机的 8080 端口映射到容器的 80 端口: Bash
深色版本
docker run -d -p 8080:80 --name my-nginx nginx:latest
-
仅创建容器:如果你不想立即启动容器,可以使用
Bashdocker create
命令创建容器,稍后再启动它。深色版本
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
示例:
-
创建一个 Nginx 容器,但不启动它:
Bash深色版本
docker create --name my-nginx nginx:latest
-
启动刚刚创建的容器:
Bash深色版本
docker start my-nginx
-
停止容器
-
优雅停止容器:使用
Bashdocker stop
命令停止一个正在运行的容器。Docker 会向容器发送SIGTERM
信号,给应用程序一定的时间进行清理操作。如果超时,Docker 会发送SIGKILL
强制终止容器。深色版本
docker stop CONTAINER_ID_OR_NAME
示例:
- 停止名为
my-nginx
的容器: Bash深色版本
docker stop my-nginx
- 停止名为
-
强制停止容器:如果你需要立即停止容器,可以使用
Bashdocker kill
命令。Docker 会直接发送SIGKILL
信号,强制终止容器。深色版本
docker kill CONTAINER_ID_OR_NAME
示例:
- 强制停止名为
my-nginx
的容器: Bash深色版本
docker kill my-nginx
- 强制停止名为
删除容器
-
删除已停止的容器:使用
Bashdocker rm
命令删除一个已停止的容器。你不能删除正在运行的容器,除非使用-f
选项强制删除。深色版本
docker rm CONTAINER_ID_OR_NAME
示例:
- 删除名为
my-nginx
的容器: Bash深色版本
docker rm my-nginx
- 删除名为
-
强制删除正在运行的容器:使用
Bash-f
选项强制删除正在运行的容器。深色版本
docker rm -f CONTAINER_ID_OR_NAME
示例:
- 强制删除名为
my-nginx
的容器: Bash深色版本
docker rm -f my-nginx
- 强制删除名为
-
删除所有已停止的容器:使用
Bashdocker container prune
命令删除所有已停止的容器。深色版本
docker container prune
系统会提示你确认是否删除这些容器。你可以使用
Bash-f
选项跳过确认:深色版本
docker container prune -f
2.2.3 查看容器状态与日志
查看容器状态
-
列出所有正在运行的容器:使用
Bashdocker ps
命令列出当前正在运行的容器。你可以看到容器的 ID、名称、镜像、端口映射等信息。深色版本
docker ps
示例输出:
深色版本
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1a2b3c4d5e6f nginx:latest "/docker-entrypoint.…" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp my-nginx
-
列出所有容器(包括已停止的):使用
Bashdocker ps -a
命令列出所有容器,包括已停止的容器。深色版本
docker ps -a
示例输出:
深色版本
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1a2b3c4d5e6f nginx:latest "/docker-entrypoint.…" 10 minutes ago Exited (0) 5 minutes ago my-nginx
-
查看容器的详细信息:使用
Bashdocker inspect
命令查看容器的详细信息,包括配置、网络、存储等。深色版本
docker inspect CONTAINER_ID_OR_NAME
示例:
- 查看名为
my-nginx
的容器的详细信息: Bash深色版本
docker inspect my-nginx
- 查看名为
-
实时查看容器的日志:使用
Bashdocker logs
命令查看容器的日志输出。你可以使用-f
选项实时跟踪日志。深色版本
docker logs [OPTIONS] CONTAINER_ID_OR_NAME
常用选项:
-f
:实时跟踪日志(类似tail -f
)。-t
:显示日志的时间戳。--tail <number>
:只显示最近的几行日志。
示例:
-
实时查看名为
Bashmy-nginx
的容器的日志:深色版本
docker logs -f my-nginx
-
查看名为
Bashmy-nginx
的容器的最后 10 行日志:深色版本
docker logs --tail 10 my-nginx
-
查看容器的资源使用情况:使用
Bashdocker stats
命令实时查看容器的 CPU、内存、网络和磁盘 I/O 使用情况。深色版本
docker stats
示例输出:
深色版本
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 1a2b3c4d5e6f my-nginx 0.01% 2.5MB / 1.94GB 0.13% 1.2kB / 0B 0B / 0B 6
总结
容器的生命周期管理是 Docker 使用中的核心操作之一,掌握如何启动、停止、删除容器以及查看其状态和日志,可以帮助你更好地管理和监控应用程序的运行情况。通过 docker run
、docker start
、docker stop
、docker rm
等命令,你可以灵活地控制容器的生命周期。而 docker ps
、docker logs
和 docker stats
等命令则提供了丰富的工具,帮助你实时了解容器的运行状态和性能表现。