이 Dockerfile을 사용하여 PHP 애플리케이션 종속성이있는 이미지를 생성하고 있습니다.
FROM composer:latest AS composer
COPY ./ ./
VOLUME composer-cache:/tmp/
RUN composer install
FROM php:7.1-fpm
WORKDIR /app
RUN apt-get update && \
apt-get install -y libpq5 libpq-dev libmemcached11 libmemcached-dev libmagickwand-6.q16-6 libmagickwand-dev unzip --no-install-recommends && \
docker-php-ext-install pdo pdo_pgsql && \
pecl install imagick && \
echo extension=imagick.so >> /usr/local/etc/php/conf.d/imagick.ini && \
apt-get remove -y libpq-dev libmemcached-dev libmagickwand-dev && \
apt-get autoremove -y && \
apt-get autoclean -y
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
COPY ./ ./
COPY --from=composer /app/vendor ./vendor
빌드 속도를 높이고 네트워크 활동을 줄이기 위해라는 볼륨에 작곡가의 캐시를 저장하고 싶습니다 composer-cache
. 그러나 composer는 해당 볼륨에 데이터를 저장하지 않습니다.
공식 작곡가 Dockerfile을 확인한 결과 COMPOSER_HOME
환경 변수가 /tmp
디렉토리를 가리키는 것으로 나타났습니다 . 컨테이너 외부에 캐시를 저장하기에 충분하다고 생각하지만 그렇지 않습니다.
모든 빌드에서 composer는 모든 종속성을 다시 다운로드하고 볼륨은 비어 있습니다.
문제는 지시문 VOLUME
이 런타임에 사용할 볼륨 마운트 지점 을 생성 한다는 것 입니다.
이 볼륨은 실제로 실행할 때 생성됩니다 docker run
. 빌드 시간 ( docker build
) 동안에는 해당 명령 이 적용되지 않습니다 .
그러나 이러한 종류의 작업에 추가 된 새로운 빌드 시간 향상을 사용할 수 있습니다.
Dockerfile에 다음을 추가해야합니다.
# syntax=docker/dockerfile:experimental
FROM composer:latest AS composer
COPY composer.json composer.lock ./
RUN --mount=type=cache,target=/tmp/cache composer install --prefer-dist --no-suggest
### your next build stage...
이렇게하면 install
처음 이후에 실행 속도가 빨라 집니다.
다운로드 속도 를 얻으려면 (위의 내용이 상대적으로 문제가 될 수 있음) Prestssimo 를 사용할 수 있습니다 . 이것은 작곡가 다운로드가 순차적이 아닌 병렬 로 수행되도록하는 작곡가 플러그인입니다 .
당신은 끝날 것입니다
# syntax=docker/dockerfile:experimental
FROM composer:latest AS composer
RUN composer global require hirak/prestissimo
COPY composer.json composer.lock ./
RUN --mount=type=cache,target=/tmp/cache composer install --prefer-dist --no-suggest
### your next build stage...
그런 다음 다음과 같이 빌드 프로세스를 호출합니다.
DOCKER_BUILDKIT=1 docker build .
현재 docker-compose를 사용하여 빌드 킷을 활성화 할 수 없습니다. 그러나 약간의 사전 계획을 통해 먼저 이미지를 빌드하고 오케스트레이션을 위해 docker-compose 파일에서 해당 이미지를 선언 할 수 있습니다.
Prestissimo를 사용하는 것만으로도 추가 캐시 레이어가 필요하지 않은 것으로 충분하지만 시나리오에 가장 적합한 것이 무엇인지 확인해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다