Docker - innovationacademy-kr/slabs-munetic GitHub Wiki

๐Ÿ‘€ Basics

๋„์ปค๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์„ ๋ถ„๋ฆฌ์‹œ์ผœ ํ•˜๋‚˜์˜ ๊ฒฉ๋ฆฌ๋œ OS์™€ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์—์„œ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋กœ ๋‹ค๋ฅธ OS์™€ ํ™˜๊ฒฝ์—์„œ๋„ docker๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ™์€ ํ™˜๊ฒฝ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—๋Š” ์ผ๋ฐ˜ OS์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„์ปค๋ฅผ ์ด์šฉํ•˜๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋„ ํ”„๋กœ์„ธ์Šค์— ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ ํ•˜๋‚˜์˜ ์ด์œ ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๊ทธ๋Ÿฌ๋ฉด ์•ˆ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋„ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋™์‹œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿชฃ ์ปจํ…Œ์ด๋„ˆ

์ปจํ…Œ์ด๋„ˆ๋Š” foreground์— ์‹คํ–‰๋˜์–ด์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์œผ๋ฉด ์ž‘๋™์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด ๊ฐ€์žฅ ์ฃผ์˜ํ•  ์ ์ž…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ผ๋‹จ ์‹คํ–‰์‹œํ‚จ ํ›„ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ ‘์†ํ•ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๋‚˜ background์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘๋™์‹œํ‚ค๋ ค๋Š” ๊ฒฝ์šฐ ๋ชจ๋‘ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘ํ•˜์ž๋งˆ์ž ์ •์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•œ ์‹œ์ž‘ ๋ช…๋ น์–ด(entrypoint์™€ cmd ์ฐธ๊ณ )๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘์‹œ์ผœ์•ผํ•ฉ๋‹ˆ๋‹ค.
์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ญ์ œ๋˜๋Š” ๊ฒฝ์šฐ, ๋„์ปค ๋ณผ๋ฅจ์„ ํ†ตํ•ด ์ €์žฅ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๊ฐ„ํ˜น ํ•œ ์ปจํ…Œ์ด๋„ˆ์— ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋Š” ์ผ๋ฐ˜์ ์ธ ์„œ๋น„์Šค์˜ ์‚ฌ์šฉ๋ฒ•์€ ์•„๋‹ˆ์ง€๋งŒ ์ผํšŒ์„ฑ ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋ฅผ ์œ ์ง€์‹œํ‚ฌ ๋•Œ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—๋Š” ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๊ฐ€ pid 1๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

๐ŸŽ† ์ด๋ฏธ์ง€

์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์ด๋ฏธ์ง€์—๋Š” ๋ณดํ†ต ๋‹จ์ผ ์„œ๋น„์Šค๊ฐ€ ์„ค์น˜๋˜์–ด์„œ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ณ  ์ด๋ฏธ์ง€๋Š” ๋””์Šคํฌ์˜ ํŒŒ์ผ์ด๋ฏ€๋กœ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ์„ธ์Šค์™€ ์‹คํ–‰ํŒŒ์ผ์˜ ๊ด€๊ณ„์™€ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ด๋ฏธ์ง€์—๋Š” OS ๊ฐ€์ƒํ™”์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด์™€ ๊ทธ๋ฐ–์— ํ•„์š”ํ•œ ์„œ๋น„์Šค์˜ ์ •๋ณด์™€ ์„ค์ •๋“ค์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€๋Š” ๋‹ค์–‘ํ•œ linux OS๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ์„ค์น˜๋˜์ง€ ์•Š์€ ๊ฐ OS์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ์„ค์น˜๋œ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํ”ํžˆ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์€ Dockerfile์„ ํ†ตํ•ด ๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€์—์„œ Dockerfile์— ๊ธฐ์ˆ ๋œ ๋‹จ๊ณ„๋ฅผ ํ•˜๋‚˜ ํ•˜๋‚˜ ๊ฑฐ์ณ๊ฐ€๋ฉด์„œ ๋ชฉํ‘œ๋œ ์ด๋ฏธ์ง€๊นŒ์ง€ ๋นŒ๋“œ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ docker commit ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰๋˜์–ด์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด๋ฏธ์ง€ํ™”ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ์ด ๋ฐฉ๋ฒ•์€ ๋””๋ฒ„๊ทธ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿš› ๋ณผ๋ฅจ

์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ํŒŒ์ผ๋“ค ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚ด๋ถ€ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ปจํ…Œ์ด๋„ˆ์— ์ €์žฅ๋œ ํŒŒ์ผ์„ ์‰ฝ๊ฒŒ ๊ต์ฒดํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•ด๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚จ๊ธฐ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ๋ณผ๋ฅจ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณผ๋ฅจ์€ ํ˜ธ์ŠคํŠธ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ๋œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

๐Ÿ›ฐ ๋„คํŠธ์›Œํฌ

