Docker
深入理解 Docker 生命周期:Pull、Build、Create、Start
10-20 15:19目录
- 1、底层解剖:Docker 容器从无到有的“四大独立步骤”
- 2、一个容器从无到有的标准步骤(详细解释“四大独立步骤”)
- 3、通过表格理解 Docker 底层生命周期“四大步骤”设计逻辑
- 4、Docker 日常操作:其实只有“两步”
- 5、为什么日常操作只有两步?
- 6、再看构建镜像的过程
1、底层解剖:Docker 容器从无到有的“四大独立步骤”
① 拉取(Pull):获取基础镜像(比如:mysql)。
② 构建(Build):根据 Dockerfile 中的要求生成镜像(比如:加上一些扩展)。
③ 创建(Create):根据上面生成的镜像,创建容器(分配文件系统和网络)。
④ 启动(Start/Up):让这个容器跑起来。
2、一个容器从无到有的标准步骤(详细解释“四大独立步骤”)
① 获取基础镜像:通过 docker pull 从仓库拉取,或在构建时由 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”,那就是要“拉取镜像”,拉取后缓存到本地