尽量减少多克尔图片与apt-get的建设DEPS(Minimizing Docker Images

2019-09-27 04:26发布

有时候,构建多克图像时,有必要使用apt-get 。 例如,对于运行Magento的图像可能会开始像这样

FROM php:5.4-apache
RUN apt-get -qqy update \
 && apt-get -qqy install git \
                         libmcrypt-dev \
                         libpng12-dev \
                         libxml2-dev \
                         libxslt-dev \
 && docker-php-ext-install bcmath \
                           gd \
                           mcrypt \
                           mysql \
                           soap \
                           xsl \
                           zip

但现在我有那些带来了所有的垃圾apt-get命令。 更糟的是,我甚至不知道我能买得起删除,因为那时的PHP库是动态链接的。

我沿线如思维

  1. 有没有一种方式,以静态链接库的PHP docker-php-ext-install ,所以我可以攻击所有的apt-get东西?
  2. 如何删除留下的数据apt-get update

但这些都是真的只是XY问题 。 我实际的问题就是

如何建立小泊坞图像,而不完全交易送走使用的可维护性的易于使用和apt-get的Dockerfile?

Answer 1:

您可以通过运行摆脱一些东西,一些东西rm -rf /var/lib/apt/lists/*

RUN apt-get update \
    && apt-get install -y MY_PACKAGE \
    && rm -rf /var/lib/apt/lists/*

请记住,你需要在同一行中运行这个apt-get update它是有效的。



Answer 2:

当你在寻找这种做法? https://www.ianlewis.org/en/creating-smaller-docker-images

ENV REDIS_VERSION 3.0.5
ENV REDIS_DOWNLOAD_URL http://download.redis.io/releases/redis-3.0.5.tar.gz
ENV REDIS_DOWNLOAD_SHA1 ad3ee178c42bfcfd310c72bbddffbbe35db9b4a6

# for redis-sentinel see: http://redis.io/topics/sentinel
RUN buildDeps='gcc libc6-dev make' \
    && set -x \
    && apt-get update && apt-get install -y $buildDeps --no-install-recommends \
    && rm -rf /var/lib/apt/lists/* \
    && mkdir -p /usr/src/redis \
    && curl -sSL "$REDIS_DOWNLOAD_URL" -o redis.tar.gz \
    && echo "$REDIS_DOWNLOAD_SHA1 *redis.tar.gz" | sha1sum -c - \
    && tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
    && rm redis.tar.gz \
    && make -C /usr/src/redis \
    && make -C /usr/src/redis install \
    && rm -r /usr/src/redis \
    && apt-get purge -y --auto-remove $buildDeps

具体卸载在同一层不必要的包



文章来源: Minimizing Docker Images with apt-get build deps