ZBLOG

什么是镜像

镜像是 Docker 的核心概念之一,可以理解为容器的”模板”或”只读蓝图”。


1. 镜像的通俗理解

类比说明

镜 像  ➜  类 (Class)
容 器  ➜  对象实例 (Object Instance)

镜 像  ➜  操作系统安装光盘
容 器  ➜  安装好的运行系统

2. 镜像的分层结构

联合文件系统 (Union File System)

# Dockerfile
FROM ubuntu:20.04           # ← 基础层 (Base Image)
RUN apt update && apt install -y python3  # ← 第二层
COPY . /app                 # ← 第三层  
CMD ["python3", "app.py"]   # ← 第四层

分层示意图

容器可写层 (Container Writable Layer)
    ↑
镜像层4: CMD指令
    ↑  
镜像层3: COPY文件
    ↑
镜像层2: RUN安装软件
    ↑
镜像层1: FROM基础镜像

3. 镜像的特点

只读性

  • 镜像是只读的:一旦创建就不能修改
  • 容器基于镜像创建:在镜像之上添加可写层

分层共享

# 多个容器共享同一基础镜像,节省磁盘空间
容器A [ubuntu + nginx] ──┐
                         ├── ubuntu基础镜像 (共享)
容器B [ubuntu + mysql] ──┘

4. Dockerfile与镜像构建

构建过程示例

# Dockerfile - Python应用示例

# Layer1: ubuntu基础环境 (~70MB)
FROM ubuntu:20.04

# Layer2: apt软件包 (~300MB)  
RUN apt update && apt install -y python3 python3-pip

# Layer3: pip依赖 (~50MB)
RUN pip3 install flask redis

# Layer4: 应用代码 (~5MB)
COPY app.py /app/app.py

# Layer5:启动命令(元数据,几乎不占空间)
CMD ["python3", "/app/app.py"]
#构建命令  
docker build -t my-python-app:v1 .

5. C++项目Dockerfile示例

FROM ubuntu:20.04 AS builder

#编译环境层  
RUN apt update && apt install -y g++ cmake make git

WORKDIR /src  
COPY . .

#编译结果层 
RUN mkdir build && cd build && \
    cmake .. && make -j4

#运行时镜像(更小)    
FROM ubuntu:20.04  

RUN apt update && apt install -y libstdc++6

COPY --from=builder /src/build/myapp /usr/local/bin/

CMD ["myapp"]

6. Docker Hub和Registry

公共仓库

docker pull ubuntu:20.04        #从Docker Hub拉取官方镜像 
docker push mycompany/myapp:v1   #推送自定义镜像到仓库   

私有仓库

#自建私有Registry  
docker run -d -p5000:5000 --name registry registry:2  

#标记并推送到私有仓库   
docker tag myapp:v1 localhost:5000/myapp:v1  
docker push localhost:5000/myapp:v1   

7. C++后端常用基础镜像

场景 推荐基础镜像 特点
开发调试 ubuntu:20.04 完整工具链
生产部署 debian:slim 体积小,安全
最小化部署 alpine <10MB,musl libc
特定版本需求 gcc:9.4 指定编译器版本

8. C++项目多阶段构建优势

FROM gcc:9.4 AS build-stage      #编译阶段(包含完整工具链)

WORKDIR /build  
COPY . .  
RUN make  

FROM debian:slim AS runtime-stage #运行阶段(仅包含运行时)  

COPY --from=build-stage /build/myapp /usr/local/bin/  
CMD ["myapp"]                    #最终镜像很小!

优势:

  • ✅最终生产环境体积减小80%+
  • ✅安全性更高(无编译工具)
  • ✅层次清晰,易于维护

9.Docker常用操作命令汇总

docker images                    #查看本地所有可用映像列表     
docker rmi <image_id>            #删除指定的一个或多个映像文件      
docker pull <image_name>         #从registry下载新的映像到本地主机上        
docker push <image_name>         #将本地的映像上传到registry中供他人使用       
docker save > myimage.tar.gz     #导出整个映象为tar归档格式         
docker load < myimage.tar.gz     #从tar归档文件中加载映象          

对于C++后端开发者来说,理解镜像是掌握Docker技术栈的基础!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=24399

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?