简介
在本实验中,我们将探索如何使用 docker start
命令来管理 Docker 容器的生命周期。首先我们会了解 docker start
的基本用途,以及它与 docker run
的区别。
通过动手实践,你将学习如何同步启动已停止的容器、以分离模式启动容器,以及为启动操作设置超时时间。完成本实验后,你将能够熟练使用 docker start
命令高效地恢复 Docker 容器。
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
在本实验中,我们将探索如何使用 docker start
命令来管理 Docker 容器的生命周期。首先我们会了解 docker start
的基本用途,以及它与 docker run
的区别。
通过动手实践,你将学习如何同步启动已停止的容器、以分离模式启动容器,以及为启动操作设置超时时间。完成本实验后,你将能够熟练使用 docker start
命令高效地恢复 Docker 容器。
在这一步中,我们将了解 docker start
命令的用途。docker start
命令用于启动一个或多个已停止的容器。当你使用 docker stop
停止容器时,其状态会被保存,之后你可以使用 docker start
来恢复它。这与 docker run
不同,后者会从镜像创建一个新容器并启动它。
首先,让我们创建一个简单的容器用于停止和启动操作。我们将使用 ubuntu
镜像并运行一个能让容器短暂保持运行的命令。
docker run -d --name my-ubuntu ubuntu sleep 60
这个命令以分离模式 (-d
) 运行一个 Ubuntu 容器,将其命名为 my-ubuntu
,并在容器内执行 sleep 60
命令。sleep 60
命令会让容器保持运行 60 秒。
现在,让我们用 docker ps
检查容器状态。
docker ps
你应该能看到 my-ubuntu
容器显示为 Up
状态。
接下来,我们将使用 docker stop
命令停止容器。
docker stop my-ubuntu
这个命令会向 my-ubuntu
容器发送停止信号。
现在,让我们再次用 docker ps
检查容器状态。
docker ps
你会发现 my-ubuntu
容器不再出现在 docker ps
的输出中(该命令只显示运行中的容器)。要查看所有容器(包括已停止的),可以使用 docker ps -a
。
docker ps -a
现在你应该能看到 my-ubuntu
容器显示为 Exited
状态,这确认容器已被停止。
最后,我们将使用 docker start
命令启动已停止的容器。
docker start my-ubuntu
这个命令会启动 my-ubuntu
容器。
让我们最后一次用 docker ps
检查容器状态。
docker ps
你应该会再次看到 my-ubuntu
容器显示为 Up
状态。这证明了 docker start
成功恢复了之前停止的容器。
总结来说,docker start
用于恢复已停止的容器并保留其状态,而 docker run
则是创建并启动一个新容器。
在这一步中,我们将探索如何同步启动 Docker 容器。当你同步启动容器时,命令会等待容器执行完成后再将控制权返回给终端。这是在不使用 -d
(分离)标志直接运行容器命令时的默认行为。
让我们使用一个简单的 ubuntu
容器来演示同步执行。我们将运行一个打印消息后立即退出的命令。
首先,确保 ubuntu
镜像可用。如果没有,请拉取:
docker pull ubuntu
现在,同步运行一个打印"Hello from Ubuntu"后立即退出的容器。
docker run --rm ubuntu echo "Hello from Ubuntu"
让我们分解这个命令:
docker run
:创建并运行新容器的命令--rm
:容器退出时自动删除的标志,适用于此类临时容器ubuntu
:使用的镜像名称echo "Hello from Ubuntu"
:将在容器内执行的命令运行此命令时,你将直接在终端看到输出"Hello from Ubuntu"。在容器内的 echo
命令完成且容器退出前,命令提示符不会返回。这就是同步执行。
这与我们上一步看到的分离模式形成对比,在分离模式下命令会立即返回,容器在后台运行。
为了进一步说明同步行为,让我们运行一个耗时稍长的命令。
docker run --rm ubuntu sleep 5
这个命令将运行 Ubuntu 容器并执行 sleep 5
命令,暂停执行 5 秒。你会注意到终端将被阻塞 5 秒,直到命令完成提示符返回。这是因为 docker run
命令正在等待容器内的 sleep 5
命令完成。
这种同步模式在你需要运行容器命令并等待其输出或完成,然后才能继续执行脚本或工作流中的后续操作时非常有用。
在本步骤中,我们将学习如何以分离模式启动 Docker 容器。分离模式意味着容器在后台运行,Docker 命令会立即将控制权返回给终端。这种方式特别适用于需要长期运行的服务或应用程序,而无需直接在终端中与其交互。
要使用分离模式启动容器,你需要在 docker run
或 docker start
命令中添加 -d
或 --detach
标志。
让我们以分离模式启动一个简单的 Nginx 网页服务器容器。首先,如果你本地没有 nginx
镜像,请先拉取:
docker pull nginx
现在,以分离模式运行 Nginx 容器,并将容器的 80 端口映射到主机的 8080 端口:
docker run -d --name my-nginx -p 8080:80 nginx
让我们分解这个命令:
docker run
:创建并运行新容器-d
:以分离模式(后台)运行容器--name my-nginx
:将容器命名为 my-nginx
-p 8080:80
:将容器内部的 80 端口映射到主机的 8080 端口,这样你就可以通过主机的浏览器访问 http://localhost:8080
来访问 Nginx 网页服务器nginx
:使用的镜像名称运行此命令后,你会在终端看到一串长字符,这是容器 ID。命令提示符会立即返回,表明容器正在后台运行。
要验证容器是否正在运行,可以使用 docker ps
命令:
docker ps
你应该能看到 my-nginx
容器显示为 Up
状态。
你也可以使用 curl
测试从主机访问 Nginx 网页服务器:
curl http://localhost:8080
你会在终端看到 Nginx 默认欢迎页面的 HTML 内容,这确认了容器正在运行且可以通过映射的端口访问。
要停止分离模式的容器,可以使用 docker stop
命令加上容器名称或 ID:
docker stop my-nginx
停止容器后,使用 docker ps
验证它是否已停止运行:
docker ps
输出结果中不应再显示 my-nginx
容器。
以分离模式启动容器对于需要持续运行而不阻塞终端的服务和应用程序至关重要。
在本步骤中,我们将学习如何设置超时启动 Docker 容器。docker start
命令提供了 --attach
标志,允许你附加到容器的 STDOUT/STDERR 并转发信号。当与 --attach
一起使用时,你还可以指定 --timeout
标志来设置客户端断开连接后容器停止的超时时间。这对于确保启动容器的客户端终止后,容器不会无限期运行特别有用。
首先,我们创建一个可以设置超时启动的容器。我们将使用 ubuntu
镜像并运行一个保持容器运行的命令。
docker create --name my-timeout-ubuntu ubuntu sleep 60
该命令从 ubuntu
镜像创建名为 my-timeout-ubuntu
的容器,并设置命令为 sleep 60
。注意这里我们使用了 docker create
,它只创建容器但不会启动它。
现在,我们将使用带有 --attach
和 --timeout
标志的 docker start
来启动这个容器。设置超时时间为 5 秒。
docker start --attach --timeout 5 my-timeout-ubuntu
让我们分解这个命令:
docker start
:启动已停止的容器--attach
:附加到容器的 STDOUT/STDERR 并转发信号--timeout 5
:设置 5 秒超时。如果客户端(本例中是你的终端)断开连接,Docker 将等待 5 秒让容器优雅停止。如果 5 秒内未停止,Docker 将发送 SIGKILL 信号强制停止my-timeout-ubuntu
:要启动的容器名称运行此命令后,你将附加到容器的输出。由于容器只是运行 sleep 60
,你不会立即看到任何输出。
现在,我们模拟客户端断开连接。你可以在终端按 Ctrl+C
来实现。这将使你从容器分离。
按下 Ctrl+C
后,Docker 将启动超时处理。它会等待 5 秒让 my-timeout-ubuntu
容器停止。由于容器运行的是 sleep 60
,它不会在 5 秒内停止,Docker 将强制停止它。
要验证容器是否已停止,使用 docker ps -a
。
docker ps -a
你应该能看到 my-timeout-ubuntu
的状态显示为 Exited
。这确认了超时机制生效,容器在客户端断开连接后被停止。
将 --timeout
标志与 docker start --attach
结合使用,是管理通过客户端连接启动的容器生命周期的良好实践,确保即使客户端意外终止,容器也能被正确清理。
在本实验中,我们学习了 docker start
命令的基本用途:恢复已停止的容器并保持其原有状态。我们将其与 docker run
进行了区分,后者用于创建并启动新容器。通过实践步骤,我们演示了如何创建容器、使用 docker stop
停止容器、通过 docker ps -a
验证其停止状态,最后使用 docker start
重新启动容器,并通过 docker ps
确认其运行状态。
我们还探索了使用 docker desktop start
命令启动 Docker Desktop 的不同方式,包括同步启动、分离模式启动以及指定超时启动。这些选项为控制 Docker Desktop 的启动行为提供了灵活性,可根据具体需求和工作流程进行选择。