์ปจํ…Œ์ด๋„ˆ๋Š” ํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ์™€๋Š” ๋ณ„๊ฐœ๋กœ ์ž๊ธฐ ์ž์‹ ๋งŒ์˜ ip์™€ ํฌํŠธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ip์™€ ํฌํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ„์—๋Š” ์„œ๋กœ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋„์ปค ๋„คํŠธ์›Œํฌ๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค ๋„คํŠธ์›Œํฌ์—๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์ด DNS์— ๋“ฑ๋ก๋˜์–ด์žˆ์–ด ํŽธ๋ฆฌํ•˜๊ฒŒ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ ์„œ๋กœ ๊ณต์œ ํ•˜๋Š” ๋„คํŠธ์›Œํฌ๊ฐ€ ์—†๋Š” ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ๋Š” ํ†ต์‹ ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงฉ ๋„์ปค์˜ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋ช…๋ น์–ด

๊ฐ ๋ช…๋ น์–ด ์†Œ์ œ๋ชฉ์€ ๋„์ปค ๋ฌธ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

  • id
    ๋„์ปค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ์ฒด๋“ค ๋Œ€๋ถ€๋ถ„, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋ณผ๋ฅจ, ๋„คํŠธ์›Œํฌ ๋“ฑ์€ ๋žœ๋ค์œผ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ง€์ •๋œ ์ผ์ •ํ•œ ๊ธธ์ด์˜ id๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๊ณ ์œ ํ•œ ์ด๋ฆ„์œผ๋กœ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜๋„ ์žˆ์œผ๋‚˜, ์•„์ด๋””๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ, ์•„์ด๋”” ์ „๋ถ€๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ํ˜„์žฌ ๋„์ปค ๋‚ด๋ถ€์—์„œ ๊ตฌ๋ถ„๋˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œ๊ธธ์ด๋กœ ์•ž๋ถ€๋ถ„์„ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ํ˜„์žฌ ๋„์ปค ์ƒ์— 1๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•˜๋‚˜ ๋ฐ–์— ์—†๋‹ค๋ฉด ํ•œ ๊ธ€์ž๋งŒ์œผ๋กœ๋„ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽ† ์ด๋ฏธ์ง€

Docker์˜ ์ด๋ฏธ์ง€ ๋ฐฐํฌ๋Š” ๋„์ปค ํ—ˆ๋ธŒ๋ฅผ ์ด์šฉํ•ด์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. github์˜ ๋„์ปค ๋ฒ„์ „์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์˜ id๋Š” ์ƒ์„ฑ์‹œ ์ •ํ•ด์ง€๋ฉฐ, ์—…๋กœ๋“œ๋‚˜ ๋‹ค์šด๋กœ๋“œ ๋˜์–ด๋„ ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„์ปค ํ—ˆ๋ธŒ์—์„œ ํ•„์š”ํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” docker pull ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]

pull ๋ช…๋ น์–ด์— ๋ฐ˜๋“œ์‹œ ๋ช…์‹œ๋˜์–ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์€ ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์ธ NAME์ž…๋‹ˆ๋‹ค. ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€์ธ ๊ฒฝ์šฐ์—๋Š” OS์˜ ์ด๋ฆ„์ด, ์„œ๋น„์Šค ์ด๋ฏธ์ง€์ธ ๊ฒฝ์šฐ์—๋Š” ์„œ๋น„์Šค์˜ ์ด๋ฆ„์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
[TAG|@DIGEST]๋Š” ํ•ด๋‹น ์ด๋ฏธ์ง€์˜ ๋ฒ„์ „์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ OS๋‚˜ ์„œ๋น„์Šค๋„ ๋ฒ„์ „์— ๋”ฐ๋ผ ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…์‹œ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ตœ์‹ ์˜ ์•ˆ์ •ํ™” ๋ฒ„์ „์„ ๋œปํ•˜๋Š” ํƒœ๊ทธ์ธ :latest๊ฐ€ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค. latest ํƒœ๊ทธ๊ฐ€ ์ตœ์‹ ์˜ ์•ˆ์ •ํ™” ๋ฒ„์ „์„ ๋”ฐ๋ผ์„œ ๋ฐ”๋€Œ๋“ฏ์ด ํƒœ๊ทธ๊ฐ€ ๋œปํ•˜๋Š” ์ด๋ฏธ์ง€๋Š” ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋Š” ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ •ํ•ด์ง€๋Š” sha256 ๊ฐ’์„ ํ†ตํ•ด์„œ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์‹๋ณ„์ž๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. [@DIGEST]์˜ ๊ฒฝ์šฐ๋Š” ์ด ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์ด๋ฏธ์ง€๋Š” latest, ํ˜น์€ lts๊ฐ€ ๋ถ™์ง€ ์•Š์€ ํƒœ๊ทธ์˜ ๊ฒฝ์šฐ ๊ฑฐ์˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํƒœ๊ทธ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

