์ค๋์ 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 {ํน์ ์ด๋ฏธ์ง} #ํน์ ์ด๋ฏธ์ง๋ง ์ปจํ
์ด๋๋ก ์คํํฉ๋๋ค.
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| TIL 66: C์ธ์ด - ์ถ๋ ฅ / ์ ๋ ฅ / ์ฐ์ฐ์ (0) | 2021.12.30 |
|---|---|
| TIL65: HA3 ํ๊ณ (4) | 2021.11.05 |
| TIL 63: [๋ฐฐํฌ] Amazon Web Service (0) | 2021.11.01 |
| TIL 62: [๋ฐฐํฌ] Amazon Web Service (0) | 2021.10.30 |
| TIL 60: [๋คํธ์ํฌ] ์ฌํ (0) | 2021.10.27 |