Skip to main content

07N. ONBUILD

About 1 minDevOpsDockercrashcoursepyrasis.comdockerdevops

07N. ONBUILD ๊ด€๋ จ

๋ชฉ์ฐจ

์–ธ์ œ๋‚˜ ์ตœ์‹  Docker

7์žฅ - 14. ONBUILD
์–ธ์ œ๋‚˜ ์ตœ์‹  Docker

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
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 ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

.Dockerfile

<span class="token instruction"><span class="token keyword">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
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]

์ด์ฐฌํฌ (MarkiiimarK)
Never Stop Learning.