Docker 三大核心概念:镜像、容器、仓库
一言以蔽之
Docker 的三大核心概念是 镜像(Image)、容器(Container) 和 仓库(Repository/Registry)。理解这三个概念及其关系,是掌握 Docker 的基石。
三者的关系
graph TB
subgraph 构建阶段
DF[Dockerfile] -->|docker build| IMG[镜像 Image]
end
subgraph 分发阶段
IMG -->|docker push| REG[仓库 Registry]
REG -->|docker pull| IMG2[镜像 Image]
end
subgraph 运行阶段
IMG2 -->|docker run| C1[容器 Container 1]
IMG2 -->|docker run| C2[容器 Container 2]
end
style IMG fill:#ffd700
style REG fill:#87ceeb
style C1 fill:#90ee90
style C2 fill:#90ee90
核心概念详解
1. 镜像(Image)— 运行环境的”模版”
镜像是一个只读的、轻量级的、可执行的软件包,包含了运行应用所需的一切:
# 一个典型的 Dockerfile 构建出的镜像包含
FROM node:18 # 基础操作系统(ALPINE Linux)
WORKDIR /app # 工作目录
COPY package*.json ./ # 应用代码
RUN npm install # 依赖包
COPY . . # 配置文件
EXPOSE 3000 # 端口声明
CMD ["npm", "start"] # 启动命令
镜像的特点:
– 只读性:镜像一经构建,其内容不可修改
– 分层结构:镜像由多层叠加而成,每层仅记录差异
– 可复用:一个镜像可以被无数容器使用
2. 容器(Container)— 镜像的”运行实例”
容器是镜像的运行时实例,是在镜像只读层之上创建的可写层:
graph LR
subgraph 容器文件系统
L0[基础层 / Ubuntu 只读]
L1[依赖层 / apt install 只读]
L2[应用层 / COPY . 只读]
RW[容器可写层 可读写<br/>日志 / 缓存 / 运行时数据]
end
L0 --> L1 --> L2 --> RW
容器的特点:
– 隔离性:每个容器拥有独立的 Namespace(网络、PID、挂载等)
– 跨环境一致性:镜像相同,容器行为就相同
– 短暂性:停止或删除容器后,其可写层数据丢失(除非使用 Volume)
– 轻量级:共享宿主机内核,秒级启动
3. 仓库(Repository/Registry)— 镜像的”代码仓库”
仓库是集中存储、管理和分发 Docker 镜像的场所:
# 仓库中的镜像命名规则
[仓库地址]/[用户名或命名空间]/[镜像名]:[标签]
# Docker Hub 示例
docker.io/library/nginx:latest # 官方 Nginx 最新版
docker.io/library/ubuntu:22.04 # Ubuntu 22.04
# 私有仓库示例
registry.mycompany.com/team-a/app:v1.2.3
类比三方协作
graph LR
subgraph 现实世界类比
A1[设计图纸] --> B1[按图建造的房子]
A2[建材市场] -.->|运材料| B1
end
subgraph Docker 类比
IMG[镜像=docker build] --> CTN[容器=docker run]
REG[仓库=Registry] -.->|镜像分发| CTN
end
A1 -->|类比| IMG
B1 -->|类比| CTN
A2 -->|类比| REG
完整工作流
# Step 1: 编写 Dockerfile(定义镜像)
cat > Dockerfile << EOF
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
EOF
# Step 2: 构建镜像(Build)
docker build -t myapp:1.0 .
# 输出: Successfully tagged myapp:1.0
# Step 3: 推送镜像到仓库(Ship)
docker tag myapp:1.0 myregistry.com/myapp:1.0
docker push myregistry.com/myapp:1.0
# Step 4: 在其他机器运行容器(Run)
docker pull myregistry.com/myapp:1.0
docker run -d -p 5000:5000 myapp:1.0
三大概念面试要点
| 概念 | 关键词 | 常见面试题 |
|---|---|---|
| 镜像 | 只读、分层、模板 | 镜像层是什么?为什么分层? |
| 容器 | 实例、隔离、可写层 | 容器和虚拟机区别?容器如何隔离? |
| 仓库 | 存储、分发、版本管理 | Docker Hub 和私有仓库区别?镜像拉取过程? |
总结
Docker 三大核心概念构成了 Docker 生态的铁三角:
Build(构建) → Ship(分发) → Run(运行)
镜像 仓库 容器
开发者在本地构建镜像并推送到仓库,运维人员从仓库拉取镜像并启动容器。这个流程贯穿了整个 DevOps 生命周期,是所有 Docker 知识的基础。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容