Docker 三大核心概念:镜像、容器、仓库

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
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容