Docker ์์์ ์๋์ํฌ ์ปจํ
์ด๋์ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ๊ธฐ์ ํ ํ์ผ
Docker build ๋ช
๋ น์ ํตํด Docker file ์ ๊ธฐ์ ๋ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก Docker image๋ฅผ ์์ฑํ๋ค.
FROM
: ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ง์ VOLUME
: ๋ณผ๋ฅจ ๋ง์ดํธRUN
: ๋ช ๋ น ์คํUSER
: ์ฌ์ฉ์ ์ง์ CMD
: ์ปจํ ์ด๋ ์คํ ๋ช ๋ น (์ค๋ฒ๋ผ์ด๋ฉ ๊ฐ๋ฅ)ENTRYPOINT
: CMD ๋ณด๋ค ๋จผ์ ์คํ๋๋ ์ปจํ ์ด๋ ์คํ ๋ช ๋ น (์ค๋ฒ๋ผ์ด๋ฉ ๋ถ๊ฐ)
WORKDIR
: ์์ ๋๋ ํ ๋ฆฌEXPOSE
: ํฌํธ ์ต์คํฌํธONBUILD
: ๋น๋ ์๋ฃ ํ ์คํ๋๋ ๋ช ๋ น
# ๊ธฐ๋ณธ
docker build -t my_ubuntu:1.0 .
# ๋์ปคํ์ผ์ ์ด๋ฆ์ด Dockerfile์ด ์๋ ๊ฒฝ์ฐ, ์ง์ -f ์ต์
์ ํตํด ์จ์ค์ผํ๋ค.
docker build -t my_ubuntu:2.0 -f ./new_dockerfile .
-t
: ์ด๋ฏธ์ง์ ํ๊ทธ๋ฅผ ๋ถ์ด๋ ์ต์
.
-f
: Dockerfile์ ๊ฒฝ๋ก์ ํ์ผ๋ช
์ ์ง์ ํ๋ ์ต์
.
-f ./new_dockerfile
์ ๊ฐ์ด ๊ฒฝ๋ก๋ฅผ ์ง์ ํด ์ฃผ์ด์ผ ํ๋ค..
: ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ํ๋ด๋ ๊ธฐํธ.
.
์ ์ฌ์ฉํ์ฌ ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์๋ Dockerfile์ ๋น๋ํ๋ค.RUN [์คํํ๊ณ ์ถ์ ๋ช ๋ น]
RUN์ ์ค์ ์ด๋ฏธ์ง ๋น๋ ๊ณผ์ ์์ ์คํ๋๋ ๋ช
๋ น์ด์ด๋ค.
์ด๋ ์ปจํ
์ด๋๊ฐ ์๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋ ํฌํจ๋๋ ๋ช
๋ น์ด๋ก ์ด๋ฏธ์ง ์์ฑ์ ๊ด์ฌํ๋ค.
์ฃผ๋ก ํจํค์ง ์ค์น, ์ํํธ์จ์ด ์ค์น, ์ค์ ๋ณ๊ฒฝ ๋ฑ๊ณผ ๊ฐ์ด ์ด๋ฏธ์ง ๋น๋ ์ ํ์ํ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
RUN ๋ช
๋ น์ ๊ธฐ์ ํ๋ ๋ฐฉ์์ ๋ ๊ฐ์ง๊ฐ ์กด์ฌํ๋ฉฐ shell ํ์์ผ๋ก ๊ธฐ์ ํ๋ ๋ฐฉ์๊ณผ Exec ํ์์ผ๋ก ๊ธฐ์ ํ๋ ๋ฐฉ์์ด ์๋ค.
CMD [์คํํ๊ณ ์ถ์ ๋ช ๋ น]
CMD ๋ช
๋ น์ด๋ ์ด๋ฏธ์ง๊ฐ ๋ก๋๊ฐ ๋์ด ์ปจํ
์ด๋๊ฐ ์คํ๋ ๋ ๋์ํ๋ค.
์ปจํ
์ด๋ ์คํ์์ docker run ๋ช
๋ น์ด ๋งจ ๋์ ์ค๋ CMD ๋ช
๋ น์ด๋ฅผ ๋ฎ์ด์์ด๋ค.
CMD ๋ช
๋ น์ด๋ ์ปจํ
์ด๋ ์คํ ์ ๋ํดํธ๋ก ์คํ๋๋ ๋ช
๋ น์ด๋ก, ๋ณดํต ์ ํ๋ฆฌ์ผ์ด์
์ ์ฃผ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ์ญํ ์ ํ๋ค.
โขRUN
์ ์ด๋ฏธ์ง ์์ฑ์ ํ์ํ ๋ช
๋ น์ ๊ธฐ์ ํ์ง๋ง, CMD
๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํ์ผ๋ก ์์ฑ๋ ์ปจํ
์ด๋ ์์์ ๋ช
๋ น์ ์คํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
โ ๏ธ Dockerfile
์๋ ํ๋์ CMD ๋ช
๋ น์ ๊ธฐ์ ํ ์ ์๊ณ , ๋ง์ผ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ง์ ํ๋ฉด ๋ง์ง๋ง ๋ช
๋ น๋ง ์ ํจํ๋ค.
CMD ๋ช ๋ น์ด๋ฅผ ์ธ์๋ก ๋ฐ๋ ๊ณ ์ ๋ ๋ช ๋ น์ด. CMD์ ๋ค๋ฅด๊ฒ ๊ฐ์ ์ฑ์ ๊ฐ์ง๋ค.
์ฆ, CMD๋ ENTRYPOINT์ ์ง์ ๋ ์คํ ๋ช ๋ น์ด์ ์ต์ ๋ฐ ์ธ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
Exec
ํ์์ผ๋ก ๊ธฐ์
ENTRYPOINT [โnginxโ, โ-gโ, โdaemon off;โ]
Shell
ํ์์ผ๋ก ๊ธฐ์
ENTRYPOINT nginx โg โdaemon off;โ
top
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์์คํ
์ ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ํฐ๋ง-d 10
์ต์
์ ํจ๊ป ์ฌ์ฉํ์ฌ ๊ฐฑ์ ์ฃผ๊ธฐ๋ฅผ 10์ด๋ก ์ค์ run
๋ช
๋ น์ด๋ฅผ ํตํด์ entry_sample:1.0
์ด๋ฏธ์ง์ ์ปจํ
์ด๋๋ฅผ ์์ฑํ ์ ์๋ค.# ๋์ปคํ์ผ
FROM ubuntu:latest
ENV vinca=0121
# ํ๋ฒ ์ถ๋ ฅํ๊ณ ์ข
๋ฃ
CMD echo ${vinca}
๋๋
# 5์ด๋ง๋ค ์ถ๋ ฅ
CMD ["bash", "-c", "while true; do echo ${vinca}; sleep 5; done"]
bin/bash
์ ๊ฐ์ด ๋ค์ ๋ช
๋ น์ด๋ฅผ ๋ฐ๋ก ์ง์ ํ๋ ๊ฒฝ์ฐ, ๋์ปค ์ด๋ฏธ์ง๋ก ์ ์ํ CMD
๋ช
๋ น์ด๋ ๋ฌด์๋๊ณ /bin/bash
๊ฐ ์คํ๋๋ค.
# bash ์์ ์คํํ ๊ฒฝ์ฐ ์ฆ์ ์ข
๋ฃ๋์ง ์์
docker run -it --name=my_container my_image:1.0 /bin/bash
# bash ์์ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ "CMD echo ${vinca}" ๋ถ๋ถ์ด ์คํ๋๊ณ ์ข
๋ฃ๋จ
docker run -it --name=my_container my_image:1.0
FROM ubuntu:latest
# apt ์
๋ฐ์ดํธ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ์ด๊ธฐ ์ค๋น ์์
์ํ
RUN apt update -y
# ์ปจํ
์ด๋์์ ์คํ๋ ๋ช
๋ น์ด ์ค์ (์: ๊ฐ๋จํ ์น ์๋ฒ ์คํ)
CMD ["python3", "-m", "http.server", "8080"]
# exec ํ์์ ํฌ์ค ์ฒดํฌ ์ ์
HEALTHCHECK --interval=30s --timeout=3s \
CMD [ "wget", "-q", "http://localhost:8080" ] || exit 1