Laravel Dockerfile> 1 ГБ - PullRequest
       82

Laravel Dockerfile> 1 ГБ

0 голосов
/ 12 апреля 2020

Я создаю 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 МБ но это смешно.

Что я могу сделать, чтобы уменьшить размер изображения?

Заранее спасибо.

1 Ответ

0 голосов
/ 13 апреля 2020

Поскольку файловая система 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 размер изображения. image

Как вы можете видеть на скриншоте - Layers таблица имеет столбец Size.

Итак, вы можете найти - какой слой вашего docker изображения имеет наибольший вклад в объем конечного изображения.

...