Dockerfile 자세히 알아보기

이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20

ADD

ADD는 파일을 이미지에 추가합니다.

Dockerfile

ADD hello-entrypoint.sh /entrypoint.sh
ADD hello-dir /hello-dir
ADD zlib-1.2.8.tar.gz /
ADD hello.zip /
ADD http://example.com/hello.txt /hello.txt
ADD *.txt /root/

ADD <복사할 파일 경로> <이미지에서 파일이 위치할 경로> 형식입니다.

  • <복사할 파일 경로>는 컨텍스트 아래를 기준으로 하며 컨텍스트 바깥의 파일, 디렉터리나 절대 경로는 사용할 수 없습니다.
    • 예) ADD ../hello.txt /home/hello (X)
    • 예) ADD /home/hello/hello.txt /home/hello (X)
  • <복사할 파일 경로>는 파일뿐만 아니라 디렉터리도 설정할 수 있으며, 디렉터리를 지정하면 디렉터리의 모든 파일을 복사합니다. 또한, 와일드카드를 사용하여 특정 파일만 복사할 수 있습니다.
    • 예) ADD *.txt /root/
  • <복사할 파일 경로>에 인터넷에 있는 파일의 URL을 설정할 수 있습니다.
    • <이미지에서 파일이 위치할 경로>의 마지막에 /가 있으면 디렉터리가 생성되고 파일은 그 아래에 복사됩니다. ADD http://example.com/hello.txt /home/hello/ 와 같이 설정하면 /home/hello/hello.txt에 파일이 복사됩니다.
  • 로컬에 있는 압축 파일(tar.gz, tar.bz2, tar.xz)은 압축을 해제하고 tar를 풀어서 추가됩니다. 단, 인터넷에 있는 파일 URL은 압축만 해제한 뒤 tar 파일이 그대로 추가됩니다.
    • 예) ADD hello.tar.gz / (압축을 해제하고 tar를 풀어서 추가합니다.)
    • 예) ADD http://zlib.net/zlib-1.2.8.tar.gz / (gzip 압축만 해제한 뒤 tar 파일을 추가합니다. 단 파일 내용은 tar이지만 파일 이름은 zlib-1.2.8.tar.gz처럼 .gz가 붙어있습니다.)
  • <이미지에서 파일이 위치할 경로>는 항상 절대 경로로 설정해야 합니다. 그리고 마지막이 /로 끝나면 디렉터리가 생성되고 파일은 그 아래에 복사됩니다.
  • ADD ./ /hello와 같이 현재 디렉터리를 추가할 때 .dockerignore 파일에 설정한 파일과 디렉터리는 제외됩니다.

인터넷의 파일 URL을 압축 해제하여 추가하기
앞에서 설명한 것처럼 ADD는 파일 URL을 압축만 해제하고 tar는 해제하지 않습니다. 이때는 RUN으로 curl이나 wget으로 파일을 받은 뒤 압축을 해제하면 됩니다.

우분투, curl

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y curl
RUN curl http://zlib.net/zlib-1.2.8.tar.gz | tar -xz

우분투, wget

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y wget
RUN wget http://zlib.net/zlib-1.2.8.tar.gz -O - | tar -xz

CentOS, curl

FROM centos:latest
RUN yum install -y curl tar
RUN curl http://zlib.net/zlib-1.2.8.tar.gz | tar -xz

CentOS, wget

FROM centos:latest
RUN yum install -y wget tar
RUN wget http://zlib.net/zlib-1.2.8.tar.gz -O - | tar -xz

다음은 tar, tar.gz, tar.bz2, tar.xz 파일의 압축을 해제하는 방법입니다.

  • ubuntu:latest는 bzip2가 설치되어 있고, xz는 설치되어 있지 않습니다. xz는 apt-get으로 xz-utils 패키지를 설치합니다.
  • centos:latest는 xz가 설치되어 있고, bz2는 설치되어 있지 않습니다. bz2는 yum으로 bzip2 패키지를 설치합니다.
RUN curl http://example.com/hello.tar | tar -x
RUN curl http://example.com/hello.tar.gz | tar -xz
RUN curl http://example.com/hello.tar.bz2 | tar -xj
RUN curl http://example.com/hello.tar.xz | tar -xJ

ADD로 추가되는 파일은 소유자(UID) 0, 그룹(GID) 0으로 설정되고 권한은 기존 파일의 권한을 따릅니다. URL로 추가하면 권한은 600으로 설정됩니다.

참고
UID 0, GID 0은 root 계정입니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

30 November 2014