TAG๋Š” ํ•œ ์ด๋ฏธ์ง€์— ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ, ์ด ์ด๋ฏธ์ง€๋“ค์˜ ์•„์ด๋””๋Š” ๋ชจ๋‘ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํ”„๋กœ์ ํŠธ์— latest ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ถ”์ฒœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. latest ์ด๋ฏธ์ง€๋Š” ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ˜„์žฌ latest์— ํ•ด๋‹นํ•˜๋Š” ๋ฒ„์ „ ์ด๋ฆ„์˜ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
[OPTIONS]์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. --quite, -q ์˜ต์…˜์€ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ ๋‚˜์˜ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ๊ธฐํƒ€ ์˜ต์…˜์— ๋Œ€ํ•ด์„œ๋Š” ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”.

$ docker images [OPTIONS] [REPOSITORY[:TAG]]
$ docker image ls [OPTIONS] [REPOSITORY[:TAG]]

๋‘ ๋ช…๋ น์–ด๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ ๋ฐ›์•„์˜จ ์ด๋ฏธ์ง€์˜ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์…˜์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ docker rmi [OPTIONS] IMAGE [IMAGE...]
$ docker image rm [OPTIONS] IMAGE [IMAGE...]

docker rmi๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.
ํ˜„์žฌ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฏธ์ง€๋Š” ์ œ๊ฑฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ œ๊ฑฐํ•˜๊ณ ์‹ถ๋‹ค๋ฉด -f, --force ์˜ต์…˜์„ ์จ์•ผํ•ฉ๋‹ˆ๋‹ค.

  • docker image ๊ทธ ๋ฐ–์˜ ์ด๋ฏธ์ง€์™€ ๊ด€๋ จ๋œ ๋ช…๋ น์–ด๋Š” docker image์˜ ํ•˜์œ„ ๋ช…๋ น์–ด์˜ ๋ชฉ๋ก์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿชฃ ์ปจํ…Œ์ด๋„ˆ

$ docker ps [OPTIONS]

