Docker를 빌드 할 때 볼륨에 작성기 캐시를 어떻게 저장할 수 있습니까?

사수 0106

이 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

볼륨 단축키 : 데비안에서 볼륨 단계 수를 어떻게 구성 할 수 있습니까?

분류에서Dev

코드를 실행할 때 Netbeans에서 작성중인 내용을 어떻게 볼 수 있습니까?

분류에서Dev

스크립트에 저장할 수있는 자바 스크립트 코드를 작성할 수있는 입력을 어떻게 할 수 있습니까?

분류에서Dev

gulp-cache : LESS 빌드에 파일 캐시를 어떻게 사용할 수 있습니까?

분류에서Dev

시작할 때 xterm에서 byobu를 어떻게 실행할 수 있습니까?

분류에서Dev

시작할 때 xterm에서 byobu를 어떻게 실행할 수 있습니까?

분류에서Dev

백개 먼 보드를 MongoDB에 어떻게 저장할 수 있습니까?

분류에서Dev

시작할 때 셔터를 어떻게 열 수 있습니까?

분류에서Dev

github 작업에서 pip 캐시를 어떻게 사용할 수 있습니까?

분류에서Dev

배열에 ref를 어떻게 저장할 수 있습니까?

분류에서Dev

JAXB에 객체를 어떻게 저장할 수 있습니까?

분류에서Dev

Codename One에서 양식 구성 요소를 어떻게 다시 빌드 할 수 있습니까?

분류에서Dev

비전 역 로케일에서 작동하는 '순간'함수를 어떻게 빌드 할 수 있습니까?

분류에서Dev

실론에서 코드 생성기를 어떻게 작성할 수 있습니까?

분류에서Dev

빌드 오류를 어떻게 해결할 수 있습니까?

분류에서Dev

Dockerfile로 어떻게 도커 빌드를 할 수 있습니까?

분류에서Dev

javahg를 어떻게 빌드 할 수 있습니까?

분류에서Dev

빌드에서 futureprovider (riverpod)를 어떻게 리콜 할 수 있습니까?

분류에서Dev

OpenWRT BuildRoot에서 패키지를 어떻게 빌드 할 수 있습니까?

분류에서Dev

JavaScript / Ajax에 PHP 코드를 어떻게 작성할 수 있습니까?

분류에서Dev

docker-compose 구성이 기존 데이터를 유지하면서 익명 볼륨 사용에서 명명 된 볼륨으로 어떻게 전환 할 수 있습니까?

분류에서Dev

elisp에서 모드가 비활성화되었을 때 어떻게 함수를 호출 할 수 있습니까?

분류에서Dev

AnimatedList를 빌드 할 때 "insertItem"은 어떻게 작동합니까?

분류에서Dev

Keras 레이어를 어떻게 조작 할 수 있습니까? : 스테레오 비전 비용 볼륨

분류에서Dev

Ubuntu 18.04에 Clang 정적 분석기 (스캔-빌드)를 어떻게 설치할 수 있습니까?

분류에서Dev

메서드 내에서 ViewController를 어떻게 시작할 수 있습니까?

분류에서Dev

메서드 내에서 ViewController를 어떻게 시작할 수 있습니까?

분류에서Dev

업로드 할 때 codeigniter에서 내 이미지의 작업 경로를 어떻게 얻을 수 있습니까?

분류에서Dev

내 코드의 DataTable에서 DataRow를 foreach 할 때 어떻게 고성능을 얻을 수 있습니까?

Related 관련 기사

  1. 1

    볼륨 단축키 : 데비안에서 볼륨 단계 수를 어떻게 구성 할 수 있습니까?

  2. 2

    코드를 실행할 때 Netbeans에서 작성중인 내용을 어떻게 볼 수 있습니까?

  3. 3

    스크립트에 저장할 수있는 자바 스크립트 코드를 작성할 수있는 입력을 어떻게 할 수 있습니까?

  4. 4

    gulp-cache : LESS 빌드에 파일 캐시를 어떻게 사용할 수 있습니까?

  5. 5

    시작할 때 xterm에서 byobu를 어떻게 실행할 수 있습니까?

  6. 6

    시작할 때 xterm에서 byobu를 어떻게 실행할 수 있습니까?

  7. 7

    백개 먼 보드를 MongoDB에 어떻게 저장할 수 있습니까?

  8. 8

    시작할 때 셔터를 어떻게 열 수 있습니까?

  9. 9

    github 작업에서 pip 캐시를 어떻게 사용할 수 있습니까?

  10. 10

    배열에 ref를 어떻게 저장할 수 있습니까?

  11. 11

    JAXB에 객체를 어떻게 저장할 수 있습니까?

  12. 12

    Codename One에서 양식 구성 요소를 어떻게 다시 빌드 할 수 있습니까?

  13. 13

    비전 역 로케일에서 작동하는 '순간'함수를 어떻게 빌드 할 수 있습니까?

  14. 14

    실론에서 코드 생성기를 어떻게 작성할 수 있습니까?

  15. 15

    빌드 오류를 어떻게 해결할 수 있습니까?

  16. 16

    Dockerfile로 어떻게 도커 빌드를 할 수 있습니까?

  17. 17

    javahg를 어떻게 빌드 할 수 있습니까?

  18. 18

    빌드에서 futureprovider (riverpod)를 어떻게 리콜 할 수 있습니까?

  19. 19

    OpenWRT BuildRoot에서 패키지를 어떻게 빌드 할 수 있습니까?

  20. 20

    JavaScript / Ajax에 PHP 코드를 어떻게 작성할 수 있습니까?

  21. 21

    docker-compose 구성이 기존 데이터를 유지하면서 익명 볼륨 사용에서 명명 된 볼륨으로 어떻게 전환 할 수 있습니까?

  22. 22

    elisp에서 모드가 비활성화되었을 때 어떻게 함수를 호출 할 수 있습니까?

  23. 23

    AnimatedList를 빌드 할 때 "insertItem"은 어떻게 작동합니까?

  24. 24

    Keras 레이어를 어떻게 조작 할 수 있습니까? : 스테레오 비전 비용 볼륨

  25. 25

    Ubuntu 18.04에 Clang 정적 분석기 (스캔-빌드)를 어떻게 설치할 수 있습니까?

  26. 26

    메서드 내에서 ViewController를 어떻게 시작할 수 있습니까?

  27. 27

    메서드 내에서 ViewController를 어떻게 시작할 수 있습니까?

  28. 28

    업로드 할 때 codeigniter에서 내 이미지의 작업 경로를 어떻게 얻을 수 있습니까?

  29. 29

    내 코드의 DataTable에서 DataRow를 foreach 할 때 어떻게 고성능을 얻을 수 있습니까?

뜨겁다태그

보관