Docker容器的生命周期

引言

Docker 容器作为一种轻量级虚拟化技术,在现代应用开发和部署中扮演着重要角色。理解容器的生命周期对于有效地管理和运维容器化应用至关重要。本文将深入探讨 Docker 容器的生命周期,从创建到销毁的各个阶段,帮助读者更好地掌握容器管理的核心概念。

一、Docker 简介和基本概念

1.1 Docker 容器

Docker 是一个开源的容器化平台,旨在帮助开发人员更轻松地构建、部署和运行应用程序。它利用容器技术,将应用程序及其所有依赖项打包成一个独立的单元,使其在任何环境中都能一致运行。

Docker 容器是 Docker 镜像的一个实例化运行,它是一个轻量级的、可执行的软件包,包含了运行应用程序所需的所有内容:代码、运行时、系统工具、系统库等。容器隔离了应用程序与其它容器及主机系统,使其能在一个独立的环境中运行。Docker 镜像是容器的模板,是一个只读的模板,包含了运行应用程序所需的所有内容。可以将镜像看作是容器的源代码,通过它可以创建多个相同的容器实例。

1.2 Docker 容器生命周期

Docker 容器使用特定命令,将当前容器从一种状态转为另一种状态,使当前容器处于不同的状态。Docker 容器生命周期可分为已创建(Created)、运行中(Running)、停止(Stopped)、暂停中(Paused)以及删除(Deleted)等几种。 以下为生命周期状态转换图例:

Docker 容器的生命周期涵盖了七个关键阶段、五种状态,每个阶段都有其特定的目标和操作。

序号 生命周期 说明
1 创建(Create) 在容器的生命周期中,创建是第一个关键阶段。 在这个阶段,我们选择适当的 Docker 镜像作为容器的基础,并使用 Docker 命令来创建容器实例。 容器的配置选项和环境变量设置也在这个阶段完成。
2 启动(Start) 一旦容器被成功创建,就可以进入启动阶段。启动已创建的容器,使其处于运行状态。
3 运行(Run) 容器的运行阶段是其生命周期的核心。在此阶段,在容器中运行应用程序,处理请求等。
4 暂停 在某些情况下,我们可能需要暂停容器的运行,而不是完全停止它。 暂停容器会冻结其状态,包括应用程序的进程。容器的资源消耗会暂时减少,但状态仍然保留在内存中。
5 继续 当需要时,我们可以将容器从暂停状态切换回运行状态,使应用程序继续处理请求。
6 停止(Stop) 停止正在运行的容器,但并不会删除它。 在停止阶段,容器会被正常关闭,应用程序会完成清理工作并释放资源。
7 删除(Delete) 当我们确定不再需要特定容器时,可以从系统中删除已停止的容器实例。

综上所述,全面了解 Docker 容器的生命周期各个阶段对于有效地管理容器化应用至关重要。通过适当地执行每个阶段的操作,我们可以确保应用程序的可靠性和稳定性,并更好地应对容器化应用开发和运维的挑战。

二、Docker 容器生命周期状态

2.1 Created: 已创建

创建容器是 Docker 容器生命周期的首要阶段。在这一阶段,我们需要明确选择一个合适的 Docker 镜像作为容器的基础,一个良好的镜像选择可以确保容器内应用的稳定和正确运行。

graph LR A([镜像])--create---->A1["Created(已创建)"] style A fill:#fccc99 style A1 fill:#6d8762
bash 复制代码
docker create [镜像名称|镜像ID]

使用 docker create nginx 会基于NGINX创建一个容器,结果状态为已创建状态(created)。

2.2 Running: 运行中

启动容器是容器生命周期的关键步骤之一,使用 Docker 命令启动(或运行)容器

graph LR A([镜像])--create---->A1["Created(已创建)"]--start-->A2["Running(运行中)"] B([镜像])--run---->B1["Created(已创建)"]-->B2["Running(运行中)"] style A fill:#fccc99 style B fill:#fccc99 style A1 fill:#6d8762 style A2 fill:#6d8762 style B1 fill:#6d8762 style B2 fill:#6d8762
bash 复制代码
# 启动容器
docker start [容器名称|容器ID]

docker run [容器名称|容器ID]
  • 使用 docker start |容器ID] 启动指定ID的容器,结果状态为已运行状态(running)。
  • 使用 docker run -d nginx 会基于NGINX创建并运行一个容器,结果状态也为已运行状态(running)。

2.3 Stopped: 停止

