Dockerfile 자세히 알아보기

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

ONBUILD

ONBUILD는 생성한 이미지를 기반으로 다른 이미지가 생성될 때 명령을 실행(trigger)합니다. 최초에 ONBUILD를 사용한 상태에서는 아무 명령도 실행하지 않습니다. 다음 번에 이미지가 FROM으로 사용될 때 실행할 명령을 예약하는 기능이라 할 수 있습니다.

Dockerfile

ONBUILD RUN touch /hello.txt
ONBUILD ADD world.txt /world.txt

ONBUILD <Dockerfile 명령> <Dockerfile 명령의 매개 변수> 형식입니다. FROM, MAINTAINER, ONBUILD를 제외한 모든 Dockerfile 명령을 사용할 수 있습니다.

ONBUILD는 이미지를 생성한 뒤 해당 이미지를 기반으로 커스터마이징을 할 때 활용할 수 있습니다.

다음과 같이 ONBUILD를 사용하여 RUN touch /hello.txt를 실행하도록 설정합니다.

Dockerfile

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  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

ONBUILD로 설정했기 때문에 example 이미지에는 /hello.txt 파일이 생성되지 않았습니다.

이제 FROM을 사용하여 example 이미지를 기반으로 새 이미지를 생성합니다.

Dockerfile

FROM example

docker build 명령으로 example2 이미지를 생성한 뒤 docker run 명령으로 컨테이너를 생성합니다. 컨테이너의 Bash 셸이 실행되면 ls 명령으로 /의 파일 목록을 출력합니다.

$ sudo docker build --tag example2 .
Sending build context to Docker daemon  2.56 kB
Sending build context to Docker daemon
Step 0 : FROM example
# Executing 1 build triggers
Step onbuild-0 : RUN touch /hello.txt
 ---> Running in 7e77e38db77c
 ---> 967feb106636
 ---> 967feb106636
Removing intermediate container 7e77e38db77c
Successfully built 967feb106636
$ sudo docker run -i -t example2 /bin/bash
root@874d3e1fdd6f:/# ls
bin  boot  dev  etc  hello.txt  home  lib  lib64  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 공유는 허용합니다.

Published

30 November 2014