首页 > 技术分享 > Docker
收藏

深入理解 Docker 生命周期:Pull、Build、Create、Start

10/20 15:13
大潇博客 原创文章,转载请标明出处

目录




1、底层解剖:Docker 容器从无到有的“四大独立步骤”

① 拉取(Pull):获取基础镜像(比如:mysql)。

② 构建(Build):根据 Dockerfile 中的要求生成镜像(比如:加上一些扩展)。

③ 创建(Create):根据上面生成的镜像,创建容器(分配文件系统和网络)。

④ 启动(Start/Up):让这个容器跑起来。


2、细说“四大独立步骤”:一个容器从无到有的标准过程

① 获取基础镜像(pull):通过 docker pull 从仓库拉取,或在构建时根据 Dockerfile 里的  FROM 指令自动拉取,这一步是为构建准备“原材料”。

② 构建(build)自定义镜像:执行 docker build(或 docker compose build),根据 Dockerfile 的指令,在基础镜像上逐层叠加生成一个新的、只读的镜像。

③ 创建(create)容器:基于已有的镜像,创建一个可运行的容器实例。这一步会为容器分配独立的文件系统(在只读镜像上叠加一个可写层)和网络环境。

④ 启动(start)容器:启动容器中定义的主进程,使容器从“已创建”状态进入“运行中”状态。


3、通过表格理解 Docker 底层生命周期“四大步骤”设计逻辑

步骤 动作 具体描述 原生核心命令 日常操作的真相 (捷径)
1 Pull 拉取 把基础镜像从镜像仓库(如 Docker Hub)拉到本地。如果本地已有缓存,则自动跳过。 docker pull 通常不需要手动执行,后续的构建或启动命令会自动触发。
2 Build 构建 按你的 Dockerfile 指令,在基础镜像上一层层叠加,烤出一个属于你的新镜像。 docker build 如果不需要装扩展改配置(没写 Dockerfile),可以直接跳过这一步。
3 Create 创建 基于镜像,在底层分配独立的文件系统(可写层)和网络栈,造出一个容器实例。 docker create 被 run 或 up 隐式打包完成
(等于敲一条命令,Docker 在后台自动连招)
4 Start 启动 启动这个容器实例里的主进程,让它真正跑起来。 docker start


4、Docker 日常操作:其实只有“两步”

很多新手在学习 Docker 时,会觉得命令极其复杂。但实际上,抛开底层的繁琐细节,在终端敲命令,最核心的操作确实只有两步:

docker compose build #构建镜像

docker compose up -d #启动容器


5、为什么日常操作只有两步?

我们在日常操作中,很少分别敲 pull、build、create、start 这 4 条命令。因为:

docker run = 检查拉取 (Pull) + 创建 (Create) + 启动 (Start)

docker compose up -d = 检查镜像 (可能触发 Build) + 创建 (Create) + 启动 (Start)

所以从“宏观操作”来看,就是两步(构建 + 启动);日常交流中,说“就这两步”完全没问题。

但从“底层生命周期”来看,必然是 4 个独立步骤,这点要清晰明了。


6、再看构建镜像的过程

通过上面的详细介绍,再来理解构建镜像的过程:

构建镜像时(build),docker 先要查询本地有没有所需镜像的缓存,如果有则直接使用,没有的话,还有“拉取镜像”这一步(pull)

构建镜像时,docker-compose.yml 中必须要有“build”这项配置,配置内容是“Dockerfile”文件的路径,可指向一个目录,docker 会自动找 Dockerfile 这个文件,如果文件名是自定义的,那就需要带上文件的名称

如果 docker-compose.yml 中没有“build”这项配置,只有“image”,那就是要“拉取镜像”,拉取后缓存到本地


7、docker run 命令的理解


8、docker compose up -d 命令的理解

⑴. docker compose up -d 是要读当前目录的 docker-compose.yml、对比里面定义的服务和当前运行状态(-d 表示后台运行,命令立即返回),按需处理:

  • 容器不存在 → 创建并启动。
  • 容器存在且配置没变 → 不动,保持运行。
  • 容器存在但配置变了(镜像、挂载、端口、环境变量等)→ 重建这个容器(删掉旧的,建新的)。

⑵. 注意以下两点:

① docker compose up -d 不是“重启”,是“确保达到 compose 文件描述的状态”。如果一切都没变,它什么都不做,容器不会重启。

② 只有配置变了(比如你改了挂载路径、端口、Dockerfile 并 --build),才会重建对应容器。重建是“删旧建新”,不是“重启”。

⑶. 命令执行目录的要求:

docker compose 默认在当前目录找 compose.yaml、compose.yml、docker-compose.yaml、docker-compose.yml 这几个文件。

不在那个目录时,有两种办法:

① 用 -f 指定文件路径:docker compose -f /srv/docker/a/docker-compose.yml up -d

② 用 --project-directory 指定项目目录:docker compose --project-directory /srv/docker/a up -d


打赏

上一篇:docker1

下一篇:docker常用命令

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311