๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ Etc.../- linux, aws, docker, k8s

[Docker] Dockerfile ์€ ๋ฌด์—‡์ผ๊นŒ? (1) - ๋„์ปคํŒŒ์ผ์ด ๋ญ๊ณ  ์ž์ฃผ ์“ฐ์ด๋Š” ๋ช…๋ น์–ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

by Wonit 2020. 12. 1.
ํ•ด๋‹น ๊ธ€์€ 2๋ถ€์ž‘์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋กœ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ๋…์ด ์žˆ์œผ๋ฏ€๋กœ ํ•œ ๋ฒˆ ๊ฐ€๋ณ๊ฒŒ ์ฝ์–ด๋ณด์‹œ๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค :)


์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Dockerfile์€ ๋ฌด์—‡์ด๊ณ  ์–ด์ฉŒ๋‹ค ํƒ„์ƒํ–ˆ์œผ๋ฉฐ ์–ด๋–ค ๋ถˆํŽธํ•œ ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์ด๋‹ค.

 

์šฐ์„  ์šฐ๋ฆฌ๊ฐ€ ์šฐ๋ฆฌ์˜ Application์„ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

 

์šฐ์„ 

  1. ๋น„์–ด์žˆ๋Š” Ubuntu ์ด๋ฏธ์ง€๋ฅผ Dockerhub์—์„œ pullํ•˜๊ฒŒ ๋œ๋‹ค.
  2. git์ด๋‚˜ ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ์†Œ์Šค์ฝ”๋“œ๋ฅผ ubuntu ์ด๋ฏธ์ง€ ๋‚ด๋กœ ๋ณต์‚ฌํ•œ๋‹ค.
  3. ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” Ubuntu ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ด๋ฏธ์ง€ํ™”ํ•ด์„œ ๋ฐฐํฌํ•œ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ๋ฐฐํฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์€ ํ•œ ๋ฒˆ๋งŒ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ณ„์†ํ•ด์„œ ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค.


๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์€ ๋งค์šฐ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์ด๋ฏ€๋กœ ์ด๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•ด์ง€๋Š”๋ฐ, ์ด๊ฒŒ ๋ฐ”๋กœ ๋„์ปคํŒŒ์ผ์ด ์ž‘์—…์„ ๋Œ€์‹  ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๋„์ปค ํŒŒ์ผ

Dockerfile์˜ ์ •ํ™•ํ•œ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

ํ•˜๋‚˜์˜ ์™„์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ์žˆ์–ด์•ผํ•  ํŒจํ‚ค์ง€, ์˜์กด์„ฑ, ์†Œ์Šค์ฝ”๋“œ, ์Šคํฌ๋ฆฝํŠธ ๋“ค์„ ํ•˜๋‚˜์˜ file๋กœ ๊ธฐ๋กํ•˜์—ฌ ๋„์ปค๊ฐ€ ์ฝ๊ณ  ์ด๋ฅผ ์‹คํ–‰ํžˆ์…” ์ด๋ฏธ์ง€ํ™” ์‹œํ‚ฌ ๋ช…๋ น ํŒŒ์ผ

 

Dockerfile์€ ์œ„์˜ ๊ณผ์ •์„ ๋นŒ๋“œ(Build) ๊ณผ์ •์ด๋ผ ํ•˜๋ฉฐ ์ด๋Ÿฐ ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ๋ช…๋ น์–ด๊ฐ€ ๋ฐ”๋กœ ๋นŒ๋“œ ๋ช…๋ น์–ด์ด๋‹ค.

 

์ด ๋นŒ๋“œ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ์šฐ๋ฆฌ๋Š” ๋„์ปค ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

๋„์ปค๋ผ์ด์ง• Dockerizing

๋„์ปค๋ผ์ด์ง•์€ ๋ง ๊ทธ๋Œ€๋กœ ๋„์ปคํ™” ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.


์šฐ๋ฆฌ๊ฐ€ ์•„๋ž˜์—์„œ ๋ฐฐ์šธ ๋ช…๋ น์–ด๋“ค๋กœ Dockerfile์„ ๋งŒ๋“ค๊ณ  ๋„์ปค ์ด๋ฏธ์ง€ํ™” ์‹œํ‚จ๋‹ค๋ฉด ๊ทธ ๊ณผ์ •์„ ๋ฐ”๋กœ Dockerizing ํ•œ๋‹ค. ๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Dockerfile Build ๋ช…๋ น์–ด

๋„์ปคํŒŒ์ผ์˜ ๋นŒ๋“œ ๋ช…๋ น์–ด์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค.

 

  • ํ•œ ์ค„์—๋Š” ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ช…๋ น์–ด์˜ ๊ตฌ์กฐ๋Š” ๋ช…๋ น์–ด + ์˜ต์…˜์˜ ๊ตฌ์กฐ๋กœ ๋ช…๋ น์–ด๊ฐ€ ๋จผ์ € ์˜ค๊ฒŒ ๋œ๋‹ค.
  • ์†Œ๋ฌธ์ž ํ‘œ๊ธฐ๋„ ๊ฐ€๋Šฅํ•˜๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ฌธ์ž ํ‘œ๊ธฐ๋ฅผ ์šฐ์„ ์œผ๋กœ ํ•œ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ๋„์ปคํŒŒ์ผ์˜ ๋นŒ๋“œ ๋ช…๋ น์–ด๋Š” ํ•„์ž๊ฐ€ ๋งŒ๋‚ฌ๋˜ ๋ช…๋ น์–ด์ค‘ ํƒ‘์— ์†ํ•œ๋‹ค.

 

