TIL 64: [๋ฐฐํฌ] Docker

์˜ค๋Š˜์€ Docker๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์•ˆ์— ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์„ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” AMI์—์„œ Image ์ •๋„๋งŒ ์ ‘ํ–ˆ์–ด์„œ ์ด๋ฏธ์ง€๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์ฝ์œผ๋ฉด ์‚ฌ์ง„์„ ๋จผ์ € ๋– ์˜ฌ๋ ธ์—ˆ๋Š”๋ฐ, ์‹ค์Šต๊นŒ์ง€ ํ•˜๋‹ˆ ์ด์ œ ์ด๋ฏธ์ง€๋ฅผ ์ฝ์œผ๋ฉด ๋จผ์ € ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ๋– ์˜ฌ๋ฆฌ๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ๐Ÿ˜Š

 

์ปจํ…Œ์ด๋„ˆ

์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์˜์กด์„ฑ, ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ, ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์ด ์‹คํ–‰ํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ , ๋„์ปค๋ผ๋Š” ๊ธฐ์ˆ  ์œ„์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์ž์ž…๋‹ˆ๋‹ค.

 

์ปจํ…Œ์ด๋„ˆ ๋ฐฉ์‹์˜ ์žฅ์ 

์˜์กด์„ฑ ์ถฉ๋Œ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ปจํ…Œ์ด๋„ˆ๋Š” ํ”„๋กœ์„ธ์Šค, ๋„คํŠธ์›Œํฌ, ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๊ฒฉ๋ฆฌํ•˜๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค. 

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

๋„คํŠธ์›Œํฌ๋Š” ๊ธฐ๋ณธ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ํ•˜๋‚˜์— ํ•œ์˜ IP ์ฃผ์†Œ๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ๊ตฌํšํ™” ๋˜์–ด์žˆ์–ด ์ปจํ…Œ์ด๋„ˆ์—์„œ์˜ ๋ช…๋ น์ด๋‚˜ ํŒŒ์ผ ๋“ฑ์˜ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ€์ƒ๋จธ์‹ (Virtual Machine, VM)๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. VM์€ ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ ์œ„์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ์ปดํ“จํ„ฐ๊ฐ€ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค, ๋„คํŠธ์›Œํฌ, ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๊ฒฉ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์€ ์ปจํ…Œ์ด๋„ˆ์™€ ๋™์ผํ•˜์ง€๋งŒ, VM์€ ๋งŒ๋“ค๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋งŽ์€ ์ปดํ“จํŒ… ์ž์›์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ VM์œ„์— ์šด์˜์ฒด์ œ๋ฅผ ๋ฐ˜๋“œ์‹œ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, Docker๋Š” ํ•œ ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์›Œ๋„ ํฌ๊ฒŒ ์ปดํ“จํ„ฐ์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Docker Image๋Š” ์ฃผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฐธ๊ณ ๋กœ AMI๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ VM์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. 

VM์—์„œ์˜ Hypervisor์˜ ์˜ˆ์‹œ๋กœ๋Š” VMware, VirtualBox, Hyper-V ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฐœ๋ฐœ๊ณผ ๋ฐฐํฌ ํ™˜๊ฒฝ ์ผ์น˜

OS์— ์ƒ๊ด€์—†์ด ์ฆ‰์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์„ ์ปจํ…Œ์ด๋„ˆ ์œ„์—์„œ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ, ๋ชจ๋“  ๊ฐœ๋ฐœํŒ€์ด ๋™์ผํ•œ ํ™˜๊ฒฝ ํ•˜์— ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ ๋˜ํ•œ ์„œ๋ฒ„๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ๋‹ด๊ธด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•จ์— ๋”ฐ๋ผ OS๊ฐ€ ๋‹ฌ๋ผ๋„ ์ž˜ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AWS์˜ EC2 ์ƒ์— ๋„์ปค๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜, ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ EC2 ์„œ๋ฒ„์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์„œ๋น„์Šค์ธ ECS๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ˆ˜ํ‰ ํ™•์žฅ ์šฉ์ด & ์ƒˆ๋กœ์šด ๋‚ด์šฉ์˜ ๋ฐฐํฌ

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

 

 

์ด๋ฏธ์ง€์™€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ

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

๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—๋Š” ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. Docker Hub, Amazon ECR ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์ปค CLI์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์ด์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ(๋กœ์ปฌ)์— ์ด๋ฏธ์ง€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊ธฐ๋ณธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๋‹ค์šด๋กœ๋“œ(pull)๋ฅผ ๋ฐ›๊ฒŒ๋ฉ๋‹ˆ๋‹ค. 

 

 

Docker CLI

docker image pull

docker image pull docker/whalesay:latest

์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Docker Hub์ด๋ผ๋Š” ๋ ˆ์ง€์Šคํ‹”์—์„œ docker๋ผ๋Š” ์œ ์ €๊ฐ€ ๋“ฑ๋กํ•œ whalesay ์ด๋ฏธ์ง€ ํ˜น์€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ latest ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง€ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.

 

docker container run [options]

docker container run --name ์ปจํ…Œ์ด๋„ˆ์ด๋ฆ„ docker/whalesay:latest cowsay boo~~~

