[Docker] Dockerfile

orijoon98ยท2022๋…„ 5์›” 11์ผ
0

Docker

๋ชฉ๋ก ๋ณด๊ธฐ
6/9
post-thumbnail

๐Ÿ“Œ ๋„์ปค Dockerfile์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Dockerfile ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ -> ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์น˜ -> ์ปจํ…Œ์ด๋„ˆ ์ปค๋ฐ‹
    ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ผ์ผ์ด ์ˆ˜์ž‘์—…์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค.

  2. Dockerfile ์ž‘์„ฑ -> ์ด๋ฏธ์ง€ ์ƒ์„ฑ
    ์™„์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ์— ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ํŒจํ‚ค์ง€, ์ถ”๊ฐ€ํ•  ์†Œ์Šค์ฝ”๋“œ, ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์™€ ์…ธ ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๊ธฐ๋กํ•ด ๋‘๋ฉด ๋„์ปค๋Š” ์ด ํŒŒ์ผ์„ ์ฝ์–ด ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๐Ÿ‘‰ ์ง์ ‘ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฏธ์ง€๋กœ ์ปค๋ฐ‹ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋Ÿฌ์›€์„ ๋œ ์ˆ˜ ์žˆ๊ณ  ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

Dockerfile ์ž‘์„ฑ

  • FROM : ์ƒ์„ฑํ•  ์ด๋ฏธ์ง€์˜ ๋ฒ ์ด์Šค๊ฐ€ ๋  ์ด๋ฏธ์ง€๋ฅผ ๋œปํ•œ๋‹ค. Dockerfile์„ ์ž‘์„ฑํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ํ•œ ๋ฒˆ ์ด์ƒ ์ž…๋ ฅํ•ด์•ผ ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋„์ปค์— ์—†๋‹ค๋ฉด ์ž๋™์œผ๋กœ pullํ•œ๋‹ค.
  • LABEL : ์ด๋ฏธ์ง€์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” 'ํ‚ค:๊ฐ’'์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค.
  • RUN : ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • ADD : ํŒŒ์ผ์„ ์ด๋ฏธ์ง€์— ์ถ”๊ฐ€ํ•œ๋‹ค. ์ถ”๊ฐ€ํ•˜๋Š” ํŒŒ์ผ์€ Dockerfile์ด ์œ„์น˜ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์ธ ์ปจํ…์ŠคํŠธ(Context)์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค. JSON ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ["์ถ”๊ฐ€ํ•  ํŒŒ์ผ ์ด๋ฆ„", ... "์ปจํ…Œ์ด๋„ˆ์— ์ถ”๊ฐ€๋  ์œ„์น˜"]์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถ”๊ฐ€ํ•  ํŒŒ์ผ๋ช…์€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ์ถ”๊ฐ€๋  ์œ„์น˜๋‹ค.
  • WORKDIR : ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋ฐฐ์‹œ ์…ธ์—์„œ cd ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.
  • EXPOSE : Dockerfile์˜ ๋นŒ๋“œ๋กœ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€์—์„œ ๋…ธ์ถœํ•  ํฌํŠธ๋ฅผ ์„ค์ •ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ EXPOSE๋ฅผ ์„ค์ •ํ•œ ์ด๋ฏธ์ง€๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ๋ฐ˜๋“œ์‹œ ์ด ํฌํŠธ๊ฐ€ ํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ์™€ ๋ฐ”์ธ๋”ฉ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • CMD : ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰ํ•  ๋ช…๋ น์–ด(์ปค๋งจ๋“œ)๋ฅผ ์„ค์ •ํ•˜๋ฉฐ, Dockerfile์—์„œ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Dockerfile ๋นŒ๋“œ

docker build -t mybuild:0.0 ./

-t ์˜ต์…˜์€ ์ƒ์„ฑ๋  ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์„ ์„ค์ •ํ•œ๋‹ค. -t ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด 16์ง„์ˆ˜ ํ˜•ํƒœ์˜ ์ด๋ฆ„์œผ๋กœ ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋œ๋‹ค. build ๋ช…๋ น์–ด์˜ ๋์—๋Š” Dockerfile์ด ์ €์žฅ๋œ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

