简介
在现代软件开发中,容器已经成为打包和部署应用程序的常用方式。容器不是完整的虚拟机。它与主机共享内核,但会在隔离的进程环境中运行应用程序,并拥有独立的文件系统视图和网络配置。
在本实验中,你将通过运行一个现实中常用的应用程序——Nginx Web 服务器——迈出使用 Docker 的第一步。许多容器并不是执行一次就结束的命令,而是会作为长期运行的服务持续工作,因此你需要理解容器的生命周期。
这与 hello-world 示例有一个重要区别。hello-world 容器启动、打印信息后就退出;现在你要使用的是服务容器,只要其主进程仍在运行,容器就会持续保持活动状态。
你将学习如何:
- 在后台启动容器(分离模式)。
- 查看正在运行的容器状态。
- 完成操作后停止容器。
- 删除容器以释放系统资源。
完成本实验后,你将理解 Docker 容器的完整生命周期:创建、运行、停止和删除。
在后台运行 Web 服务器
在此步骤中,你将启动 Nginx Web 服务器。
在终端中运行命令时,命令通常会一直占用屏幕,直到执行完成。但是,对于 Web 服务器这类服务,你通常希望它持续在后台运行,这样就可以继续使用终端执行其他任务。在 Docker 中,这称为「分离模式」。
使用 -d 选项可以让容器以分离模式运行。我们还会使用 --name 选项,为容器指定一个易于记忆的名称。
分离模式不会改变容器执行的任务,只会改变终端与容器的连接方式。服务会继续运行,但命令行提示符会立即返回。
运行以下命令,启动一个名为 my-nginx 的 Nginx 容器:
docker run --name my-nginx -d nginx
命令解析:
docker run:创建并启动新容器的命令。--name my-nginx:为容器指定名称「my-nginx」。如果省略此选项,Docker 会分配一个随机名称,例如happy_hopper。-d:让容器以分离模式(后台)运行。nginx:要使用的镜像。Docker 会先在本地查找该镜像;如果找不到,就会从 Docker Hub 下载。
输出结果:
终端会打印一串很长的字符。这就是容器 ID。命令行提示符立即返回,说明容器正在后台运行。
容器 ID 是 Docker 内部使用的标识符,容器名称则是便于人阅读的标签。在日常工作中,使用名称通常比使用很长的 ID 更方便。
检查容器状态
启动容器后,需要确认它是否按预期运行。docker ps 命令会列出所有处于活动状态的容器。
执行以下命令:
docker ps
你应该会看到类似以下内容的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 nginx "/docker-entrypoint.…" 10 seconds ago Up 10 seconds 80/tcp my-nginx
理解输出内容:
- CONTAINER ID:此容器的唯一 ID,是之前看到的长字符串的截短版本。
- IMAGE:正在运行的镜像(
nginx)。 - STATUS:
Up表示容器正在正常运行。 - NAMES:为容器指定的名称(
my-nginx)。
如果看到这条记录,就说明 Web 服务器已成功在后台运行!
docker ps 的输出是日常运维中最主要的查看信息之一。它会告诉你当前哪些容器处于活动状态、这些容器来自哪个镜像,以及它们已经运行了多长时间。
停止服务
完成服务操作或需要重新配置服务时,必须停止正在运行的容器。
docker stop 命令会向容器发送信号,请求其正常关闭。你可以使用容器 ID 或名称指定目标容器。由于我们为容器指定了名称 my-nginx,这里使用该名称。
正常停止很重要,因为许多服务需要时间关闭文件、释放端口或完成正在处理的工作。停止容器不只是「关闭它」,而是请求其主进程正常退出。
运行以下命令:
docker stop my-nginx
终端会打印 my-nginx,确认已经收到该命令。
验证容器是否已停止:
再次运行 docker ps。列表应为空,或者不再显示 my-nginx。
要确认容器仍然存在但已停止,请使用 -a(全部)选项:
docker ps -a
此时,你会看到 my-nginx,其状态为 Exited。
清理资源
停止容器不会删除容器。容器仍会保留在磁盘上,其日志和配置也会继续保存。如果你想稍后使用 docker start 重新启动它,这一特性会很有用。
这是另一个需要记住的生命周期区别:创建/运行、停止和删除是彼此独立的操作。Docker 将这些状态分开保存,这样你就可以在删除容器之前检查或重新启动它们。
但是,如果你已经完全不再需要该容器,就应该将其删除,以保持系统整洁。docker rm 命令用于删除已停止的容器。
执行以下命令,删除 my-nginx:
docker rm my-nginx
终端会打印 my-nginx,确认容器已被删除。
最终检查:
最后再运行一次 docker ps -a。你会看到该容器已经完全消失。
注意:通常不能使用 docker rm 删除正在运行的容器。必须先停止容器(如本实验所做),或者使用 -f(强制)选项;不过,优先采用正常停止的方式。
总结
在本实验中,你成功管理了 Docker 容器的完整生命周期。你学会了如何:
- 使用
docker run -d运行后台服务。 - 使用
docker ps检查活动容器的状态。 - 使用
docker stop正常停止服务。 - 使用
docker rm删除已停止的容器,以释放资源。
这四个命令是所有 Docker 用户日常工作中最常用的命令。现在,你已经可以进一步探索如何更深入地与正在运行的容器交互。



