
Dockerfile ๋ช ๋ น์ด
๐ Dockerfile์ด๋?
์๋ก์ด ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋๋ ๋จผ์ ๊ธฐ๋ฐ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํด์ผ ํ๋ค.
๊ธฐ๋ณธ ์ด๋ฏธ์ง์ ๋ํด์ ์ถ๊ฐํ ๋ชจ๋ ์ค์ ๋ค์ Dockerfile์ด๋ผ๋ DSL ํ์ผ์ ์์ฑํ์ฌ ๋น๋ํ๋ค.
ํจ์จ์ ์ธ Dockerfile ์์ฑ์ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋ ์๊ฐ, ์ด๋ฏธ์ง ํฌ๊ธฐ, ์ฌ์ฌ์ฉ์ฑ, ๋ณด์, ์ ์ง๋ณด์์ฑ ๋ฑ์ ๊ณ ๋ คํด์ผ ํ๋ค.
๐ ๊ณ ๋ ค์ฌํญ
โ ๊ฒฝ๋์ ์ปจํ ์ด๋ ์๋น์ค ์ ๊ณต
๋ฒ ์ด์ค ์ด๋ฏธ์ง์ ํ์ํ ํ๋ก๊ทธ๋จ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์คํ ํ์ผ์ ํฌํจ์ํฌ ๋, ๋ณต์ก์ฑ๊ณผ ์์กด์ฑ์ ๋ฌธ์ ๋ฅผ ํผํ๊ณ ๋น ๋ฅธ ์ปจํ ์ด๋ ๋ฐฐํฌ๋ฅผ ๋ชฉ์ ์ผ๋ก.
โ Dockerfile์ ๋ด๊ธฐ๋ ๋ ์ด์ด ์ต์ํ
๋ ์ด์ด ์๊ฐ ๋ง์์๋ก ์ด๋ฏธ์ง ์์ฑ ๋น๋ ์๊ฐ์ ๊ธธ์ด์ง๊ณ , ์ฉ๋๋ ์ปค์ง๊ธฐ ๋๋ฌธ์ ๋ ์ด์ด ์๋ฅผ ์ค์ฌ์ผ ํ๋ค.
โ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋์ ์ปจํ ์ด๋์
ํ๋์ ์ปจํ ์ด๋์ 2๊ฐ ์ด์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ํ๊ฒ ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฐํฉ์ฑ์ด ๋๊ณ ํ์ฅ์ฑ์ด ์ ํด๋๋ค. ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ๋์์ ๋ ๋ฆฝ์ฑ์ด ๋ณด์ฅ๋๊ณ , ๋ฒ์ ๊ด๋ฆฌ ๋ฐ ์์ค ์ฝ๋ ๋ชจ๋ํ์์ ์ด์ ์ด ์๋ค. ๊ฒฐํฉ ํด์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ค๊ณ, ๋ง์ดํฌ๋ก์๋น์ค ์งํฅ์ ์ค๊ณ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
โ ์บ์ ๊ธฐ๋ฅ์ ํ์ฉ
Dockerfile์ ํตํด ์ด๋ฏธ์ง ๋น๋ ์, ์๋์ผ๋ก ๋ช ๋ น์ด ๋จ์์ ์บ์ฑ์ด ์ด๋ฃจ์ด ์ง๋ค. ๋์ผ ๋ช ๋ น์ ์คํ์ ์ฌ์ฌ์ฉ๋๋ค.
โ IaC ํ๊ฒฝ ๊ฐ๋ฐ์ ๋๋ ํ ๋ฆฌ ๋จ์๋ก
Dockerfile์ ํตํด ์ด๋ฏธ์ง ๋น๋ ์, ํ์ฌ ์์น๋ก๋ถํฐ ํ์ ๊ฒฝ๋ก์ ๋ชจ๋ ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ๋์ปค ์ปจํ ์คํธ์ ์์ ํ ๋ค ์์ ์งํ. ์ด๋ฏธ์ง ๋น๋์ ์๊ด์๋ ํ์ผ์ด ํฌํจ๋์ง ์๋๋ก ๋ณ๋ ๋๋ ํ ๋ฆฌ ์์ฑ ํ ๋ ๋ฆฝ์ ํ๊ฒฝ์ด ํ์.
โ ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ์ผ๋ก ๊ฐ๋ฐ
Dockerfile์ ํตํด ๋ฏธ๋ฆฌ ์ค์ ๋ ํ๊ฒฝ = ์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ. ์ฌ์ฉ์๊ฐ ์๋ฒ๋ฅผ ํ๋ก๋น์ ๋, ํ์ฅ, ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค. ๊ฐ๋ฐ์๊ฐ ์๋ฒ ๋ฐ ๋ฐํ์์ ๊ด๋ฆฌ ๋ฐ ์ด์์ ํ์ํ ์ ๋ฌด๋์ ์ค์ด๊ณ ํต์ฌ ๊ฐ๋ฐ์ ์ง์คํ ์ ์๋ค.
๐ Dockerfile ๋ช ๋ น์ด
โ FROM
ํ์ ์ต์ .
์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๋ฒ ์ด์ค๊ฐ ๋๋ ์ด๋ฏธ์ง ์ง์ .
๋ฒ ์ด์ค ์ด๋ฏธ์ง ๋ด์ ์ค์ ๋์ด ์๋ ๋ชจ๋ ๋ด์ฉ์ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๊ฒ ๋๋ค.
๋ง์ฝ, nginx:10.1์ด๋ผ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ก ์ง์ ํ์ฌ ์๋ก์ด myngunx:1.0์ ๋ง๋ค์๋ค๋ฉด ์ถ๊ฐ๋ ๋ด์ฉ์ Port80/tcp๋ฅผ ์ธ๋ถ์ ๊ณต๊ฐํ๊ฒ ๋ค๋ ๋ด์ฉ์ ๋ฃ์ ํ์๊ฐ ์๋ค.
๋์ปค ํ์ผ ๋ด์์ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์๋ค. ๋ ๋ฒ ์ด์ ์ ๋ ฅํ ๊ฒฝ์ฐ ์ต์ข FROM์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ก ์ง์ ํด์ค๋ค.
FROM ubuntu:20.04
FROM python:3.9-slim-buster
โ RUN
๋ฒ ์ด์ค ์ด๋ฏธ์ง์ ์๋ก์ด ํจํค์ง๋ฅผ ์ค์นํ๊ฑฐ๋ ๋ช ๋ น์ ์ถ๊ฐํ๊ณ ์ถ์ ๊ฒฝ์ฐ.
ํ ๋ฒ ์ด์ ์ ๋ ฅ ๊ฐ๋ฅ.
- shell ๋ฐฉ์
RUN apt update && apt install -y nginx - ํ์ฌ ์์น๋ก bash๋ฅผ ๋ถ๋ฌ์์ ๋ช ๋ น ์คํ. ๋ฆฌ๋ ์ค ํ๋กฌํํธ์์ ๋ช ๋ น์ด ์ ๋ ฅํ๋ ๋ฐฉ์ ๊ทธ๋๋ก.
- exec ๋ฐฉ์
RUN [”/bin/bash”, “-c”, “apt update” RUN [”/bin/bash”, “-c”, “apt -y install nginx git vim curl” - bash๋ฅผ ์ง์ ํธ์ถํ์ฌ ๋ช ๋ น ์คํ. ๋ฆฌ์คํธ ํํ๋ก ์์ฑ.
โ CMD
์ด๋ฏธ์ง๊ฐ ์๋ ์ปจํ ์ด๋๋ก ๋ฐฐํฌ๋ ๋ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์๋ ์คํ์ด ๋๋๋ก ํ๋ ๋ช ๋ น์ด๋ฅผ ๋ฃ์ด๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋์ปคํ์ผ์์ ๊ฐ์ฅ ์๋์ ๋ฐฐ์น์ํค๊ณ ๋์ปค ํ์ผ ๋ด ํ ๋ฒ๋ง ์ฌ์ฉ.
๋ง์ฝ ์น ์๋ฒ ์ด๋ฏธ์ง๋ผ๋ฉด ์น ์๋ฒ ์ปจํ ์ด๋๋ก ๋ฐฐํฌ๋ ๋ nginx๋ httpd๋ฅผ ์คํํ๋๋ก ํ๊ธฐ ์ํ ๋ช ๋ น์ CMD๋ก ์ฒ๋ฆฌ.
# shell ๋ฐฉ์
CMD httpd -D FOREGROUND
# exec ๋ฐฉ์
CMD [“nginx”, “-g”, “daemon off;”]
โ ENTRYPOINT
CMD์ ๋์ผ. ์ปจํ ์ด๋๋ก ๋ฐฐํฌ๋ ๋ ์คํํ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅ ๊ฐ๋ฅ. ๋์ปค ํ์ผ ๋ด์์ ํ ๋ฒ๋ง ์ฌ์ฉ ๊ฐ๋ฅ.
๐ก CMD vs ENTRYPOINT
Dockerfile์ ๋ฑ๋ก๋ ๋ด์ฉ๊ณผ ์ปจํ ์ด๋ ์์ฑ ์ ์ต์ ์ผ๋ก ๋ฃ์ ๋ด์ฉ์ด ๊ฒน์น ๊ฒฝ์ฐ CMD๋ก ๋ฑ๋กํ์ ๊ฒฝ์ฐ ์ํฉ์ ๋ฐ๋ผ ์คํ๋ ์๋ ์๋ ์๋ ์๋ค. ENTRTPOINT๋ก ๋ฑ๋กํ์ ๊ฒฝ์ฐ, ๋ฌด์กฐ๊ฑด ์คํ๋๋ค.
๐ก ๋ง์ฝ ์ปจํ ์ด๋ ์คํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํํด์ผ ํ ๋ช ๋ น์ด๋ค์ด ๋ง๋ค๋ฉด?
์์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ฌ ๋ฏธ๋ฆฌ ์ด๋ฏธ์ง์ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํด๋๊ณ Dockerfile์ CMD /bin/bash abc.sh๋ฅผ ์ถ๊ฐํ๋ค.
โ COPY
ํธ์คํธ์ ์๋ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๋ฏธ์ง ๋ด๋ก ๋ถ์ฌ๋ฃ๊ธฐํ๋ค.
โ ADD
COPY๋ฅผ ํฌํจํ๋ฉฐ ์๋์ ๋ด์ฉ์ ์ง์ํ๋ค.
์ธํฐ๋ท์ด๋ ์ธ๋ถ์ ์๋ ํน์ ํ์ผ์ ์ด๋ฏธ์ง ๋ด๋ก ๋ถ์ฌ๋ฃ๊ธฐ ํ ์ ์๋ค.
abc.tar.gz๋ฅผ ADDํ ๊ฒฝ์ฐ ํจํค์ง๋ฅผ ํ๊ณ , ์์ถํด์ ํ์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ํด์ค๋ค.
(COPY๋ก ์์ถ ํ์ผ์ ๋ถ์ฌ๋ฃ๊ธฐ ํ ๊ฒฝ์ฐ, ์์ถ๋ ํ์ผ ๊ทธ๋๋ก ๋ถ์ฌ๋ฃ๊ธฐ ๋๋ค.)
ADD index.html /usr/share/nginx/html
โ ENV
์ด๋ฏธ์ง ์์ ๊ฐ์ข ํ๊ฒฝ ๋ณ์๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ ์์ฑ.
ENV PATH /usr/local/nginx/bin:$PATH
โ EXPOSE
ํฌํธ์ ํ๋กํ ์ฝ ์ง์ .
๊ธฐ๋ณธ์ ์ผ๋ก TCP ํฌํธ๋ฅผ ์คํํ๋ฉฐ, ๋ง์ฝ UDP ํฌํธ๋ฅผ ์ด๊ณ ์ถ๋ค๋ฉด EXPOSE 53/udp์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์ฑ.
EXPOSE 80
EXPOSE 80/tcp
โ VOLUME
์์์ ๋ณผ๋ฅจ์ ์์ฑํ์ฌ ์ด๋ฏธ์ง ๋๋ ํ ๋ฆฌ ๋ด์ ํน์ ๋๋ ํ ๋ฆฌ์ ์ฐ๊ฒฐ์ํจ๋ค.
VOLUME /var/log๋ผ๊ณ ํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ปจํ ์ด๋๊ฐ ๋ฐฐ์น๋ ํธ์คํธ์ ์์์ ์ด๋ฆ์ ์ง์ ํ์ฌ ๋ณผ๋ฅจ์ ์์ฑ ํ, ํด๋น ๋ณผ๋ฅจ์ ๊ฐ ์ปจํ ์ด๋์ /var/log์ ์ฐ๊ฒฐ์ํจ๋ค.
VOLUME /var/log
โ WORKDIR
์ด๋ฏธ์ง ๋ด์์ ์์ ๊ฒฝ๋ก๋ฅผ ์๋ฏธํ๋ค. (๋ฆฌ๋ ์ค์ cd)
๋ณ๋๋ก ์ง์ ํ์ง ์์ผ๋ฉด /root์์ ์์ ํ๋ค.
# cd /etc
WORKDIR /etc
RUN A
RUN B
# cd /root
WORKDIR /root
RUN C
ADD a.txt b.txt
โ ONBUILD
์ฒ์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ์คํ๋์ง ์๊ณ , ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ์ ์คํ๋๋ค.
๐ ONBUILD ์ค์ต
โ ํ์ฅ, ํ์ ๋ณ ๋๋ ํ ๋ฆฌ ์์ฑ
mkdir 0201 ; cd 0201
mkdir manager worker
โ ํ์ฅ - manager
vi Dockerfile
FROM centos:7
RUN yum -y install httpd
EXPOSE 80
ONBUILD ADD website.tar /var/www/html
CMD httpd -DFOREGROUND
website.tar๋ฅผ /var/www/html์ ๋ถ์ฌ๋ฃ๊ธฐํ๋ ์์ ์ ๊ฐ๋ฐ์๊ฐ ํ ์์ . ONBUILD๋ฅผ ํตํด ์คํํ ๋ ๋ถ์ฌ๋ฃ๊ธฐ ๋๋๋ก ํ๋ค.
โ ์ด๋ฏธ์ง ๋น๋
docker build -t website:1.0 .

โ ํ์ - worker
cd ../worker
vi Dockerfile
FROM website:1.0
โ website.tar ์ค๋น
mkdir website
echo "HELLO ALL" > website/index.html
tar cf website.tar website/*
โ ์ด๋ฏธ์ง ๋น๋
docker build -t board:1.0 .
โ ์ปจํ ์ด๋ ์์ฑ
docker container run -d -p 8881:80 --name board1 board:1.0
โ 211.183.3.100:8881๋ก ์ ์

'Linux > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Docker] Docker Swarm์ผ๋ก ํด๋ฌ์คํฐ ๊ตฌ์ฑํ๊ธฐ (0) | 2024.02.04 |
|---|---|
| [Docker] Attachable Overlay Network์ ํ์ฉํ ๋์ปค ์คํ ์คํ (0) | 2024.02.02 |
| [Docker] Dockerfile๋ก XpressEngine ๊ตฌ์ถํ๊ธฐ (0) | 2024.02.01 |
| [Docker] Private Docker Registry๋ก ์ด๋ฏธ์ง ๊ด๋ฆฌํ๊ธฐ (0) | 2024.01.31 |
| [Docker] ๋์ปค ํ๋ธ์ ์ด๋ฏธ์ง ์ ๋ก๋ํ๊ธฐ (0) | 2024.01.31 |