- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
Dockerfile 자세히 알아보기
ONBUILD
ONBUILD는 생성한 이미지를 기반으로 다른 이미지가 생성될 때 명령을 실행(trigger)합니다. 최초에 ONBUILD를 사용한 상태에서는 아무 명령도 실행하지 않습니다. 다음 번에 이미지가 FROM으로 사용될 때 실행할 명령을 예약하는 기능이라 할 수 있습니다.
ONBUILD RUN touch /hello.txt
ONBUILD ADD world.txt /world.txt
ONBUILD <Dockerfile 명령> <Dockerfile 명령의 매개 변수>
형식입니다. FROM, MAINTAINER, ONBUILD를 제외한 모든 Dockerfile 명령을 사용할 수 있습니다.
ONBUILD는 이미지를 생성한 뒤 해당 이미지를 기반으로 커스터마이징을 할 때 활용할 수 있습니다.
다음과 같이 ONBUILD를 사용하여 RUN touch /hello.txt
를 실행하도록 설정합니다.
FROM ubuntu:latest
ONBUILD RUN touch /hello.txt
docker build
명령으로 example 이미지를 생성한 뒤 docker run
명령으로 컨테이너를 생성합니다. 컨테이너의 Bash 셸이 실행되면 ls
명령으로 /의 파일 목록을 출력합니다.
$ sudo docker build --tag example .
$ sudo docker run -i -t example /bin/bash
root@891ccb6749e9:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
ONBUILD로 설정했기 때문에 example 이미지에는 /hello.txt
파일이 생성되지 않았습니다.
이제 FROM을 사용하여 example 이미지를 기반으로 새 이미지를 생성합니다.
FROM example
docker build
명령으로 example2 이미지를 생성한 뒤 docker run
명령으로 컨테이너를 생성합니다. 컨테이너의 Bash 셸이 실행되면 ls
명령으로 /의 파일 목록을 출력합니다.
$ sudo docker build --tag example2 .
Sending build context to Docker daemon 2.048kB
Step 1/1 : FROM example
# Executing 1 build trigger
---> Running in 51affb087bfb
Removing intermediate container 51affb087bfb
---> da3e74dad967
Successfully built da3e74dad967
Successfully tagged example2:latest
$ sudo docker run -i -t example2 /bin/bash
root@82656a94d554:/# ls
bin boot dev etc hello.txt home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
docker build
명령을 실행할 때 # Executing 1 build triggers라고 출력되고 그 아래부터 ONBUILD로 설정한 명령이 실행됩니다. 이제 ONBUILD를 통해 example2 이미지에 /hello.txt 파일이 생성되었습니다.
ONBUILD는 바로 아래 자식 이미지를 생성할 때만 적용되고, 손자 이미지에는 적용되지 않습니다. 즉 ONBUILD 설정은 상속되지 않습니다.
참고
docker inspect
명령으로 이미지의 ONBUILD 설정을 확인할 수 있습니다.
$ sudo docker inspect -f "{{ .ContainerConfig.OnBuild }}" example
[RUN touch /hello.txt]
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.