저작권 안내
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
Dockerfile 자세히 알아보기
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 update
RUN apt install -y curl
RUN curl http://zlib.net/zlib-1.2.8.tar.gz | tar -xz
우분투, wget
FROM ubuntu:latest
RUN apt update
RUN apt 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 공유는 허용합니다.