์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ํ”„๋กœ์„ธ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ps ๋ช…๋ น์–ด๋ฅผ ๋”ฐ์„œ ์ง€์–ด์กŒ์Šต๋‹ˆ๋‹ค.
์ด ๋ช…๋ น์–ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜„์žฌ ์ž‘๋™์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์˜ ์ •๋ณด๋“ค์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. -a์˜ต์…˜์„ ํ†ตํ•ด ๋ฉˆ์ถฐ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๊นŒ์ง€๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ฐ–์˜ ์˜ต์…˜์€ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”. ๋ณด์—ฌ์ฃผ๋Š” ์ •๋ณด๋“ค์€ CONTAINER ID, IMAGE, COMMAND, CREATED, STATUS, PORTS, NAMES์ž…๋‹ˆ๋‹ค.

  • CONTAINER ID๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๋ถ€์—ฌ๋œ ๊ณ ์œ  ID์ž…๋‹ˆ๋‹ค.

  • IMAGE๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค.

  • COMMAND๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋œ ์ปค๋งจ๋“œ์ž…๋‹ˆ๋‹ค. docker run ๋ช…๋ น์–ด์™€ Dockerfile์˜ CMD์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • STATUS๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ž‘๋™ ์ค‘์ด๋ผ๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜๊ฑฐ๋‚˜ ์žฌ์‹œ์ž‘๋˜๊ณ  ๋‚˜์„œ ํ˜„์žฌ๊นŒ์ง€์˜ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • PORTS๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ˜ธ์ŠคํŠธ(๋„์ปค๋ฅผ ์ž‘๋™์ค‘์ธ ์ปดํ“จํ„ฐ)์— ๋…ธ์ถœ๋œ ํฌํŠธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ์•ž์„œ ๋งํ–ˆ๋“ฏ ํ˜ธ์ŠคํŠธ์™€ ๋ณ„๊ฐœ์˜ ํฌํŠธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด ํฌํŠธ๋Š” ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ์— ํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ localhost ๋˜๋Š” ํ˜ธ์ŠคํŠธ์˜ ip์ฃผ์†Œ์™€ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ์˜ ํ•ด๋‹น ํฌํŠธ๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • NAMES๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์€ ๋„์ปค์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹๋ณ„ํ•  ๋•Œ, ๋„์ปค ๋„คํŠธ์›Œํฌ์˜ DNS์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ๐Ÿƒ docker run

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • docker run ๋ช…๋ น์–ด๋Š” ์ด๋ฏธ์ง€์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋„์ปค์˜ ํ•ต์‹ฌ์ ์ธ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ช…๋ น์–ด์™€ ์ปค๋งจ๋“œ์— ๋น„ํ•ด ๊ต‰์žฅํžˆ ๋งŽ์€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์ฃผ ์“ฐ๋Š” ์˜ต์…˜๋งŒ ๋‚˜์—ดํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • --attach ARG, -a: -d ์˜ต์…˜๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ ํ„ฐ๋ฏธ๋„์„ ์ปจํ…Œ์ด๋„ˆ์˜ ํ‘œ์ค€์ž…๋ ฅ์ด๋‚˜ ํ‘œ์ค€์ถœ๋ ฅ, ํ‘œ์ค€์˜ค๋ฅ˜์— ์—ฐ๊ฒฐ์‹œํ‚ต๋‹ˆ๋‹ค. [arg]๋กœ stdin, stdout, stderr๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ‘œ์ค€ ์ถœ๋ ฅ๊ณผ ํ‘œ์ค€ ์—๋Ÿฌ๊ฐ€ ํ„ฐ๋ฏธ๋„๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

  • --detach, -d: -a ์˜ต์…˜๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์˜ ํ‘œ์ค€์ถœ๋ ฅ์ด๋‚˜ ํ‘œ์ค€์˜ค๋ฅ˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋‚˜ docker logs ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • --entrypoint ARG: ์ด๋ฏธ์ง€์˜ entrypoint๋ฅผ ๋ฎ์–ด์”Œ์›๋‹ˆ๋‹ค. entrypoint๋Š” ์ด๋ฏธ์ง€๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. [COMMAND]๋Š” entrypoint์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

  • --env KEY=VALUE, -e: ์ปจํ…Œ์ด๋„ˆ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • --env-file: ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ชฉ๋ก์ด ๋“ค์–ด์žˆ๋Š” env-file์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ .env์ž…๋‹ˆ๋‹ค.

  • --expose HOST_PORT:CONTAINER_PORT, -p: ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ๋ฅผ ๋…ธ์ถœ์‹œํ‚ต๋‹ˆ๋‹ค. -p host-port-number:container-port-number๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • --interactive, -i: ์ปจํ…Œ์ด๋„ˆ์˜ stdin์„ ์—ด์–ด๋†“์Šต๋‹ˆ๋‹ค. -d ๋ช…๋ น์–ด์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์œผ๋‚˜ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต -t์˜ต์…˜๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • --name NAME: ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ž„์˜์˜ ๋‹จ์–ด ์กฐํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

  • --network NETWORK: ์„ ์–ธ๋œ ๋„์ปค ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • --restart POLICY: ๋„์ปค๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์žฌ์‹œ์ž‘ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. on-failure[:max-retries], unless-stopped, always, no์˜ POLICY๊ฐ€ ์žˆ๊ณ , ๊ธฐ๋ณธ๊ฐ’์€ no์ž…๋‹ˆ๋‹ค.

  • --rm: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

  • --tty, -t: pseudo-tty๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์˜ stdin์ด ์—ด๋ ค์žˆ๋‹ค๋ฉด ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ์— ๋ช…๋ น์–ด๋ฅผ ์จ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ -i ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • --volume VOLUME_DECLARE..., -v: ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณผ๋ฅจ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. docker volume ํŒŒํŠธ์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.

  • --volumes-from CONTAINER: ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ ๋ณผ๋ฅจ์„ ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค.

  • --workdir DIR, -w: ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ entrypoint๋‚˜ cmd๊ฐ€ ์‹คํ–‰๋  ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค.

  • ๐Ÿง‘โ€๐Ÿ”ง docker build

$ docker build [OPTIONS] PATH | URL | -

๋„์ปคํŒŒ์ผ๊ณผ ์ปจํ…์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. Dockerfile ํ•ญ๋ชฉ์—์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž‘๋™์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ช…๋ ์–ด์ž…๋‹ˆ๋‹ค.

$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

์˜ต์…˜์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ๋ชจ๋‘ docker run์— ์žˆ๋Š” ์˜ต์…˜๋“ค์ž…๋‹ˆ๋‹ค. --detach, -d ์˜ต์…˜, --env, -e ์˜ต์…˜, --env-file ์˜ต์…˜, --interactive, -i ์˜ต์…˜, --tty, -t ์˜ต์…˜, --workdir, -w ์˜ต์…˜ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…์€ docker run ํ•ญ๋ชฉ์ด๋‚˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ด์ฃผ์„ธ์š”.

$ docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
$ docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

docker container cp์™€ docker cp ๋ช…๋ น์–ด๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ํ˜ธ์ŠคํŠธ๋กœ, ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™์‹œํ‚ค๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ๋„์ปค ๋‚ด๋ถ€ ํ”„๋กœ๊ทธ๋žจ์„ ๋””๋ฒ„๊น…ํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ ํŒŒ์ผ์„ ๊บผ๋‚ผ ๋•Œ ์œ ์šฉํ•œ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.
docker container cp๋ช…๋ น์€ CONTAINER:SRC_PATH๊ฒฝ๋กœ์˜ ํด๋”/ํŒŒ์ผ์„ DEST_PATH, ํ˜น์€ stdout / tar archive ํŒŒ์ผ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. docker cp๋ช…๋ น์€ ๋ฐ˜๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆ ๋ฐ–์˜ SRC_PATH๊ฒฝ๋กœ, ํ˜น์€ stdin / tar archive ํŒŒ์ผ์„ CONTAINER:DEST_PATH๊ฒฝ๋กœ๋กœ ๋ณต์‚ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. --follow-link, -L๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด SRC_PATH์˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

