docker - 安装 apt 依赖项后如何创建尽可能最小的 Docker 镜像

标签 docker debian

我使用 debian 创建了一个 Docker 镜像作为父图像。在我的 Dockerfile 中,我使用 apt 和 pip 安装了一些依赖项。

现在,我想摆脱运行我的应用程序并非完全必需的所有内容,当然,这需要安装依赖项。

目前,在安装依赖项后,我的 Dockerfile 中有以下几行。

RUN rm -rf /var/lib/apt/lists/* \
    && rm -Rf /usr/share/doc && rm -Rf /usr/share/man \
    && apt-get clean

我还使用 --no-install-recommends 选项安装了依赖项。

我还可以做些什么来减少 Docker 镜像的占用空间?

PS:以防万一,这就是我安装依赖项的方式:

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
       sudo systemd \
       build-essential libffi-dev libssl-dev \
       python-pip python-dev python-setuptools python-wheel

最佳答案

要减小图像的大小,您需要将 RUN 命令合并为一个。当您在一层中创建文件并在另一层中删除它们时,文件仍然存在于驱动器上并通过网络传送。当为容器组装文件系统的各层时,它们的存在就被隐藏了。

Dockerfile 最佳实践对此进行了更详细的解释:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run

我还建议使用docker build --rm=false --no-cache 进行构建。(暂时),然后检查每个docker diff的输出创建的图像的 View 以查看每层中创建了哪些文件。

关于docker - 安装 apt 依赖项后如何创建尽可能最小的 Docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48611838/

相关文章:

linux - debian init.d 脚本在重启后不运行

php - 使用 PHP (Linux) 连接到 MSSQL

mysql - 尝试设置 MySQL root 密码导致错误

docker - 保存 docker 容器设置,例如端口映射和卷

docker - 如何在同一台服务器上托管两个暴露端口 80 的 Docker 容器

docker - 在 docker-compose 中公开端口或配置第二个 letsencrypt 证书

c - MOTIF 编译错误/X11/intrinsic.h 丢失

python - 使用 Python Docker API 从 tar 创建 docker

docker - 运行任务之前大厅等待很长时间

debian - W : Failed to fetch http://httpredir. debian.org/debian/dists/jessie-updates/main/binary-amd64/Packages 404 未找到