介绍
Docker 是一个强大的容器化平台,使开发者能够高效地部署和管理应用程序。了解如何重启 Docker 服务对于维护系统稳定性和解决潜在的配置或性能问题至关重要。本教程提供了关于在不同场景和操作系统中重启 Docker 服务的全面指导。在这个 Lab(实验)中,你将学习如何重启 Docker 守护进程和单个容器,并了解不同重启方法的影响。
Docker 是一个强大的容器化平台,使开发者能够高效地部署和管理应用程序。了解如何重启 Docker 服务对于维护系统稳定性和解决潜在的配置或性能问题至关重要。本教程提供了关于在不同场景和操作系统中重启 Docker 服务的全面指导。在这个 Lab(实验)中,你将学习如何重启 Docker 守护进程和单个容器,并了解不同重启方法的影响。
Docker 守护进程(daemon)是管理 Docker 对象(如镜像、容器、网络和卷)的后台进程。在进行配置更改后,或者为了解决影响整个 Docker 环境的问题,通常需要重启 Docker 守护进程。
在这一步中,你将学习如何使用 systemd 命令重启 Docker 守护进程。
首先,让我们检查 Docker 服务的当前状态。
sudo systemctl status docker
你应该看到输出,指示 Docker 服务是否处于活动和运行状态。
现在,让我们重启 Docker 服务。这将停止由守护进程管理的所有正在运行的容器,然后再次启动守护进程。
sudo systemctl restart docker
命令完成后,再次检查状态以确认 Docker 服务已成功重启。
sudo systemctl status docker
你应该看到该服务已重启并且处于活动状态。
或者,你可以分别停止和启动 Docker 服务。首先,停止服务:
sudo systemctl stop docker
检查状态以确认它处于非活动状态:
sudo systemctl status docker
然后,启动服务:
sudo systemctl start docker
最后,再次检查状态以确保它处于活动状态:
sudo systemctl status docker
重启 Docker 守护进程是管理 Docker 环境的基本操作。重要的是要注意,此操作将停止所有正在运行的容器。
虽然重启整个 Docker 守护进程会影响所有容器,但你通常只需要重启特定的容器。这对于应用特定于容器的配置更改、解决单个应用程序的问题或仅重启在容器中运行的服务非常有用。
在这一步中,你将学习如何重启单个 Docker 容器。
首先,让我们拉取一个简单的 Nginx 镜像并运行一个容器。
docker pull nginx
docker run -d --name my-nginx -p 80:80 nginx
此命令拉取 nginx
镜像,在分离模式(-d
)下运行一个名为 my-nginx
的容器,并将主机上的 80 端口映射到容器上的 80 端口(-p 80:80
)。
检查容器是否正在运行:
docker ps
你应该看到 my-nginx
容器列出,状态为 Up
。
现在,让我们重启 my-nginx
容器。
docker restart my-nginx
此命令向容器发送停止信号,等待其正常停止,然后再次启动它。默认情况下,Docker 会等待 10 秒钟让容器停止,然后强制终止它。
再次检查容器状态:
docker ps
该容器应仍然列为 Up
,但 STATUS
列将显示它已重启(例如,Up X seconds
)。
你还可以使用 -t
标志为重启操作指定超时时间。例如,等待 5 秒钟:
docker restart -t 5 my-nginx
如果你需要为应用程序提供更多或更少的时间来干净地关闭,这将非常有用。
重启单个容器可以对你的应用程序进行精细控制,而不会影响其他正在运行的容器或 Docker 守护进程本身。
Docker 允许你为容器配置重启策略(restart policies)。重启策略决定了容器退出后,Docker 守护进程是否应自动重启该容器。这是确保应用程序可用性的关键特性。
在这一步中,你将学习如何为 Docker 容器配置重启策略。
首先,让我们停止并删除之前的 my-nginx
容器,以便重新开始。
docker stop my-nginx
docker rm my-nginx
现在,让我们运行一个新的 Nginx 容器,其重启策略为 always
。
docker run -d --name my-nginx-always --restart=always -p 80:80 nginx
--restart=always
标志告诉 Docker,如果容器停止,则始终重启该容器,而不管退出代码如何。它还将在 Docker 守护进程启动时重启容器。
检查容器是否正在运行:
docker ps
现在,让我们通过手动停止容器来模拟容器故障。
docker stop my-nginx-always
等待几秒钟,然后再次检查容器状态:
docker ps
你应该看到 my-nginx-always
容器已由 Docker 守护进程自动重启。 STATUS
列将指示它已 Up
一小段时间。
其他常见的重启策略包括:
no
:不自动重启容器(默认)。on-failure
:仅当容器以非零退出代码退出时才重启容器(表示错误)。你可以选择指定最大重启尝试次数(例如,on-failure:5
)。unless-stopped
:始终重启容器,除非用户显式停止该容器或 Docker 守护进程停止。让我们尝试 on-failure
策略。停止并删除当前容器:
docker stop my-nginx-always
docker rm my-nginx-always
运行一个新容器,使用 on-failure
策略:
docker run -d --name my-nginx-on-failure --restart=on-failure -p 80:80 nginx
检查它是否正在运行:
docker ps
现在,让我们模拟一个故障。我们可以通过在容器内执行一个以非零状态退出的命令来做到这一点。
docker exec my-nginx-on-failure sh -c "exit 1"
几秒钟后检查容器状态:
docker ps
容器应该已经自动重启,因为它以非零状态退出。
重启策略是确保容器化应用程序弹性的强大工具。通过配置适当的策略,你可以自动恢复意外停止的容器。
在这个实验中,你已经学习了如何重启 Docker 守护进程和单个容器。你探索了使用 systemd 命令重启守护进程的不同方法,并学习了如何使用 docker restart
命令重启特定容器。此外,你还了解了 Docker 的重启策略以及如何配置它们以根据不同条件自动重启容器,从而提高应用程序的可用性。这些技能对于有效管理和排除 Docker 环境故障至关重要。