๐ณ Docker๋?
Docker๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ปจํ
์ด๋(container)๋ผ๋ ๋
๋ฆฝ๋ ํ๊ฒฝ์์ ํจํค์ง, ๋ฐฐํฌ, ์คํํ ์ ์๋๋ก ๋์์ฃผ๋ ์คํ์์ค ํ๋ซํผ์
๋๋ค.
2013๋
๋์ปค็คพ(Docker, Inc.)์์ ์์๋ ์ด ๊ธฐ์ ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ํ์คํํ๊ณ ๋ฐฐํฌ๋ฅผ ๋จ์ํํด์ฃผ๋ ๋๊ตฌ๋ก ์ ์ธ๊ณ ๊ฐ๋ฐ์์ DevOps ํ์ ํฐ ์ํฅ์ ์ฃผ์์ต๋๋ค.
๐ฆ ์ปจํ
์ด๋๋?
์ปจํ
์ด๋๋ ์ด์์ฒด์ ์์ค์์ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์ผ๋ก, ๋ด๋ถ์๋ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ์คํ์ ํ์ํ ๋ชจ๋ ์์(์ฝ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ค์ ๋ฑ)๋ฅผ ํฌํจํฉ๋๋ค.
์ด๋ก ์ธํด ์ด๋ ์ปดํจํฐ์์ ์คํํ๋๋ผ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค.
์ปจํ
์ด๋๋ ๊ฐ์๋จธ์ ์ฒ๋ผ ๋
๋ฆฝ์ ์ด์ง๋ง, ํจ์ฌ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ฉฐ, OS ์ปค๋์ ๊ณต์ ํฉ๋๋ค.
โ๏ธ Docker์ ํต์ฌ ๊ตฌ์ฑ์์
๊ตฌ์ฑ์์ |
์ค๋ช
|
Docker Engine |
๋์ปค ์ปจํ
์ด๋๋ฅผ ์คํํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐํ์ |
Docker Image |
์ปจํ
์ด๋์ ์คํ ๋จ์๊ฐ ๋๋ ๋ถ๋ณ์ ํ
ํ๋ฆฟ |
Docker Container |
์ด๋ฏธ์ง๋ฅผ ์คํํ ์ธ์คํด์ค, ๋
๋ฆฝ๋ ํ๊ฒฝ |
Dockerfile |
์ด๋ฏธ์ง๋ฅผ ์ ์ํ๊ธฐ ์ํ ์คํฌ๋ฆฝํธ ํ์ผ |
Docker Hub |
๋์ปค ์ด๋ฏธ์ง ์ ์ฅ์ (๊ณต์ ์ด๋ฏธ์ง, ๊ฐ์ธ ์ ์ฅ์ ๋ฑ) |
Volume |
์ปจํ
์ด๋ ์ธ๋ถ์ ์๋ ๋ฐ์ดํฐ ์ ์ฅ์ (์์์ฑ ํ๋ณด) |
Network |
์ปจํ
์ด๋ ๊ฐ ํต์ ์ ์ํ ๋คํธ์ํฌ ๊ตฌ์กฐ (bridge, host ๋ฑ) |
๐ ๏ธ Docker ์๋ ์๋ฆฌ
- Dockerfile ์์ฑ: ์ด๋ค OS, ์ด๋ค ์ ํ๋ฆฌ์ผ์ด์
, ์ด๋ค ๋ช
๋ น์ด๊ฐ ์คํ๋ ์ง๋ฅผ ์ ์
- ์ด๋ฏธ์ง ์์ฑ: Dockerfile์ ๋น๋ํด์ ๋์ปค ์ด๋ฏธ์ง ์์ฑ (docker build)
- ์ปจํ
์ด๋ ์คํ: ํด๋น ์ด๋ฏธ์ง๋ฅผ ์คํํด์ ์ปจํ
์ด๋ ์์ฑ (docker run)
- ๋ฐฐํฌ ๋ฐ ์ด์: ๋์ปค ํ๋ธ ๋๋ ์ฌ์ค ๋ ์ง์คํธ๋ฆฌ์์ ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ๊ฑฐ๋ ๋ฐฐํฌ
๐งฉ Docker vs VM(๊ฐ์๋จธ์ )
ํญ๋ชฉ |
Docker ์ปจํ
์ด๋ |
๊ฐ์ ๋จธ์ (VM) |
๋ถํ
์๋ |
์ ์ด ์ด๋ด |
์ ๋ถ |
๋ฌด๊ฒ |
์ MB |
์ GB |
๋ฆฌ์์ค ์ฌ์ฉ |
์ ์ |
๋ง์ |
์คํ ๋จ์ |
ํ๋ก์ธ์ค ์์ค |
OS ์์ค |
OS ํ์ |
ํ๋์ OS์์ ๋ค์ ์คํ |
๊ฐ VM์ด ๋
๋ฆฝ๋ OS ์คํ |
๐ Docker์ ์ฃผ์ ๋ช
๋ น์ด
docker build -t myapp . # Dockerfile๋ก ์ด๋ฏธ์ง ์์ฑ
docker images # ์ด๋ฏธ์ง ๋ชฉ๋ก ๋ณด๊ธฐ
docker run -d -p 8080:80 myapp # ์ปจํ
์ด๋ ์คํ (ํฌํธ ๋งคํ)
docker ps # ์คํ ์ค์ธ ์ปจํ
์ด๋ ํ์ธ
docker stop [id] # ์ปจํ
์ด๋ ์ค์ง
docker rm [id] # ์ปจํ
์ด๋ ์ญ์
docker rmi [image] # ์ด๋ฏธ์ง ์ญ์
docker logs [id] # ๋ก๊ทธ ๋ณด๊ธฐ
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
โ๏ธ Docker์ CI/CD
Docker๋ CI/CD ํ์ดํ๋ผ์ธ์์ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
- GitHub Actions, GitLab CI, Jenkins ๋ฑ๊ณผ ์ฝ๊ฒ ํตํฉ
- ์ ํ๋ฆฌ์ผ์ด์
์ ํน์ ํ๊ฒฝ์ ๋ง๊ฒ ์ปจํ
์ด๋ํํ์ฌ ๋ฐฐํฌ
- ๋ฌด์ค๋จ ๋ฐฐํฌ(Zero Downtime Deployment) ๊ฐ๋ฅ
๐ Kubernetes์ ์ฐ๋
๋์ปค ์ปจํ
์ด๋๋ฅผ ๋จ๋
์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ๋ ๊ฐ๋ฅํ์ง๋ง, ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก Kubernetes(์ฟ ๋ฒ๋คํฐ์ค) ๊ฐ์ ์ค์ผ์คํธ๋ ์ด์
๋๊ตฌ๊ฐ ํ์ํฉ๋๋ค.
- ๋ค์์ ์ปจํ
์ด๋๋ฅผ ์ค์ผ์ผ๋ง, ์
๋ฐ์ดํธ, ๋ณต๊ตฌ, ๋ก๋๋ฐธ๋ฐ์ฑ
- Kubernetes๋ Docker๋ฅผ ์ง์ํ๋ฉฐ, Docker๋ Kubernetes ํด๋ฌ์คํฐ์ ๊ธฐ๋ฐ ๋จ์๊ฐ ๋ฉ๋๋ค (๋จ, ํ์ฌ๋ Containerd ๋ฑ์ ๋ฐํ์์ผ๋ก ์ ํ๋๋ ์ถ์ธ)
โ
Docker์ ์ฅ์ ์์ฝ
- ํ๊ฒฝ ์ผ๊ด์ฑ ํ๋ณด: ์ด๋์๋ ๋๊ฐ์ด ์คํ๋จ
- ๋น ๋ฅธ ๋ฐฐํฌ ๋ฐ ๋กค๋ฐฑ
- ๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์
- ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ์ ์ ํฉ
- ํด๋ผ์ฐ๋ ์นํ์
โ ์ฃผ์์ ๋ฐ ํ๊ณ
ํญ๋ชฉ |
๋ด์ฉ |
๋ณด์ |
์ปจํ
์ด๋ ๊ฒฉ๋ฆฌ๋ ์์ ํ ๊ฐ์ํ ์์ค์ ์๋ |
ํผํฌ๋จผ์ค |
์ปจํ
์ด๋ ์๊ฐ ๋ง์์ง๋ฉด ๋คํธ์ํฌ ๋ฐ ๋ณผ๋ฅจ ๊ด๋ฆฌ ๋ณต์ก๋ ์ฆ๊ฐ |
ํ์ต ๊ณก์ |
์ฒ์ ์ ํ๋ฉด Dockerfile, ๋คํธ์ํฌ, ๋ณผ๋ฅจ, ์ด๋ฏธ์ง ๊ณ์ธต ์ดํด ํ์ |
๐งญ ๋ง๋ฌด๋ฆฌ
Docker๋ ๋จ์ํ ๊ฐ์ํ ๋๊ตฌ๋ฅผ ๋์ด ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํต์ฌ ์ธํ๋ผ ๊ตฌ์ฑ ์์๊ฐ ๋์์ต๋๋ค.
ํนํ DevOps, ํด๋ผ์ฐ๋ ํ๊ฒฝ, ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ ๋ฑ์์๋ ํ์ค์ ์ธ ๋ฐฐํฌ ๋๊ตฌ๋ก ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ,
๊ฐ๋ฐ๋ถํฐ ์ด์๊น์ง์ ์ผ๊ด์ฑ์ ํ๋ณดํ๋ ๋ฐ ํฐ ์ญํ ์ ํฉ๋๋ค.