์œ„์˜ ๋ช…๋ น์–ด๋Š” ๋ฐ›์•„์˜จ ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์ด๋ฆ„์„ ์ด๋ฆ„์œผ๋กœ ๊ฐ–๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๊ฐ€ ๋กœ์ปฌ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ž๋™์œผ๋กœ ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ(pull)๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ boo~~~๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ cowsay ๋ช…๋ น์–ด์— ๋„˜๊ฒจ์ฃผ์–ด ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์•„๋ž˜์™€ ๊ฐ™์ด boo~~~๊ฐ€ ์ถœ๋ ฅ๋˜๋ฉฐ ๊ณ ๋ž˜๋ชจ์–‘์ด ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•  ๋•Œ --rm ์˜ต์…˜์„ ๋„ฃ์–ด์ฃผ๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ผํšŒ์„ฑ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ค‘์ง€๋˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋  ๋•Œ, ์ปจํ…Œ์ด๋„ˆ์™€ ๊ด€๋ จ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด ๋งŒ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ์ด๋ฏธ์ง€๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

docker container run -it --rm danielkraic/asciiquarium:latest

์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆ˜์กฑ๊ด€์ด ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ -it๋Š” -i์™€ -t๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•œ ์˜ต์…˜์œผ๋กœ, ์‚ฌ์šฉ์ž์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ์ธํ„ฐ๋ ‰์…˜์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

 

 

 

์•ž์„œ ๋งํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๊ธฐ์กด์˜ ์ด๋ฏธ์ง€์— ์ปค๋ฐ‹/์ถ”๊ฐ€ํ•ด์„œ ๋˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์ด ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ์— ์ €์žฅ๋œ ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ด์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

docker container run --name ์ปจํ…Œ์ด๋„ˆ_์ด๋ฆ„ -p 818:80 httpd

httpd(http daemon)์ด๋ผ๋Š” ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ httpd๋Š” Apache HTTP Server๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค ์›น ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์ •์  ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. -p ์˜ต์…˜์€ ๋กœ์ปฌํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. 818ํฌํŠธ๊ฐ€ ๋กœ์ปฌํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ์ด๊ณ , 80๋ฒˆ์€ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ ํ›„ 127.0.0.1:818 ํ˜น์€ localhost:818์„ ํ†ตํ•ด ์›น์„œ๋ฒ„๊ฐ€ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

docker container cp

docker container cp ./ ์ปจํ…Œ์ด๋„ˆ_์ด๋ฆ„:/usr/local/apache2/htdocs/

์„œ๋ฒ„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์—ด๋ ค์žˆ๋‹ค๋ฉด ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ์•ž ๊ฒฝ๋กœ์˜ ํŒŒ์ผ์„ ๋’ค ๊ฒฝ๋กœ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

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

 

docker container commit

docker container commit ์ปจํ…Œ์ด๋„ˆ_์ด๋ฆ„ ์ด๋ฏธ์ง€_์ด๋ฆ„:ํƒœ๊ทธ
docker run --name ์ปจํ…Œ์ด๋„ˆ_์ด๋ฆ„ -p 900:80 ์ด๋ฏธ์ง€_์ด๋ฆ„:ํƒœ๊ทธ

์ฒซ๋ฒˆ์งธ ์ค„ ๋ช…๋ น์–ด์—์„œ์˜ commit์„ ํ™œ์šฉํ•˜์—ฌ ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด๋ฏธ์ง€๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋งŒ๋“  ์ด๋ฏธ์ง€๋ฅผ ๋‘๋ฒˆ์งธ ์ค„ ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค์–ด 900ํฌํŠธ๋กœ ๋กœ์ปฌํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

 

docker container build

docker build --tag ์ปจํ…Œ์ด๋„ˆ_์ด๋ฆ„ ์ด๋ฏธ์ง€_์ด๋ฆ„:ํƒœ๊ทธ
docker run --name ์ปจํ…Œ์ด๋„ˆ_์ด๋ฆ„ -p 901:80 ์ด๋ฏธ์ง€_์ด๋ฆ„:ํƒœ๊ทธ

build๋ฅผ ์ด์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด๋ฏธ์ง€๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

docker exec

dcker exec -it ์ปจํ…Œ์ด๋„ˆ_์ด๋ฆ„ bash

์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ bash shell์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. shell ์•ˆ์—์„œ nano ์—๋””ํ„ฐ๋ฅผ ํ™œ์šฉํ•ด์„œ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

docker-compose CLI

๋‘ ๊ฐœ ์ด์ƒ์˜ Docker Image๋ฅผ ๋‹ค๋ฃจ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € docker-compose.yaml ํŒŒ์ผ ์•ˆ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

version: '3.8'

services:
  nginx:
    image: sebcontents/client
    restart: 'always'
    ports:
      - "8080:80"
    container_name: client

  node:
    image: sebcontents/server
    restart: 'always'
    ports:
      - "5000:3000"
    container_name: server

์ดํ›„ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋“ค์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker-compose up -d #docker-compose.yaml์— ์ •์˜๋œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
docker-compose down #docker-compose.yaml์— ์ •์˜๋œ์ด๋ฏธ์ง€๋ฅผ ์ด์šฉํ•ด ์‹คํ–‰๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
docker-compose up {ํŠน์ •์ด๋ฏธ์ง€} #ํŠน์ • ์ด๋ฏธ์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.