Skip to main content

07F. ENTRYPOINT

About 1 minDevOpsDockercrashcoursepyrasis.comdockerdevops

07F. ENTRYPOINT κ΄€λ ¨

λͺ©μ°¨

μ–Έμ œλ‚˜ μ΅œμ‹  Docker

7μž₯ - 6. ENTRYPOINT
μ–Έμ œλ‚˜ μ΅œμ‹  Docker

ENTRYPOINTλŠ” μ»¨ν…Œμ΄λ„ˆκ°€ μ‹œμž‘λ˜μ—ˆμ„ λ•Œ 슀크립트 ν˜Ήμ€ λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€. 즉 docker run λͺ…λ ΉμœΌλ‘œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜κ±°λ‚˜, docker start λͺ…λ ΉμœΌλ‘œ μ •μ§€λœ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹œμž‘ν•  λ•Œ μ‹€ν–‰λ©λ‹ˆλ‹€. ENTRYPOINTλŠ” Dockerfileμ—μ„œ 단 ν•œλ²ˆλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


μ…Έ(/bin/sh)둜 λͺ…λ Ή μ‹€ν–‰ν•˜κΈ°

.Dockerfile

ENTRYPOINT touch /home/hello/hello.txt

ENTRYPOINT <λͺ…λ Ή> ν˜•μ‹μ΄λ©° μ…Έ 슀크립트 ꡬ문을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. FROM으둜 μ„€μ •ν•œ 이미지에 ν¬ν•¨λœ /bin/sh μ‹€ν–‰ νŒŒμΌμ„ μ‚¬μš©ν•˜κ²Œ 되며 /bin/sh μ‹€ν–‰ 파일이 μ—†μœΌλ©΄ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.


μ…Έ 없이 λ°”λ‘œ μ‹€ν–‰ν•˜κΈ°

.Dockerfile

ENTRYPOINT ["/home/hello/hello.sh"]

.Dockerfile

ENTRYPOINT ["/home/hello/hello.sh", "--hello=1", "--world=2"]

ENTRYPOINT ["<μ‹€ν–‰ 파일>", "<맀개 λ³€μˆ˜1>", "<맀개 λ³€μˆ˜2>"] ν˜•μ‹μž…λ‹ˆλ‹€. μ‹€ν–‰ 파일과 맀개 λ³€μˆ˜λ₯Ό λ°°μ—΄ ν˜•νƒœλ‘œ μ„€μ •ν•©λ‹ˆλ‹€. FROM으둜 μ„€μ •ν•œ μ΄λ―Έμ§€μ˜ /bin/sh μ‹€ν–‰ νŒŒμΌμ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ°©μ‹μž…λ‹ˆλ‹€. μ…Έ 슀크립트 문법이 μΈμ‹λ˜μ§€ μ•ŠμœΌλ―€λ‘œ μ…Έ 슀크립트 문법과 κ΄€λ ¨λœ 문자λ₯Ό κ·ΈλŒ€λ‘œ μ‹€ν–‰ νŒŒμΌμ— λ„˜κ²¨μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

CMD와 ENTRYPOINTλŠ” μ»¨ν…Œμ΄λ„ˆκ°€ 생성될 λ•Œ λͺ…령이 μ‹€ν–‰λ˜λŠ” 것은 λ™μΌν•˜μ§€λ§Œ docker run λͺ…λ Ήμ—μ„œ λ™μž‘ 방식이 λ‹€λ¦…λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 Dockerfileμ—μ„œ CMD둜 echo λͺ…령을 μ‚¬μš©ν•˜μ—¬ helloλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

.Dockerfile

FROM ubuntu:latest
CMD ["echo", "hello"]

μ»¨ν…Œμ΄λ„ˆλ₯Ό 생성할 λ•Œ docker run <이미지> <μ‹€ν–‰ν•  파일> ν˜•μ‹μΈλ° 이미지 λ‹€μŒμ— μ‹€ν–‰ν•  νŒŒμΌμ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. docker run λͺ…λ Ήμ—μ„œ μ‹€ν–‰ν•  νŒŒμΌμ„ μ„€μ •ν•˜λ©΄ CMDλŠ” λ¬΄μ‹œλ©λ‹ˆλ‹€.

