2017-11-24 6 views
0

내 Dockerfile 사실도커 레이어를 분할하는 방법은 무엇입니까?

RUN echo "Downloading huge file" && \ 
    wget http://server/huge.tar.gz && \ 
    echo "Extracting huge file" && \ 
    tar xzf huge.tar.gz && \ 
    huge/install /opt/myinstall && \ 
    rm -rf huge* 

처럼, 내가 설치

  • 제거 설치 파일
    1. 입니다 실행
    2. 을 풀기 일부 타사 설치 패키지
    3. 다운로드 보인다

      Docker 빌드가 성공하고 새 컨테이너를 사용할 수 있습니다.

      Amazon Container 레지스트리로 푸시 할 때 문제가 발생합니다.

      마지막 레이어가 거대하기 때문에 푸시가 거부됩니다 (약 20G).

      20G는 실제 설치 크기이므로 조금 줄이면됩니다.

      제 질문은 어떻게 아마존 레이어 크기 제한을 수용하기 위해 좀 더 작은 레이어로 레이어를 나눌 수 있습니까?

    답변

    1

    각 dockerfile 명령에 새 레이어가 만들어집니다. 따라서 해결 방법은 RUN 명령을 복수 RUN 명령으로 분할하는 것입니다. 그러나,이 솔루션은 귀하의 경우에는 타르가 매우 큰 경우 레이어 중 하나가 타르를 포함하므로 작동하지 않을지 잘 모르겠습니다. 그럼에도 불구하고 이러한 접근 방식을 시도해야합니다.

    RUN wget http://server/huge.tar.gz 
    RUN tar xzf huge.tar.gz 
    RUN huge/install /opt/myinstall && \ 
    RUN rm -rf huge* 
    

    또 다른 대안은 docker multistage build을 사용하는 것입니다. 아이디어는 별도의 용기에 타르를 설치하는 것입니다 그리고 당신 컨테이너에 설치 디렉토리를 복사

    FROM ... as installer 
    RUN echo "Downloading huge file" && \ 
        wget http://server/huge.tar.gz && \ 
        echo "Extracting huge file" && \ 
        tar xzf huge.tar.gz && \ 
        huge/install /opt/myinstall && \ 
        rm -rf huge* 
    
    FROM ... 
    COPY --from=installer /opt/myinstall /opt/myinstall 
    ... 
    

    그런 식으로 당신은 단지 이미지 만 복사 설치 한 계층이있을 것이다.

    +1

    다단계 빌드로 훌륭한 아이디어! 불행히도, 설치 디렉토리가 10G 이상이므로,/opt/myinstall을 분할해야 할 필요가 있습니다 ... – ilia