Docker镜像:从入门到精通,iOS 26 App 性能测试,新版系统下如何全面评估启动、渲染、资源、动画等指标。
·
Docker 镜像基础概念
Docker 镜像是轻量级、可执行的独立软件包,包含运行应用程序所需的一切:代码、运行时环境、库和配置。镜像采用分层存储结构,每一层代表镜像构建过程中的一次修改,这种设计提升了复用性和存储效率。
- 分层存储:镜像由多个只读层(Layer)叠加而成,修改时通过写时复制(Copy-on-Write)机制创建一个新层,而非直接修改原有层。
- UnionFS:底层使用联合文件系统(如AUFS、Overlay2)合并多层文件系统,呈现为单一视图。
镜像与容器的关系
镜像是静态的模板,容器是镜像的运行实例。启动容器时,Docker 会在镜像层之上添加一个可写层(容器层),所有运行时修改均保存在此层,不影响原始镜像。
镜像构建与管理
通过 Dockerfile 定义镜像构建步骤,每条指令生成一个层。常用指令包括:
FROM:指定基础镜像。RUN:执行命令并创建新层。COPY/ADD:将文件复制到镜像中。CMD/ENTRYPOINT:设置容器启动时的默认命令。
示例 Dockerfile:
FROM alpine:latest
RUN apk add --no-cache python3
COPY app.py /app/
CMD ["python3", "/app/app.py"]
构建命令:
docker build -t my-app:latest .
镜像仓库与分发
Docker 镜像可推送到公共或私有仓库(如 Docker Hub、Harbor)。常用操作:
- 登录仓库:
docker login - 推送镜像:
docker push my-repo/my-image:tag - 拉取镜像:
docker pull my-repo/my-image:tag
优化镜像体积
- 多阶段构建:在最终镜像中仅保留必要文件。
FROM golang:1.18 AS builder WORKDIR /app COPY . . RUN go build -o app . FROM alpine:latest COPY --from=builder /app/app /app CMD ["/app/app"] - 减少层数:合并多条
RUN命令,使用&&连接。 - 选择轻量基础镜像:如 Alpine Linux(约5MB)替代 Ubuntu。
镜像安全实践
- 扫描漏洞:使用
docker scan或工具(如 Clair、Trivy)检测镜像中的已知漏洞。 - 最小化权限:避免以
root用户运行容器,通过USER指令切换非特权用户。 - 签名验证:启用 Docker Content Trust(DCT)确保镜像来源可信。
常用命令速查
- 列出镜像:
docker images - 删除镜像:
docker rmi <image_id> - 查看镜像历史:
docker history <image_id> - 导出/导入镜像:
docker save -o my-image.tar my-image:tag docker load -i my-image.tar
高级特性
- 镜像标签与摘要:每个镜像有唯一摘要(SHA256),标签为可变的别名。
- 构建缓存:Docker 重用缓存层加速构建,可通过
--no-cache禁用。 - 构建参数(ARG):允许动态传递变量至
Dockerfile。
通过理解镜像的分层机制、优化策略及安全实践,可以高效构建可靠且轻量的容器化应用。
更多推荐
所有评论(0)