sudo docker build --tag example .
sudo docker run example echo world
# 
# world

CMD ["echo", "hello"]λŠ” λ¬΄μ‹œλ˜κ³  docker run λͺ…λ Ήμ—μ„œ μ„€μ •ν•œ echo worldκ°€ μ‹€ν–‰λ˜μ–΄ worldκ°€ 좜λ ₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€. docker run λͺ…λ Ήμ—μ„œ μ„€μ •ν•œ <μ‹€ν–‰ν•  파일>κ³Ό Dockerfile의 CMDλŠ” 같은 κΈ°λŠ₯μž…λ‹ˆλ‹€.

이제 ENTRYPOINTμž…λ‹ˆλ‹€. λ‹€μŒκ³Ό 같이 Dockerfileμ—μ„œ ENTRYPOINT둜 echo λͺ…령을 μ‚¬μš©ν•˜μ—¬ helloλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

.Dockerfile

FROM ubuntu:latest
ENTRYPOINT ["echo", "hello"]

.Dockerfile을 λΉŒλ“œν•˜μ—¬ docker run λͺ…λ ΉμœΌλ‘œ μ‹€ν–‰ν•©λ‹ˆλ‹€. docker run λͺ…λ Ήμ—μ„œ μ‹€ν–‰ν•  νŒŒμΌμ„ μ„€μ •ν•˜λ©΄ ENTRYPOINT λ¬΄μ‹œλ˜μ§€ μ•Šκ³ , μ‹€ν–‰ν•  파일 μ„€μ • 자체λ₯Ό 맀개 λ³€μˆ˜λ‘œ λ°›μ•„μ„œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

sudo docker build --tag example .
sudo docker run example echo world
# 
# hello echo world

ENTRYPOINT ["echo", "hello"]μ—μ„œ echo helloκ°€ μ‹€ν–‰λ˜μ–΄ helloκ°€ 좜λ ₯되고, docker run λͺ…λ Ήμ—μ„œ μ„€μ •ν•œ λ‚΄μš©μ΄ ENTRYPOINT ["echo", "hello"]의 맀개 λ³€μˆ˜λ‘œ μ²˜λ¦¬λ˜μ–΄ echo world도 ν•¨κ»˜ 좜λ ₯λ©λ‹ˆλ‹€. μ…Έμ—μ„œλŠ” λ‹€μŒκ³Ό 같이 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

echo hello echo world
# 
# hello echo world

echo λͺ…λ Ή μ•„λ‹Œ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μ‹€ν–‰ν•΄λ΄…λ‹ˆλ‹€. λ‹€μŒκ³Ό 같이 1 2 3 4λ₯Ό λ„˜κ²¨μ£Όλ©΄ κ·ΈλŒ€λ‘œ 1 2 3 4κ°€ 좜λ ₯λ©λ‹ˆλ‹€.

sudo docker run example 1 2 3 4
# 
# hello 1 2 3 4

ENTRYPOINTλŠ” docker run λͺ…λ Ήμ—μ„œ --entrypoint μ˜΅μ…˜μœΌλ‘œλ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. --entrypoint μ˜΅μ…˜μœΌλ‘œ cat을 μ‹€ν–‰ν•˜κ³  /etc/hostname 파일의 λ‚΄μš©μ„ 좜λ ₯ν•©λ‹ˆλ‹€.

sudo docker run --entrypoint="cat" example /etc/hostname
# 
# 9efe43ea4d40

--entrypoint μ˜΅μ…˜μ„ μ„€μ •ν•˜λ©΄ Dockerfile에 μ„€μ •ν•œ ENTRYPOINTλŠ” λ¬΄μ‹œλ©λ‹ˆλ‹€.


이찬희 (MarkiiimarK)
Never Stop Learning.