优化 Docker 镜像

Docker 进阶

Mike Metzger

Data Engineering Consultant

Docker 镜像说明

  • Docker 镜像是容器的基础
  • 包含容器实例初始可用的全部内容
Docker 进阶

Docker 镜像注意点

  • 容易想把所有可能需要的组件都放进镜像
  • 体积会变大、难以管理
  • 依赖复杂,安全与更新困难
  • 组合容器更难,且浪费空间/带宽
Docker 进阶

Docker 镜像建议

  • 将容器拆分到所需的最小粒度
  • 以后更易组合多个容器,而非构建单个大镜像
  • 类似于
    • 用可复用组件构建
    • 而非每次从头开始
  • 仅更新相关软件时,只影响使用该镜像的容器
  • 可按体积优化,便于使用与分发
Docker 进阶

Docker 镜像拆分示例

  • 设想一个数据工程项目使用以下软件:

    • PostgreSQL 数据库
    • Python ETL 软件
    • Web 服务器软件
  • 可用单一镜像,但每次 ETL 或 Web 配置更新都需重建镜像。

  • 若需再加一台 Web 服务器会怎样?
FROM ubuntu
RUN apt update
RUN apt install -y postgresql
RUN apt install -y nginx
RUN apt install -y python3.9
...
Docker 进阶

最小化容器示例

  • 使用 Docker 有更好的选择
  • 将各部分拆分为独立容器
    • PostgreSQL 数据库容器
    • Python ETL 组件
    • Web 服务器
  • 可为我们的用例构建优化配置,并按需增删组件
bash> docker run -d postgresql:latest

bash> docker run -d nginx:latest ...
Docker 进阶

确定镜像大小

  • 使用 docker images
  • 显示各镜像详情(含大小)
  • 更深入选项稍后介绍

bash> docker images

REPOSITORY      TAG              SIZE
postgres        latest           448MB
postgres        15               442MB
apache/airflow  2.7.1-python3.9  1.4GB
alpine          latest           7.73MB
Docker 进阶

Passons à la pratique !

Docker 进阶

Preparing Video For Download...