在容器的生命周期中,停止和重启容器是两个重要的操作,用于管理容器的运行状态和应用程序的执行。在容器运行过程中,合理地使用停止和重启操作可以确保应用程序的正常关闭和重新启动,避免数据丢失和不稳定的状态。通过这些操作,我们可以更好地管理容器的生命周期。

graph LR A([运行中的容器])--stop---->A1["Stopped(停止)"] B([停止的容器])--restart---->B1["Running(运行中)"] style A fill:#fccc99 style B fill:#fccc99 style A1 fill:#6d8762 style B1 fill:#6d8762
bash 复制代码
# 优雅地停止容器
docker stop [容器名称|容器ID]

# 立即强制停止容器
docker kill [容器名称|容器ID]

# 重启容器
docker restart [容器名称|容器ID]

使用 docker stop [容器ID] 将停止指定ID的容器,结果状态为已运行状态(stopped)。

2.4 Paused: 暂停中

在容器运行时,我们可以选择将容器暂停,以冻结容器的状态。暂停容器可以保留容器的当前状态,同时释放部分资源。当需要时,我们可以恢复容器的运行状态,使应用程序继续执行。

graph LR A([运行中的容器])--pause-->A1["Paused(暂停中)"] --unpause-->A2["Running(运行中)"] style A fill:#fccc99 style A1 fill:#6d8762 style A2 fill:#6d8762
bash 复制代码
# 暂停容器
docker pause [容器名称|容器ID]

# 继续容器
docker unpause [容器名称|容器ID]
  • 使用 docker pause [容器ID] 将暂停指定ID的容器,结果状态为已暂停状态(pause)。暂停状态容器可以使用unpause恢复运行状态。
  • 使用 docker unpause [容器ID] 将恢复指定ID的容器为运行状态,结果状态为运行状态(running)。

通过暂停和继续容器,可以在一定程度上控制容器的资源使用,同时保留容器的状态。这在某些场景下可能会非常有用,例如需要暂时释放资源以应对其他任务的情况,或者在容器内发生故障时,冻结容器状态以便进行故障排查。

2.5 Deleted: 删除

在容器的生命周期中,当我们确定某个容器不再需要时,可以选择将其删除,以释放资源并保持环境整洁。这将会彻底删除指定的容器,包括其状态、数据以及所有相关信息。需要注意的是,删除容器不会影响镜像本身,镜像将保留在系统中供其他容器使用。

graph LR A([运行中的容器])--stop-->A1["Stopped(已停止)"] --rm-->A2["Deleted(删除)"] style A fill:#fccc99 style A1 fill:#6d8762 style A2 fill:#6d8762
bash 复制代码
docker rm [容器名称|容器ID]

直接删除运行中容器,会弹出警告错误。返回信息告诉你,需先停止容器,才可以删除。或者使用-f参数进行强制删除。先使用 docker stop [容器ID] 停止指定ID容器,再使用 docker rm [容器ID] 删除指定ID的容器,结果状态为删除状态(deleted)。

三、结语

以上就是 Docker 的生命周期的几种状态、状态间的转换说明,在本文中,我们探讨了容器生命周期的每个阶段,从创建、启动、运行,到暂停、继续、停止和删除。学习 Docker,掌握生命周期,对于学习 Docker,至关重要。通过对容器的各个生命周期阶段进行深入的了解,我们能够更好地构建稳定、可靠的容器化应用,从而提高开发和运维的效率。

把今天最好的表现当作明天最新的起点......~

相关推荐
小的~~21 分钟前
k8s使用本地docker私服启动自制的flink集群
docker·flink·kubernetes
诚诚k1 小时前
docker存储
运维·docker·容器
sorel_ferris1 小时前
Ubuntu-24.04中Docker-Desktop无法启动
linux·ubuntu·docker
多多*2 小时前
OJ在线评测系统 登录页面开发 前端后端联调实现全栈开发
linux·服务器·前端·ubuntu·docker·前端框架
NiNg_1_2342 小时前
使用Docker Compose一键部署
运维·docker·容器
萠哥啥都行3 小时前
Linux安装Docker以及Docker入门操作
运维·docker·容器
王哲晓3 小时前
Linux通过yum安装Docker
java·linux·docker
汀、人工智能3 小时前
修改Docker默认存储路径,解决系统盘占用90%+问题(修改docker root dir)
docker·容器
吃面不喝汤664 小时前
如何配置和使用自己的私有 Docker Registry
运维·docker·容器
Leighteen4 小时前
Docker常用命令
docker·容器