1. Docker๋?
Docker๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋๋ก ๊ฐ๋ฐ, ๋ฐฐํฌ, ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ํ๋ซํผ์ด๋ค.
- ์ปจํ
์ด๋๋ ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋ชจ๋ ์์กด์ฑ์ ํจ๊ป ํจํค์งํ ์ ์๊ฒ ํด์ฃผ์ด,
- ๋ค์ํ ํ๊ฒฝ์์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ค.
- ๋์ปค๋ ํ๋์ ์์คํ ์ ์ฒด๋ฅผ ํจํค์ง ํ ์ ์๋๋ก ๋์์ค๋ค.
- ๋ง์น ๊ฐ์ ๋จธ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํ์ํค๋ ๊ฒ๊ณผ ๋น์ทํ ๋๋์ด ๋ค์ง๋ง ๋์ ์๋นํ ์ฐจ์ด๊ฐ ์๋ค
1.1 ์ปจํ ์ด๋ vs ๊ฐ์๋จธ์

๊ฐ์ ๋จธ์ (VM): ์ด์์ฒด์ (OS) ์ ์ฒด๋ฅผ ํฌํจํ๊ณ ์์ด์ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ฐจ์งํ๋ค.์ปจํ ์ด๋: ํธ์คํธ OS ์ปค๋์ ๊ณต์ ํ๋ฉด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋ฆฝ๋ ํ๊ฒฝ์์ ์คํํ๋ค. ์ปจํ ์ด๋๋ ํจ์ฌ ๊ฐ๋ณ๋ค
1.2 ์ด๋ฏธ์ง์ ์ปจํ ์ด๋
OOP์ ๋น๊ตํ๋ฉด ๋งค์ฐ ์ฝ๊ฒ ์ดํด ํ ์ ์๋ค. ์ด๋ฏธ์ง๋ Class๊ณ , ์ปจํ
์ด๋๋ Class๋ก ์์ฑํ ๊ฐ์ฒด๋ค.
- ๋ฏธ๋ฆฌ ์ ์๋ผ์๋ Image๋ฅผ ๋ค์ด๋ฐ์ ์ ์๋ค.
- ์ด๋ฏธ์ง๋ฅผ ์คํํ๋ฉด Container๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- Class ํ๋๋ก ์ฌ๋ฌ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒ ์ฒ๋ผ Image ํ๋๋ก ์ฌ๋ฌ๊ฐ์ Container๋ฅผ ์คํ ํ ์ ์๋ค.
๐ก ์ด๋ฏธ์ง์ ์ปจํ ์ด๋
์ด๋ฏธ์ง: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋ ์ท์ปจํ ์ด๋: ์ด๋ฏธ์ง์ ์คํ ์ธ์คํด์ค
1.2.1 ์ด๋ฏธ์ง ๋ค์ด ๋ฐ ์คํ
1docker pull nginx
์ด๋ฏธ์ง ๋ค์ด๋ก๋ : Nginx๊ฐ ์ ์๋ผ์๋ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ์ ์ ์๋ค
1docker run -d -p 80:80 --name my-nginx nginx
์ด๋ฏธ์ง ์คํ (์ปจํ
์ด๋ ์คํ) : Nginx๋ฅผ ๋ค์ด๋ฐ์ง ์๋๋ผ๋ Nginx๋ฅผ ์ํ๋ ๊ฐฏ์๋งํผ Container๋ก ์คํํ ์ ์๋ค
ํ๋ฒ ์คํํ๊ณ ์ญ์ ํ๋๋ฐ ๋งค์ฐ ์ค๋๊ฑธ๋ฆฌ๋ ๊ฐ์๋จธ์ ๊ณผ ๋ค๋ฅด๊ฒ, Docker ์ปจํ ์ด๋๋ ๋งค์ฐ ๋น ๋ฅด๊ณ ํธ๋ฆฌํ๊ฒ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ์ญ์ ํ ์ ์์ผ๋ฉฐ ์๋ฑํ ์ ์ ๋ฆฌ์์ค๋ฅผ ํ์๋ก ํ๋ค.
2. ๊ธฐ๋ณธ Docker ๋ช ๋ น์ด
2.1 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
1docker pull nginx
2.2 ์ปจํ ์ด๋ ์คํ
1docker run -d -p 80:80 --name my-nginx nginx2# ๊ฒฐ๊ณผ : ์ปจํ ์ด๋ IOD ์ถ๋ ฅ
2.3 ์คํ์ค์ธ ์ปจํ ์ด๋ ์กฐํ
1docker ps2# ๊ฒฐ๊ณผ : ์ปจํ ์ด๋ ๋ฆฌ์คํธ ์์ํ
2.4 ์ปจํ ์ด๋ ์ค์ง ๋ฐ ์ญ์
1docker stop my-nginx2docker rm my-nginx3# ๊ฒฐ๊ณผ : ์ปค๋งจ๋๋ณ ์ด๋ฏธ์ง ์ด๋ฆ ํ๋์ฉ ์ถ๋ ฅ
2.5 ์ด๋ฏธ์ง ์ญ์
1docker images # ์ด๋ฏธ์ง ๋ฆฌ์คํธ ์ถ๋ ฅ2docker rmi nginx # ์ญ์ ๋ ์ด๋ฏธ์ง ์ถ๋ ฅ
2.6 Docker Hub๋ก Push
1docker pull redis2docker push your-dockerhub-usename/your-image
3. Dockerfile
1# ๊ณต์ Node.js ๋ฐํ์์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ก ์ฌ์ฉ2# ์๋ ๋น๋ ๊ณผ์ ๋ช ใ ์์ development๋ผ๊ณ ์ ์3FROM node:14 AS development45# ์์ ๋๋ ํ ๋ฆฌ ์ค์ 6WORKDIR /usr/src/app78# package.json ๋ณต์ฌ ๋ฐ ์์กด์ฑ ์ค์น9COPY package*.json ./10RUN npm install1112# ์ ํ๋ฆฌ์ผ์ด์ ํ์ผ ๋ณต์ฌ13COPY . .1415# ์ ํ๋ง์ด์ ์ด ์ฌ์ฉํ ํฌํธ ๋ ธ์ถ16EXPOSE 30001718# ์ ํ๋ฆฌ์ผ์ด์ ์คํ ๋ช ๋ น์ด19CMD ["npm", "start"]
Dockerfile์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ค์ ํ์ผ์ด๋ค.
- ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํ ํ๊ฒฝ์ ์ ์ํ๊ณ ,
- ๊ทธ ์ํํธ์จ์ด๋ฅผ ์ปจํ ์ด๋๋ก ํจํค์งํ ๋ ํ์ํ ๋ช ๋ น์ด๋ค์ด ์ ์๋ผ์๋ค.
- ์ผ๋ฐ์ ์ผ๋ก Dockerfile์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ ๋ฒ ์ด์ค ์ด๋ฏธ์ง, ํ์ผ ๋ณต์ฌ, ํ์ํ ํจํค์ง ์ค์น, ํฌํธ ์ค์ , ๋ช ๋ น์ด ์คํ ๋ฑ์ ํฌํจํ๋ค.
- ๋์ปค๋ ์ด Dockerfile์ ๋ฐํ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ,
- ๊ทธ ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํด ๋์ผํ ํ๊ฒฝ์ ์ฌ๋ฌ ๊ณณ ์์ ์ฝ๊ฒ ์ฌํํ ์ ์๊ฒ ํด์ค๋ค
1# Dockerfile ๊ธฐ๋ฐ ์ด๋ฏธ์ง ๋น๋2docker build -t my-node-app .
1# ๋น๋ํ ์ปจํ ์ด๋ ์คํ2docker run -d -p 3000:3000 \ --name node-app my-node-app
4. Docker Compose
Compose๋ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ก ์ด๋ฃจ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋์ docker-compose.yml ํ์ผ๋ก ์ ์ํ๊ณ ๊ด๋ฆฌํ ์ ์๋ค.
- ์ฌ๋ฌ ์ปจํ
์ด๋๋ฅผ ํ๋ํ๋ ์คํํ๊ณ ๊ด๋ฆฌํ๋ฉด ๋๋ฌด ๋ณต์กํ๋,
- ํ๋์ ์ปค๋งจ๋๋ก ํต์ผํด์ ๊ด๋ฆฌ ํ ์ ์๊ฒ ํ๊ธฐ ์ํด ๋ฐ๋ช ๋๋ค.
- ํ๋ก๋์ ํ๊ฒฝ ์์ ์ ์ฌ์ฉํ์ง ์๊ณ ๊ฐ๋ฐํ๊ฒฝ์์ ๋ง์ด ์ฌ์ฉ๋๋ค
4.1 docker-compose.yml
1version: '3'2sevices:3web:4image: my-node-app5ports :6- "3000:3000"7depends_on:8- db9db:10image: mysql11environment:12MYSQL_ROOT_PASSWORD: my-secret-pw13volumes:14- db-date:/var/lib/mysql1516volumes:17db-data:
Docker Compose ํ์ผ์ ์ฌ๋ฌ ์ปจํ ์ด๋๋ก ๊ตฌ์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๊ณ , ๋์์ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ YAML ํ์์ ์ค์ ํ์ผ์ด๋ค.
- ์ด ํ์ผ์ ์ฌ๋ฌ๊ฐ์ Docker Container๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก ์คํํ ์ง ์ ์ํ ์ ์๋ค
4.2 Docker Compose ์ปค๋งจ๋
1# ๋ชจ๋ ์ปจํ ์ด๋ ์คํ2docker-compose up34# ๋ชจ๋ ์ปจํ ์ด๋ ๋น๋ ํ ์คํ5docker-compose up --build67# ๋ชจ๋ ์ปจํ ์ด๋ ์ข ๋ฃ8docker-compose down