Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用apt get build deps最小化Docker映像_Build_Docker_Apt Get - Fatal编程技术网

使用apt get build deps最小化Docker映像

使用apt get build deps最小化Docker映像,build,docker,apt-get,Build,Docker,Apt Get,有时在构建Docker映像时,需要使用apt-get。例如,用于运行Magento的映像可能会启动如下内容 FROM php:5.4-apache RUN apt-get -qqy update \ && apt-get -qqy install git \ libmcrypt-dev \ libpng12-dev \ libxm

有时在构建Docker映像时,需要使用
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库可能是动态链接的

我的思路是这样的

  • 有没有一种方法可以静态链接php库,这样我就可以取消所有的
    apt-get
    功能
  • 如何删除apt get update留下的数据
  • 但这些都是真的。我真正的问题是


    我如何构建更小的Docker映像,而不完全牺牲在Dockerfile中使用
    apt get
    的易用性和可维护性?

    您可以通过运行
    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相同的行中运行此命令,才能使其生效。

    您在哪里寻找此方法

    具体来说,您可以卸载同一层中不需要的包

    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