Super Kawaii Cute Cat Kaoani
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Linux/Docker

[Docker] Dockerfile ๋ช…๋ น์–ด

728x90

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๋กœ ์ ‘์†

728x90