卡飞资源网

专业编程技术资源共享平台

深入理解容器运行背后的“魔法秘籍”

写在前面

你是否有以下疑问:

  • 容器怎么来的?背后“运行环境”藏在哪里?
  • docker pull 的镜像到底包含了什么?
  • 自己能不能动手做一个镜像?怎么优化?

如果你想真正理解 Docker 的核心工作机制,本文不可错过。我们将从概念、结构、构建、优化四个方面,深入剖析 Docker 镜像的本质,彻底搞懂这一容器世界的基石。


一、Docker 镜像是什么?

官方定义

Docker 镜像是一个轻量、可执行的独立软件包,包含运行某个软件所需的全部内容:代码、运行时、库、环境变量和配置文件。

类比理解

  • 它像是容器的“模具”或“快照”,通过它才能快速生成一模一样的“容器实例”。
  • 类似于虚拟机的 ISO 镜像,但更轻量、启动更快。

二、镜像的分层结构(Layer)

Docker 镜像由一层层构建而成,基于 UnionFS(联合文件系统)

分层示意图:

容器实例
│
└─ 只读镜像层
   ├─ 应用层(如 nginx)
   ├─ 依赖层(如 openssl、libc)
   └─ 基础层(如 ubuntu)

优点:

  • 缓存机制:修改一层不影响其他层,加速构建;
  • 共享性:多个镜像可共用基础层,节省空间;
  • 只读安全:容器运行在最上层读写层,镜像层保持不变。

三、如何查看镜像的结构?

示例:查看 nginx 镜像分层

docker pull nginx
docker history nginx

输出结果大致如下:

IMAGE          CREATED       CREATED BY                                      SIZE
xxxxx          2 days ago    /bin/sh -c #(nop)  CMD ["nginx" "-g" ...       0B
xxxxx          2 days ago    /bin/sh -c #(nop)  EXPOSE 80                   0B
xxxxx          2 days ago    /bin/sh -c #(nop) COPY file:...                21MB
xxxxx          2 days ago    /bin/sh -c set -x && apt-get update ...        50MB
...

每一层都代表 Dockerfile 中的一条指令!


四、如何构建自己的镜像?

构建镜像的核心工具:Dockerfile

示例:构建一个简单的 Nginx 镜像

# 使用官方基础镜像
FROM nginx:latest

# 拷贝自定义首页
COPY ./index.html /usr/share/nginx/html/index.html

# 暴露端口
EXPOSE 80

构建命令:

docker build -t my-nginx:v1 .

运行命令:

docker run -d -p 8080:80 my-nginx:v1

访问 http://localhost:8080 即可看到自定义页面。


五、如何优化镜像大小?

过大的镜像会导致:

  • 构建慢
  • 传输耗时
  • 占用磁盘空间

实用优化技巧:

技巧

示例

使用轻量镜像

FROM alpine 替代 FROM ubuntu

合并 RUN 指令

RUN apt update && apt install -y curl

删除缓存文件

RUN apt clean && rm -rf /var/lib/apt/lists/*

使用多阶段构建

分阶段编译+最终产出打包

多阶段构建示例(如构建 Go 应用):

# 编译阶段
FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go build -o main .

# 运行阶段
FROM alpine:latest
COPY --from=builder /app/main /main
ENTRYPOINT ["/main"]

结果:镜像体积从 800MB 减少到 <20MB。


六、Docker Hub 与私有镜像仓库

Docker Hub

  • 默认使用的镜像仓库
  • 官方维护大量 verified 镜像(如 nginx, mysql, redis)

私有仓库方案

方案

特点

Harbor

企业级,权限控制强

自建 registry

轻量级,快速部署

GitHub Packages

配合 CI/CD 上传


总结

  • Docker 镜像是构建容器的核心,它是层叠结构的只读快照。
  • 你可以通过 Dockerfile 自定义镜像,灵活部署服务。
  • 优化镜像结构有助于构建更轻便、更安全的容器。
  • 掌握构建和管理镜像,才能更好掌握和运用 Kubernetes !
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言