Слои изображения вашего докера располагаются поверх compose слоев изображения докера, которые в сумме составляют 157MB
. Ваше изображение 193MB
, единственное, что вы можете уменьшить, это 36MB
(193 - 157
), который вы добавляете поверх compose изображения. Давай посмотрим, что можно выжать.
COPY . /src
COPY . /src
поместит все содержимое вашего рабочего каталога в каталог контейнера /src
. Который может быть больше, чем вы хотите. Одним из способов ограничить то, что будет скопировано в контейнер, является использование файла .dockerignore ( здесь - отличная статья на эту тему).
Такой файл обычно имеет содержимое, подобное:
.dockerignore
.git
.gitignore
README.md
Changelog.md
Dockerfile
docker-compose.yml
docs
Каталог .git
может быть довольно большим в некоторых проектах. Если у вас также есть каталог, содержащий дампы базы данных или другие огромные файлы, которые не нужны в образе докера, обязательно добавьте их в файл .dockerignore
.
RUN composer install
RUN composer install
также установит зависимости dev, которые не нужны в вашем образе. Измените его на
RUN composer install --no-dev
Идя далее по этому пути этот ТАК ответ предлагает использовать
RUN composer install --no-ansi --no-dev --no-interaction --no-progress --no-scripts --optimize-autoloader
.
Окунись в свое изображение
Используйте погружение , чтобы изучить каждый слой изображения и выяснить, не добавлены ли ненужные файлы в некоторый момент.
Многоэтапная сборка Docker
Если composer полезен только для загрузки и установки ваших библиотек PHP, то после загрузки и установки этих библиотек вы можете избавиться от composer. Это невозможно сделать из классического Dockerfile, потому что каждая директива RUN
/ COPY
или ADD
создаст новый слой поверх предыдущего.
Допустим, у вас есть один слой с файлом размером 100 МБ. Если вы позже удалите этот файл в том же Dockerfile, удаление произойдет на новом слое. Предыдущий слой с этими 100 МБ все еще находится в вашем сэндвиче.
Один из способов, которым Docker привел нас к борьбе, - это многоступенчатая сборка Dockerfile.
Ваш Dockerfile может быть структурирован следующим образом (не проверено):
FROM composer:latest as build_stage
COPY . /src
ADD .env.example /src/.env
WORKDIR /src
RUN composer install
RUN php artisan key:generate
FROM php:7-fpm-alpine
COPY --from=build_stage /src /var/www/html
RUN mkdir /var/www/html/storage/ \
&& chmod -R 777 /var/www/html/storage/
предупреждение: это только основная структура Dockerfile, вам может понадобиться настроить его, чтобы добавить недостающие расширения php. Обратитесь к официальному руководству по созданию образов php docker .