$ docker logs [OPTIONS] CONTAINER

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋กœ๊ทธ๋ฅผ ํ„ฐ๋ฏธ๋„์— ๋„์›๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ๋ถ€ํ„ฐ ํ˜„์žฌ๊นŒ์ง€์ด๋ฉฐ, ์˜ต์…˜์œผ๋กœ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
--follow, -f์˜ต์…˜์€ ์ปจํ…Œ์ด๋„ˆ์˜ stdout๊ณผ stderr๋ฅผ ํ„ฐ๋ฏธ๋„์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. --tail, -n ์˜ต์…˜์€ ํ•˜๋‚˜์˜ ์–‘์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ๊ฐ€์ง€๋ฉฐ, ๋งˆ์ง€๋ง‰ n๊ฐœ์˜ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

$ docker rm [OPTIONS] CONTAINER [CONTAINER...]

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์ง€๋œ ์ปจํ…Œ์ด๋„ˆ๋งŒ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ --force, -f์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ๊ฐ€๋™ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋„ ์ค‘์ง€ ํ›„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --volumes, -v ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ง€์›Œ์งˆ ์ปจํ…Œ์ด๋„ˆ์— ๋ถ™์–ด์žˆ๋Š” ์ต๋ช… ๋ณผ๋ฅจ์„ ํ•œ ๋ฒˆ์— ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„์ปค ๋ณผ๋ฅจ์˜ ์‚ฌ์šฉ ๋ฐฉ์‹์—๋Š” ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ๋„์ปค ๋ณผ๋ฅจ, ๋‘ ๋ฒˆ์งธ๋Š” ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ, ์„ธ ๋ฒˆ์งธ๋Š” ๋ณผ๋ฅจ ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.
๋„์ปค ๋ณผ๋ฅจ์€ ๋„์ปค ๋‚ด๋ถ€์˜ ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ, ์ด ๊ฒฝ๋กœ๋Š” ๋‹จ์ผ ํŒŒ์ผ์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. docker run ๋ช…๋ น์–ด ์‹คํ–‰ ์‹œ์— -v ๋’ค์— ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋ถ™์—ฌ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ, ๋„์ปค๋Š” ์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ์ž„์˜์˜ ์ด๋ฆ„์„ ๋ณผ๋ฅจ์— ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค. ์ด ์ด๋ฆ„์€ docker volume ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ์ง์ ‘ ์ง€์ •ํ•ด์ค„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ๋Š” -v NAME:CONTAINER_PATH ํ˜•์‹์œผ๋กœ ์˜ต์…˜์„ ์„ ์–ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
์ด ๋ฐฉ์‹์œผ๋กœ ๋ณผ๋ฅจ์„ ์„ ์–ธํ•˜๊ฒŒ ๋˜๋ฉด, ๋„์ปค๋Š” ํ˜ธ์ŠคํŠธ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ์–ด๋”˜๊ฐ€์— ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ง€์ •๋œ ํด๋”๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์‹ ์— ํ•ด๋‹น ๋””์Šคํฌ ๊ณต๊ฐ„์„ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋Š” ํ˜ธ์ŠคํŠธ์˜ ๊ฒฝ๋กœ์™€ ๋„์ปค ๋‚ด๋ถ€์˜ ํŒŒ์ผ์„ ์„ ์–ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํŒŒ์ผ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๊ฐ€ ๋””๋ ‰ํ† ๋ฆฌ๋ฉด ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์–ด ๋งˆ์šดํŠธ๋ฉ๋‹ˆ๋‹ค. -v HOST_PATH:CONTAINER_PATH์˜ ํ˜•ํƒœ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , HOST_PATH๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋‘˜ ๋‹ค ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์‹œ์Šคํ…œ ๋””๋ ‰ํ† ๋ฆฌ์ผ ๊ฒฝ์šฐ๋‚˜, ๊ธฐํƒ€ ์ด์œ ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ˆ˜์ •ํ•˜๊ธธ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ฝ๊ธฐ์ „์šฉ ์˜ต์…˜์„ ๋ถ™์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. -v /etc/localtime:/etc/localtime:ro์™€ ๊ฐ™์ด ๋งˆ์ง€๋ง‰์— :ro๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋ณผ๋ฅจ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธ ๋˜์–ด์žˆ๋Š” ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. --volumes-from CONTAINER_NAME๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋งˆ์šดํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋™์ผํ•˜๊ฒŒ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ๋ณผ๋ฅจ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

