๋ฆฌ๋ ์ค ์ปจํ ์ด๋(Linux Container) ๊ธฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์คํ ์์ค ์๋น์ค. ๋์ปค๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์คํ ํ๊ฒฝ์ ์ฝ๋๋ก ์์ฑํ ์ ์์ผ๋ฉฐ, OS๋ฅผ ๊ฒฉ๋ฆฌํํ์ฌ ๊ด๋ฆฌํจ.
Linux ๊ธฐ๋ฐ์ ๊ธฐ์ ์ค ํ๋๋ก, ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ์์ ๋ง์น ๋ณ๋์ ์๋ฒ์ฒ๋ผ ๊ตฌ์ฑํ ๊ฒ์ ๋งํจ. ์ปจํ ์ด๋๋ฅผ ์ด๋ฃจ๋ ๋คํธ์ํฌ ์ค์ , ํ๊ฒฝ ๋ณ์ ๋ฑ์ ์์คํ ์์์ ๊ฐ ์ปจํ ์ด๋๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ํ๊ณ ์์.
๊ทธ๋ ๋ค๋ฉด ๋ฆฌ๋ ์ค ์ปจํ ์ด๋๋ ๊ธฐ์กด์ ์ด์ฉํด์ค๋ ๊ฐ์ ๋จธ์ ๊ณผ ๋น์ทํ์ง ์๋?
=> ๋น์ทํด ๋ณด์ผ ๋ฟ, ๊ฐ์ํ์๋ ๋ค๋ฅธ ๊ธฐ์ .
๋ฆฌ์์ค ๊ฒฉ๋ฆฌ์ฑ์ ์ ๊ณตํ๋ ๊ธฐ์ ๋ก๋ ๊ฐ์๋จธ์ , ๋์ปค ๋ฑ์ด ์์.
๊ฐ์ ๋จธ์ ๊ณผ ๋์ปค๋ ๊ฒฉ๋ฆฌ์ฑ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์
๋ง๋ค ๋ค๋ฅธ ์ปดํจํฐ์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ IP๋ Port ๋ฑ์ ๋ค๋ฅด๊ฒ ์ค์ ํ ์ ์์.
๊ทธ๋ ๋ค๋ฉด,
๋์ปค ์ปจํ
์ด๋์ ๋
๋ฆฝ์ ์ธ ํน์ง์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ผ์ดํ์ฌ์ดํด์ด ์์.
์ปจํ
์ด๋์ ์์ฑ, ์คํ, ์ข
๋ฃ์ ๊ณผ์ .
์ปจํ
์ด๋
์ปจํ
์ด๋๋ ์์ ์ค๋ช
ํ ๋๋ก, ์ ํ๋ฆฌ์ผ์ด์
์ด ์์กด์ฑ, ๋คํธ์ํฌ ํ๊ฒฝ, ํ์ผ ์์คํ
์ ๊ตฌ์ ๋ฐ์ง ์๊ณ , ๋์ปค๋ผ๋ ๊ธฐ์ ์์ ์คํ๋ ์ ์๋๋ก ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์
์์.
์ด๋ฏธ์ง
์คํ๋๋ ๋ชจ๋ ์ปจํ
์ด๋๋ ์ด๋ฏธ์ง๋ก๋ถํฐ ์์ฑ. ์ด๋ฏธ์ง๋ ์ ํ๋ฆฌ์ผ์ด์
๋ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ์ฑ์ ํจ๊ป ๋ด์๋์ ํ
ํ๋ฆฟ์ผ๋ก, ์ด๋ฅผ ์ด์ฉํด ์ฆ์ ์ปจํ
์ด๋๋ฅผ ๋ง๋ค ์ ์์.
์ด๋ฏธ์ง๋ฅผ ์ด์ฉํด ์ฌ๋ฌ ๊ฐ์ ์ปจํ
์ด๋๋ฅผ ์์ฑํ ์ ์์. ์ด๋ฅผ ์ด์ฉํด ์์ ์ค๋ช
ํ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ํ์ฅ์ด ๊ฐ๋ฅ.
์ด๋ฏธ์ง๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง(base image)๋ก๋ถํฐ (๋ง์น git์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ) ๋ณ๊ฒฝ ์ฌํญ์ ์ถ๊ฐ/์ปค๋ฐํด์ ๋ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ์๋ ์์. ์๋ฅผ ๋ค์ด node.js๋ก ์์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๋ฏธ์ง๋ก ๋ง๋ค๊ณ ์ถ์ ๊ฒฝ์ฐ, nodejs ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ก ์ผ๊ณ ๋ด๊ฐ ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ถ๊ฐํด ๋ฃ๊ณ , ์ด๋ฏธ์งํํ ์ ์์.
๋ ์ง์คํธ๋ฆฌ
์ด๋ฏธ์ง๋ ๋ ์ง์คํธ๋ฆฌ์ ์ ์ฅ๋จ. ๋ํ์ ์ธ ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ๋ก๋ Docker Hub, Amazon ECR์ด ์์. ๋์ปค CLI์์ ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํด ์ปจํ
์ด๋๋ฅผ ์์ฑํ ๋, ํธ์คํธ ์ปดํจํฐ์ ์ด๋ฏธ์ง๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, ๊ธฐ๋ณธ ๋ ์ง์คํธ๋ฆฌ๋ก๋ถํฐ ๋ค์ด๋ก๋ ๋ฐ๊ฒ ๋จ.
์ฌ์ฉ๋ฒ : Docker CLI, Docker-Compose CLI, API Reference
ํ๊ฒฝ ๋ฐ ๋น๋ ํ์ผ ๊ตฌ์ฑ : DockerFile, Docker-Compose File
๋ ์ง์คํธ๋ฆฌ(Registry)
Docker Hub : https://hub.docker.com/
๋์ปค ์ด๋ฏธ์ง๋ฅผ ๊ด๋ฆฌํ๋ ๊ณต๊ฐ.
ํน๋ณํ ๋ค๋ฅธ ๊ฒ์ ์ง์ ํ์ง ์๋๋ค๋ฉด, ๋์ปค ํ๋ธ(Docker Hub)๋ฅผ ๊ธฐ๋ณธ ๋ ์ง์คํธ๋ฆฌ๋ก ์ค์ .
๋ ์ง์คํธ๋ฆฌ๋ Docker Hub, Private Docker Hub, ํ์ฌ ๋ด๋ถ์ฉ ๋ ์ง์คํธ๋ฆฌ ๋ฑ์ผ๋ก ๋๋ ์ ์์.
๋ ์ง์คํธ๋ฆฌ ๋ด์ ๋์ปค ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ.
์ด๋ฏธ์ง ์ด๋ฆ์ด ์ฌ์ฉ๋๊ธฐ๋ ํจ.
GitHub์ ๋ ํฌ์งํ ๋ฆฌ์ ์ ์ฌํ๊ฒ ์๊ฐํ์๋ฉด ๋จ.
๊ฐ์ ์ด๋ฏธ์ง๋ผ๊ณ ํ ์ง๋ผ๋ ๋ฒ์ ๋ณ๋ก ์์ ๋ด์ฉ์ด ์กฐ๊ธ์ ๋ค๋ฅผ ์ ์์.
ํด๋น ์ด๋ฏธ์ง๋ฅผ ์ค๋ช
ํ๋ ๋ฒ์ ์ ๋ณด๋ฅผ ์ฃผ๋ก ์
๋ ฅ.
ํน๋ณํ ๋ค๋ฅธ ๊ฒ์ ์ง์ ํ์ง ์๋๋ค๋ฉด latest ํ๊ทธ๋ฅผ ๋ถ์ธ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ด.
docker/whalesay:latest =>
Docker Hub๋ผ๋ ๋ ์ง์คํธ๋ฆฌ์์
docker๋ผ๋ ์ ์ ๊ฐ ๋ฑ๋กํ whalesay ์ด๋ฏธ์ง ํน์ ๋ ํฌ์งํ ๋ฆฌ์์
latest ํ๊ทธ๋ฅผ ๊ฐ์ง ์ด๋ฏธ์ง
ex) docker image pull docker/whalesay:latest
=> docker/whalesay์ ์ต์ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ด.
pull : ๋ ์ง์คํธ๋ฆฌ์์ ์ด๋ฏธ์ง ํน์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ด.
ex) docker image ls
=> ์ด๋ฏธ์ง ๋ฆฌ์คํธ ์ถ๋ ฅ.
ex) docker container run --name ์ปจํ
์ด๋์ด๋ฆ docker/whalesay:latest cowsay boo
=> ์ปจํ
์ด๋์ด๋ฆ ์ ์ด๋ฆ์ผ๋ก ๊ฐ๋ ์ปจํ
์ด๋๋ฅผ ์คํ.
run : ์ปจํ
์ด๋ ์คํ
--name : ์ปจํ
์ด๋์ ์ด๋ฆ์ ํ ๋น
cowsay : ์ปจํ
์ด๋ ์คํ ์ cowsay ๋ช
๋ น์ด๋ฅผ ํธ์ถ. node๋ฅผ ํธ์ถํ๋ฏ ์ด์ฉ.
boo : COMMAND์ธ cowsay ์ ๋๊ฒจ์ง ํ๋ผ๋ฏธํฐ
ex) docker container ps -a
=> ๋ชจ๋ ์ปจํ
์ด๋์ ๋ฆฌ์คํธ ์ถ๋ ฅ
ex) docker container rm ์ปจํ
์ด๋์ด๋ฆ
=> ์ปจํ
์ด๋์ด๋ฆ์ด๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ์ปจํ
์ด๋ ์ญ์
ex) docker image rm docker/whalesay
=> docker/whalesay ์ด๋ฏธ์ง ์ง์ฐ๊ธฐ
ex) docker container run --name ์ปจํ
์ด๋_์ด๋ฆ --rm docker/whalesay cowsay boo
=> ์ธ ๊ฐ์ง ์์
์ ํ ๋ฒ์ ์คํํ๋ ๋ช
๋ น์ด
(container) run : ์ปจํ
์ด๋๋ฅผ ์คํ. ์ด๋ฏธ์ง๊ฐ ์๋ค๋ฉด ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์จ ๋ค(pull) ์คํ
--rm : ์ปจํ
์ด๋๋ฅผ ์ผํ์ฑ์ผ๋ก ์คํ. ์ปจํ
์ด๋๊ฐ ์ค์ง๋๊ฑฐ๋ ์ข
๋ฃ๋ ๋, ์ปจํ
์ด๋์ ๊ด๋ จ๋ ๋ฆฌ์์ค๋ฅผ ๋ชจ๋ ์ ๊ฑฐ
ex) docker image rm docker/whalesay
=> ์ง์ ๋ ๋์ปค ์ด๋ฏธ์ง ์ญ์
ex) docker container run -it --rm danielkraic/asciiquarium:latest
=> danielkraic/asciiquarium ์ด๋ฏธ์ง๋ฅผ ์คํ
ex) docker-compose up
=> -d ์ต์
์ ํจ๊ป ์ฌ์ฉํ๋ฉด, ์ปจํ
์ด๋๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํํ ์ ์์ต๋๋ค.
=> docker-compose.yaml ์ ์ ์๋ ์ด๋ฏธ์ง๋ฅผ ์ปจํ
์ด๋๋ก ์คํ
ex) docker-compose down
=> docker-compose.yaml ์ ์ ์๋ ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํด ์คํ๋ ์ปจํ
์ด๋๋ฅผ ์ข
๋ฃ
ex) docker-compose up {ํน์ ์ด๋ฏธ์ง}
=> ํน์ ์ด๋ฏธ์ง๋ง ์ปจํ
์ด๋๋ก ์คํ
ex) .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 ๋ช
๋ น์ด ์คํ (yaml ํ์ผ ์คํ)
ํ localhost:8080 or 127.0.0.1:8080 ํด๋ผ์ด์ธํธ ํ๋ฉด ํ์ธ.
๋์ปค๋ฅผ ์์ ์ ์ ๊น ์จ๋ดค๋ค๊ฐ ์ด๋ฒ์ ๋ค์ ์จ๋ณด๋ฉด์ ๊ณ์ ์จ๋ด์ผ๊ฒ ๋ค.