docker run -d -P --name myserver mybuild:0.0

-P ์˜ต์…˜์€ ์ด๋ฏธ์ง€์— ์„ค์ •๋œ EXPOSE์˜ ๋ชจ๋“  ํฌํŠธ๋ฅผ ํ˜ธ์ŠคํŠธ์— ์—ฐ๊ฒฐํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

docker port myserver

docker ps ๋˜๋Š” docker port ๋ช…๋ น์–ด๋กœ ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฐ๊ฒฐ๋œ ํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

.dockerignore

๋นŒ๋“œ ์ปจํ…์ŠคํŠธ๋ž€?

์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฐ์ข… ํŒŒ์ผ, ์†Œ์Šค์ฝ”๋“œ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋“ฑ์„ ๋‹ด๊ณ  ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, Dockerfile์ด ์œ„์น˜ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ๋ผ ํ•œ๋‹ค.

์ปจํ…์ŠคํŠธ๋Š” build ๋ช…๋ น์–ด์˜ ๋งจ ๋งˆ์ง€๋ง‰์— ์ง€์ •๋œ ์œ„์น˜์— ์žˆ๋Š” ํŒŒ์ผ์„ ์ „๋ถ€ ํฌํ•จํ•œ๋‹ค. ๋‹จ์ˆœ ํŒŒ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋„ ์ „๋ถ€ ํฌํ•จํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ๋นŒ๋“œ์— ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ์ด ํฌํ•จ๋œ๋‹ค๋ฉด ๋นŒ๋“œ ์†๋„๋„ ๋Š๋ ค์ง€๊ณ  ํ˜ธ์ŠคํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง€๋‚˜์น˜๊ฒŒ ์ ์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘‰ ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด .dockerignore์„ ์‚ฌ์šฉํ•œ๋‹ค.

.dockerignore์€ .gitignore์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. .dockerignore๋ผ๋Š” ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋ฉด ๋นŒ๋“œ ์‹œ ์ด ํŒŒ์ผ์— ๋ช…์‹œ๋œ ์ด๋ฆ„์„ ํŒŒ์ผ์„ ์ปจํ…์ŠคํŠธ์—์„œ ์ œ์™ธํ•œ๋‹ค. .dockerignore ํŒŒ์ผ์€ ์ปจํ…์ŠคํŠธ์˜ ์ตœ์ƒ์œ„ ๊ฒฝ๋กœ, ์ฆ‰ Dockerfile์ด ์œ„์น˜ํ•œ ๊ฒฝ๋กœ์™€ ๊ฐ™์€ ๊ณณ์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.

๊ธฐํƒ€ Dockerfile ๋ช…๋ น์–ด

  • ENV : Dockerfile์—์„œ ์‚ฌ์šฉ๋  ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์„ค์ •ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” ${ENV_NAME} ๋˜๋Š” $ENV_NAME์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • VOLUME : ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ ํ˜ธ์ŠคํŠธ์™€ ๊ณต์œ ํ•  ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  • ARG : build ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ถ”๊ฐ€๋กœ ์ž…๋ ฅ์„ ๋ฐ›์•„ Dockerfile ๋‚ด์—์„œ ์‚ฌ์šฉ๋  ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.
  • COPY : ๋กœ์ปฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ฝ์–ด ๋“ค์ธ ์ปจํ…์ŠคํŠธ๋กœ๋ถ€ํ„ฐ ์ด๋ฏธ์ง€์— ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ADD์™€์˜ ์ฐจ์ด์ ์ด ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, COPY๋Š” ๋กœ์ปฌ์˜ ํŒŒ์ผ๋งŒ ์ด๋ฏธ์ง€์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ADD๋Š” ์™ธ๋ถ€ URL ๋ฐ tar ํŒŒ์ผ์—์„œ๋„ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ๋‹ค๋ฅด๋‹ค.

๋ช…๋ น์–ด ์ „์ฒด ๋ชฉ๋ก์€ ์•„๋ž˜ ๋งํฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
https://docs.docker.com/engine/reference/builder/

profile
๋ชฐ์ž…์„ ์ฆ๊ธฐ๋Š” ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€