У меня есть следующий dockerfile:
FROM php:7.2-apache
LABEL name "medico-app"
COPY composer.json composer.lock ./
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN apt-get update && apt-get install -y --no-install-recommends git zip && composer install
COPY . /var/www/html
EXPOSE 80
Когда это изображение построено, оно имеет размер ~ 500 Мбит / с. Я пытаюсь сжать это изображение до <100 Мб, чтобы я мог использовать его на Zeit <a href="https://zeit.co/now" rel="nofollow noreferrer"> Now . Согласно тому, что я читаю в документации докера, многоэтапные сборки иногда помогают уменьшить размер изображения. Моя текущая идея состоит в том, чтобы разбить dockerfile на два этапа: один, на котором я установил бы зависимости с помощью compose
, а другой, где у меня были бы php
и apache
. Хотя я не могу понять это правильно. Есть предложения?
Это то, что я имею до сих пор:
# first stage
FROM composer:latest
COPY composer.json composer.lock ./
RUN composer install
Для второго этапа я попробовал это
FROM httpd:2.4-alpine
LABEL name "medico-app"
COPY --from=0 /app/vendor ./vendor
COPY . /usr/local/apache2/htdocs/
EXPOSE 80
Однако, когда я сейчас запускаю контейнер, файлы php не обслуживаются, я просто вижу их как текст. Я, вероятно, что-то здесь упускаю с PHP / Apache.
EDIT:
Я также попробовал это для второго этапа, но не могу заставить его работать:
FROM php:7.2-alpine
LABEL name "medico-app"
RUN apk --no-cache update && apk --no-cache add apache2 openrc
COPY --from=0 /app/vendor ./vendor
COPY . /var/www/
EXPOSE 80
Теперь, когда я открываю свой локальный хост, я не вижу файлы PHP, которые я должен видеть. Я просто вижу страницу по умолчанию it works
.