1

我正在Docker为我的应用程序构建一个图像,Laravel但它变得比1GB. 这是Dockerfile

#
# PHP Dependencies
#
FROM composer as vendor

COPY database/ database/
COPY composer.json composer.json
COPY composer.lock composer.lock

RUN composer install \
    --ignore-platform-reqs \
    --no-interaction \
    --no-plugins \
    --no-scripts \
    --prefer-dist

#
# Application
#
FROM php:fpm-alpine
RUN apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        curl \
        libtool \
        libxml2-dev \
    && apk add --no-cache \
        curl \
        git \
        mysql-client \
    && pecl install redis \
    && docker-php-ext-install \
        pdo \
        pdo_mysql \
        tokenizer \
        bcmath \
        opcache \
        xml \
    && apk del -f .build-deps \
    && docker-php-ext-enable \
       pdo_mysql \
       redis

WORKDIR /var/www/html

COPY . /var/www/html
COPY --from=vendor /app/vendor/ /var/www/html/vendor/
COPY .env.staging /var/www/html/.env

RUN chown -R root:www-data . 

EXPOSE 9000

CMD ["php-fpm"]

Vue用作前端和Redis缓存提供程序。

我习惯于 200-300 MB 左右的图像,但这太荒谬了。

我可以做些什么来减小图像大小?

提前致谢。

4

1 回答 1

1

由于docker文件系统是OverlayFS,因此您需要一个特殊的工具来深入研究 FS 层。

许多工具可以探索图像。对于您的情况,我建议wagoodman/dive:一种用于探索 docker 图像中每一层的工具

docker run --rm -it \ 
  -v /var/run/docker.sock:/var/run/docker.sock \
  wagoodman/dive:latest \
  <image_name|image_id>

用于探索 Docker 映像、图层内容和发现缩小 Docker 映像大小的方法的工具。图片

正如您在屏幕截图中看到的 -Layers表格有Size列。

所以,你可以找到——你的图像的哪一层对docker最终图像的体积贡献最大。

于 2020-04-13T00:54:17.463 回答