2014-08-30 8 views
6

나는 도커 이미지에 추가하는 ~ 300MB의 압축 파일을 가지고 있습니다. 다음 상태는 이미지를 추출합니다.Docker 이미지를 커밋하지 않고 파일을 추가하는 방법은 무엇입니까?

문제는 ADD 문이 새로운 파일 시스템 계층에서 이미지를 ~ 300MB 크기로 만드는 커밋을 초래한다는 것입니다.

ADD /files/apache-stratos.zip /opt/apache-stratos.zip 
RUN unzip -q apache-stratos.zip && \ 
    rm apache-stratos.zip && \ 
    mv apache-stratos-* apache-stratos 

질문 : 커밋없이 로컬 파일을 추가하려면 주위에 일이 있습니까?

하나의 옵션은 간단한 웹 서버를 실행하는 것입니다 (예를 들어 python -m SimpleHTTPServer)에 고정 표시기 빌드를 시작하고 파일을 검색 할 수 wget를 사용하지만 성가신 조금 보인다 전에 :

RUN wget http://localhost:8000/apache-stratos.zip && \ 
    unzip -q apache-stratos.zip && \ 
    rm apache-stratos.zip && \ 
    mv apache-stratos-* apache-stratos 

또 다른 옵션이하는 것입니다 빌드 시간 대신 컨테이너 시작시 zip 파일을 추출하십시오. 그러나 가능한 빨리 시작을 유지하는 것이 좋습니다.

답변

13

the documentation에 따르면 로컬 파일 시스템 (URL이 아님)에서 보관 파일을 Dockerfile의 ADD (경로 + 파일명이 아닌 대상 경로 포함)로 전달하면 지정된 디렉토리에 파일의 압축이 해제됩니다 .

< SRC>는 인식 압축 포맷 의 지역 tar 아카이브입니다 (정체성, GZIP,의 bzip2가 또는 XZ) 다음은 디렉토리로 압축 해제됩니다. 원격 URL의 리소스가 압축 해제되지 않습니다. 디렉토리가 복사하거나 압축 해제 될 때, 타르 -x와 동일한 기능을 가지고 : 결과가 이다의 결합 : 대상 경로에 존재하고 무엇이든

1) 2) 소스 트리의 내용, 갈등은 "2. 파일별로.

시도 :

ADD /files/apache-stratos.zip /opt/ 

와 파일이 있는지, 더 압축 해제없이.

+8

Docker 1.2.0에서'.zip' 파일의 압축을 해제하지 않은 것으로 보입니다. –

+0

"[src]가 인식 된 압축 형식 (identity, gzip, bzip2 또는 xz)의 로컬 tar 아카이브 인 경우 디렉토리로 압축 해제됩니다." –

+0

'.zip' 파일에 대한 지원이 부족한 사실은 의도 된 결정 인 것 같습니다 : https://github.com/docker/docker/issues/15036 – jap1968

2

새로 만든 레이어를 스쿼시하려면 docker-squash을 사용할 수 있습니다. 이미지 크기가 크게 줄어 듭니다.

불행히도 언급 된 해결 방법 (RUN curl ... && unzip ... & rm ..., 컨테이너 시작시 포장 풀기)은 현재 유일한 옵션입니다 (도커 1.11).