docker volume ํ•˜์œ„ ๋ช…๋ น์–ด์˜ ๊ฐ„๋žตํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

  • docker volume create VOLUME
    • ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋„์ปค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • docker volume ls [OPTIONS]
    • ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์กด์žฌํ•˜๋Š” ๋ณผ๋ฅจ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • --quiet, -q ์˜ต์…˜์„ ํ†ตํ•ด ๋ณผ๋ฅจ ID๋งŒ์„ ์ถœ๋ ฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • docker volume prune [OPTIONS]
    • ์–ด๋– ํ•œ ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ๋„ ์‚ฌ์šฉ๋˜๊ณ ์žˆ์ง€ ์•Š์€ ๋ชจ๋“  ๋ณผ๋ฅจ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    • -f ์˜ต์…˜์œผ๋กœ ํ™•์ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šฐ์ง€ ์•Š๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • docker volume rm [OPTIONS] VOLUME [VOLUME...]
    • ์‚ฌ์šฉ ์ค‘์ด์ง€ ์•Š์€ ๋ณผ๋ฅจ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    • --force, -f ๋ช…๋ น์–ด๋กœ ์‚ฌ์šฉ ์ค‘์ธ ๋ณผ๋ฅจ๋„ ๊ฐ•์ œ๋กœ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ›ฐ ๋„คํŠธ์›Œํฌ

๋„์ปค์˜ ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ๊ฐ€์ƒํ™”๋œ OS๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ํฌํŠธ์™€ DNS ๋“ฑ์ด ํ˜ธ์ŠคํŠธ์™€๋Š” ๋ณ„๊ฐœ๋กœ ์„ค์ •๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์„ ํ•œ๋ฐ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋„์ปค ๋„คํŠธ์›Œํฌ์ž…๋‹ˆ๋‹ค. ๋„์ปค ๋„คํŠธ์›Œํฌ๋Š” ๋“œ๋ผ์ด๋ธŒ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋Š” bridge, host, ipvlan ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

bridge ๋“œ๋ผ์ด๋ฒ„๋Š” ๊ธฐ๋ณธ ๋“œ๋ผ์ด๋ฒ„๋กœ, ์•„๋ฌด ๋“œ๋ผ์ด๋ฒ„๋„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด bridge ๋“œ๋ผ์ด๋ฒ„๋กœ ์„ค์ •์ด ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ bridge ๋„คํŠธ์›Œํฌ์— ํฌํ•จ๋œ ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ์„œ๋กœ๊ฐ„์— ์ง์ ‘์ ์ธ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ bridge ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
host ๋“œ๋ผ์ด๋ฒ„๋Š” ํ˜ธ์ŠคํŠธ์™€์˜ ๋„คํŠธ์›Œํฌ ๋ถ„๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๊ณ , ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฆ‰๊ฐ์ ์œผ๋กœ ํ˜ธ์ŠคํŠธ์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
ipvlan ๋“œ๋ผ์ด๋ฒ„๋Š” ์œ ์ €๊ฐ€ IPv4์™€ IPv6์˜ ์ฃผ์†Œ ๊ด€๋ฆฌ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋“œ๋ผ์ด๋ฒ„์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฐ–์— macvlan, overlay ๋“ฑ์˜ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์žˆ๊ณ , ์„œ๋“œํŒŒํ‹ฐ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋“œ๋ผ์ด๋ฒ„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
none์œผ๋กœ ์„ค์ •ํ•˜์—ฌ, ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์™ธ๋ถ€์™€ ๋„คํŠธ์›Œํฌํ•˜์ง€ ์•Š๊ฒŒ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ถ„๋ฆฌ์‹œ์ผœ๋‘˜ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

docker network ํ•˜์œ„ ๋ช…๋ น์–ด์˜ ๊ฐ„๋žตํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

  • docker network create [OPTIONS] NETWORK
    • NETWORK์˜ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์˜ต์…˜์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด bridge ๋„คํŠธ์›Œํฌ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • --driver DRIVER, -d ๋„คํŠธ์›Œํฌ์˜ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ต์…˜๋“ค์ด ์žˆ์œผ๋ฉฐ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
  • docker network ls [OPTIONS]
    • ๋„์ปค ๋„คํŠธ์›Œํฌ์˜ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
    • -quiet, -q์˜ ์˜ต์…˜์„ ์ฃผ๋ฉด ID๋งŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • docker network prune [OPTIONS]
    • ๋‹จ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋„ ์“ฐ์ด์ง€ ์•Š๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    • -f ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ™•์ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • docker network rm NETWORK [NETWORK...]
    • ๋„์ปค ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    • -f ์˜ต์…˜์ด ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ“„ Dockerfile

๋„์ปค๋ฅผ ํ†ตํ•ด์„œ ์„œ๋น„์Šค๋ฅผ ๋„์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋ฏธ์ง€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค ํ—ˆ๋ธŒ์— ์˜ฌ๋ผ์™€ ์žˆ๋Š” ์ด๋ฏธ์ง€๋กœ ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ๋„ ๋Œ€๋ถ€๋ถ„์ด์ง€๋งŒ ์ง์ ‘ ์ด๋ฏธ์ง€๋ฅผ ์ œ์ž‘ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํŽธํ•œ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฒ ์ด์Šค๊ฐ€ ๋˜๋Š” ์ด๋ฏธ์ง€์— ์ถ”๊ฐ€ ์ž‘์—…์„ ํ•ด์„œ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ์ž‘์—…์— ์ด์šฉ๋˜๋Š” ๊ฒƒ์ด Dockerfile์ž…๋‹ˆ๋‹ค.