๋ˆˆ์— ๋ณด๊ธฐ์—๋„ ๋”ฑ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๊ธฐ๋Šฅ ๋˜ํ•œ ์•„์ฃผ ๋งค๋ ฅ์ ์ด๋‹ค.

Dockerfile ๋ช…๋ น์–ด ์ข…๋ฅ˜

๋นŒ๋“œ ๋ช…๋ น์–ด๋Š” ๋‹ค์–‘ํ•œ ์˜ต์…˜์ด ์žˆ๊ณ  ๋‹ค์–‘ํ•œ ๋ช…๋ น์–ด๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ผ๋‹จ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ๋จผ์ € ๋ฐฐ์šฐ๊ณ  ๊ณ ๊ธ‰ ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ์— ์•Œ์•„๋ณด๊ธฐ๋กœ ํ•˜์ž.

 

๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋‹ค.

  • FROM
  • MAINTAINER
  • RUN
  • ADD
  • WORKDIR
  • EXPOSE
  • CMD

FROM

FROM ๋ช…๋ น์–ด๋Š” base Image๋ฅผ ์ง€์ •ํ•œ๋‹ค.


์ฃผ๋กœ Ubuntu๋‚˜ CentOS์™€ ๊ฐ™์€ OS๋ฅผ ์ง€์ •ํ•˜๋Š”๋ฐ, ํ•ด๋‹น ๋„์ปค ์ด๋ฏธ์ง€๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์–ด๋–ค ์ด๋ฏธ์ง€๊ฐ€ Base๊ฐ€ ๋  ๊ฒƒ์ธ์ง€๋ฅผ ๋ช…์‹œํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

FROM ubuntu:latest

 

MAINTAINER

MAINTAINER ๋ช…๋ น์–ด๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•œ ์‚ฌ๋žŒ์˜ ์ •๋ณด๋ฅผ ์„ค์ •ํ•œ๋‹ค.

 

ํ˜•์‹์€ ์ž์œ  ํ˜•์‹์ธ๋ฐ ๋ณดํ†ต ์ด๋ฏธ์ง€๋‚˜ ๋‹‰๋„ค์ž„์„ ์ž…๋ ฅํ•œ๋‹ค.


๋ญ. ์—†์–ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

MAINTAINER JANG, wonik <dhslrl321@gmail.com>

 

RUN

RUN ๋ช…๋ น์–ด๋Š” ํ•ด๋‹น ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ package๋ฅผ ์„ค์น˜ํ•œ๋‹ค๋˜์ง€ ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ๋ช…์‹œํ•˜๋Š” ๋ช…๋ น์–ด ์ด๋‹ค.


์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌ์•กํŠธ๋ฅผ ๋„์ปค๋ผ์ด์ง• ํ•œ๋‹ค๋ฉด ์ฒ˜์Œ์œผ๋กœ npm install์„ ์ˆ˜ํ–‰ํ•ด์•ผ react-script์™€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋ฅผ npm์œผ๋กœ installํ•˜๊ฒŒ ๋œ๋‹ค.


ํ˜น์€ ubuntu ์ด๋ฏธ์ง€์—์„œ apt-get ์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ณผ์ • ๋˜ํ•œ RUN ๋ช…๋ น์–ด๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

RUN ["apt-get", "install", "-y", "nginx"]

 

ADD

ADD ๋ช…๋ น์–ด๋Š” ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ˜ธ์ŠคํŠธ PS์—์„œ Docker Image๋กœ ๋ณต์‚ฌํ•  ๋•Œ ์“ฐ์ธ๋‹ค.


๋งŒ์•ฝ ADD ํ•˜๋ ค๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ iamge ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด docker๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

ADD file /dir/dir/dir/file

 

WORKDIR

WORKDIR์€ RUN์ด๋‚˜ CMD, ์—ฌ๊ธฐ์„œ๋Š” ์„ค๋ช…ํ•˜์ง€ ์•Š์€ ENTRYPOINT ์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•  ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.


Bash์—์„œ cd ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

WORKDIR /var/www

 

EXPOSE

EXPOSE ๋ช…๋ น์–ด๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœํ•  ํฌํŠธ๋ฅผ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.


์˜ˆ๋ฅผ ๋“ค์–ด์„œ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋ฅผ 8917 ํฌํŠธ๋กœ ๋…ธ์ถœํ•˜๊ณ ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

EXPOSE 8917

 

CMD

CMD ๋ช…๋ น์–ด๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ ์‹คํ–‰ํ•  ์ปค๋งจ๋“œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

RUN๊ณผ ๊ธฐ๋Šฅ์ด ๋น„์Šทํ•œ๋ฐ, RUN์€ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์‹คํ–‰ํ•˜๋Š”๋ฐ, CMD ๋ช…๋ น์–ด๋Š” container๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰ํ•œ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

CMD ["nginx", "-g", "daemon off;"]

๋Œ“๊ธ€