Dockerfile์„ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋นŒ๋“œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ docker build PATH_TO_DOCKERFILE ๋ช…๋ น์–ด๋กœ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ต์…˜์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ „์—, ์ด๋ฏธ์ง€์˜ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€๋Š” ๋ฒ ์ด์Šค๊ฐ€ ๋˜๋Š” OS ์ด๋ฏธ์ง€์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•˜์—ฌ ์™„์„ฑ๋œ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด๋‚ธ ๊ฒƒ์ธ๋ฐ, ์ด ์ž‘์—…, ์ฆ‰ ๋ช…๋ น์–ด๋“ค์˜ ๋ชฉ๋ก์€ ๊ฐ๊ฐ ๋ ˆ์ด์–ด๋ผ๋Š” ํ˜•ํƒœ๋กœ ์Œ“์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‘ ์ด๋ฏธ์ง€๊ฐ€ ์ค‘๊ฐ„๊นŒ์ง€ ๊ฐ™์€ ๊ณผ์ •์˜ ์ž‘์—…์„ ๊ฑฐ์ณค๋‹ค๋ฉด, ๋‘ ์ด๋ฏธ์ง€๋Š” ๋”ฐ๋กœ๋”ฐ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ค‘๊ฐ„๊นŒ์ง€์˜ ์ƒ์„ฑ ๊ณผ์ •์„ ๋™์ผํ•œ ๋ ˆ์ด์–ด๋กœ ๊ณต์œ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ƒ์„ฑ ๊ณผ์ •์ด ๊ฒน์น˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ํ—ˆ๋ธŒ์—์„œ ๋‹ค์šด๋ฐ›๋Š”๋‹ค๊ณ  ํ•˜๋ฉด, ์ด๋ฏธ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๋ ˆ์ด์–ด๋Š” ๋‹ค์šด๋ฐ›์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
Dockerfile๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ด ์ ์— ์œ ์˜ํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณตํ†ต๋˜๋Š” ๊ณผ์ •์„ ์ด๋ฏธ์ง€๋กœ ๋จผ์ € ๋งŒ๋“ค์–ด๋‘๊ฑฐ๋‚˜, ๊ณตํ†ต๋œ ๊ณผ์ •์„ ๊ฑฐ์น˜๋„๋ก ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด ๋ ˆ์ด์–ด๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋˜์–ด ์ด๋ฏธ์ง€ ์ €์žฅ ๊ณต๊ฐ„, ๋นŒ๋“œ ์†๋„์˜ ์ด์ ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ฐ„๋‹จํ•œ Dockerfile์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ๋‚ด์šฉ์„ ์ดํ•ดํ•  ํ•„์š” ์—†์ด ๊ฐ ์ค„์— ๋Œ€๋ฌธ์ž๋กœ ์“ฐ์ธ ์ฒซ ๋‹จ์–ด์ธ intruction๋ฅผ ์ดํ•ดํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค. Dockerfile์€ '#'๋กœ ์ฃผ์„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

FROM node:16                          # node:16 ์ด๋ฏธ์ง€๋ฅผ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

WORKDIR /app                          # ๋ช…๋ น๋“ค์„ ์‹คํ–‰ํ•  ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ENV PATH /app/node_modules/.bin:$PATH # ์ด๋ฏธ์ง€ ๋‚ด ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

COPY . .                              # host์˜ .๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ์„ ์ด๋ฏธ์ง€ ๋‚ด์˜ .๋””๋ ‰ํ† ๋ฆฌ ํด๋”๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. .dockerignore๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ œ์™ธ์‹œํ‚ต๋‹ˆ๋‹ค.
RUN npm i                             # ํ˜„์žฌ WORKDIR์—์„œ npm i๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ENTRYPOINT ["./entrypoint.sh"]        # ์ด๋ฏธ์ง€๊ฐ€ ๊ตฌ๋™๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด์ธ entrypoint๋ฅผ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.
CMD ["run", "start:dev"]              # entrypoint์˜ ์ธ์ž๊ฐ€ ๋˜๋Š” cmd๋ฅผ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.

๊ฐ instruction์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค layer๊ฐ€ ์ƒ์„ฑ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ™… .dockerignore

์ด๋ฏธ์ง€ ๋‚ด๋ถ€๋กœ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ๋•Œ ๋ณต์‚ฌ๋˜๊ธธ ์›ํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. git์˜ .gitignore๊ณผ ๋น„์Šทํ•˜๊ฒŒ .dockerignoreํŒŒ์ผ์— ๋ณต์‚ฌ๋˜๊ธธ ์›ํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ๊ณผ ํด๋”์˜ ๋ชฉ๋ก์„ ๋„ฃ์–ด๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ Dockerfile ์ž์ฒด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘ฃ instruction

Dockerfile์„ ๊ตฌ์„ฑํ•˜๋Š” instruction์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  • FROM <image>:<tag>
    • Dockerfile์— ํ•„์ˆ˜์ ์ธ instruction์ž…๋‹ˆ๋‹ค.
    • ๋ฒ ์ด์Šค๋กœ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ํƒœ๊ทธ๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉด lastest ํƒœ๊ทธ๊ฐ€ ์ž๋™์œผ๋กœ ์„ ํƒ๋˜๋ฉฐ, ๋กœ์ปฌ์— ์ด๋ฏธ์ง€๊ฐ€ ์—†์œผ๋ฉด docker hub์—์„œ ์ž๋™์œผ๋กœ ๋ฐ›์•„์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • LABEL <key>=<value>
    • ํ‚ค์™€ ๊ฐ’ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ๋‚ด์šฉ์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ
  • WORKDIR /path/to/workdir
    • RUN์ด๋‚˜ COPY๊ฐ™์€ intruction์„ ์‹คํ–‰ํ•  ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • RUN <command>
  • RUN ["executable", "param1", "param2"]
    • <command> ๋˜๋Š” executable param1 param2๋ฅผ ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ ''์—์„œ ์‹คํ–‰๋˜๋ฉฐ, 'WORKDIR'์ด ์„ค์ •๋˜์–ด์žˆ๋‹ค๋ฉด ๊ทธ๊ณณ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • \๋กœ ์ปค๋งจ๋“œ ์ƒ์—์„œ ์ค„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ENTRYPOINT ["executable", "param1", "param2"] - 'exec' form
  • ENTRYPOINT <command> - 'shell' form
    • ์ด๋ฏธ์ง€๊ฐ€ ์ปจํ…Œ์ดํ„ฐ๋กœ ๋„์›Œ์งˆ ๋•Œ ์ตœ์ดˆ๋กœ ์‹คํ–‰๋  ๋ช…๋ น์–ด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • 'CMD'๋‚˜ docker run์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด๋Š” entrypoint์˜ ์ธ์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
    • entrypoint๊ฐ€ ์—†์œผ๋ฉด 'CMD'๋‚˜ docker run์— ์ง€์ •๋œ ๋ช…๋ น์–ด๊ฐ€ ์ตœ์ดˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • cmd์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ์„œ๋Š” ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • CMD ["executable","param1","param2"] - entrypoint๊ฐ€ ์—†์„ ๋•Œ
  • CMD ["param1", "param2"] - entrypoint๊ฐ€ ์žˆ์„ ๋•Œ
  • CMD <command> - 'shell' form
    • docker run์— cmd๊ฐ€ ์—†์„ ์‹œ์˜ ๊ธฐ๋ณธ ์ปค๋งจ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • entrypoint์™€๋Š” ๋‹ฌ๋ฆฌ ๋ช…๋ น์–ด๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • COPY [--chown=<user>:<group>] <src>... <dest>
  • COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
    • [--chown]๋ถ€๋ถ„์€ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์œ ์ €์™€ ๊ทธ๋ฃน์˜ ์†Œ์œ ์ž๋กœ ๋””๋ ‰ํ† ๋ฆฌ์™€ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ•œ ๋ฒˆ์— dest ๋””๋ ‰ํ† ๋ฆฌ(ํ˜น์€ ํŒŒ์ผ)๋กœ ์˜ฎ๊ฒจ์ค๋‹ˆ๋‹ค.
  • ADD [--chown=<user>:<group>] <src>... <dest>
  • ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
    • COPY์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • <src>์— url์ด๋‚˜ tarํŒŒ์ผ์ด ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ENV <key>=<value> ...
    • ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋งŒ๋“ค์–ด์ง„ ์ปจํ…Œ์ด๋„ˆ์—๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์ƒ์†๋ฉ๋‹ˆ๋‹ค.
  • ARG <name>[=<default value>]
    • Dockerfile ๋นŒ๋“œ ๊ณผ์ •์—์„œ๋งŒ ์‚ฌ์šฉ๋  ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • docker build --build-arg <name>=<value>๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋นŒ๋“œ ์‹œ ๊ฐ’์„ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์™„์„ฑ๋œ ์ด๋ฏธ์ง€์— ๊ฐ’์ด ๋‚จ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • EXPOSE <port> [<port>/<protocol>...]
    • ๋งŒ๋“ค์–ด์งˆ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ๋ฅผ ๋…ธ์ถœ์‹œํ‚ต๋‹ˆ๋‹ค.
    • ์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ docker run -p <port>:<port>/protocol> ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค ๋•Œ ๋…ธ์ถœ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ™ docker-compose

โš ๏ธ **GitHub.com Fallback** โš ๏ธ