โ˜๏ธ DevOps ๐ŸŒฑ ์ž…๋ฌธ

Docker ์ž…๋ฌธ

์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ  Docker ์‹œ์ž‘ํ•˜๊ธฐ

โฑ๏ธ 6์‹œ๊ฐ„ ๐Ÿ‘๏ธ 23 ์กฐํšŒ โญ ์ถ”์ฒœ ๊ฐ•์ขŒ
๐Ÿ“– ๊ฐ•์ขŒ ๋‚ด์šฉ
# Docker ์ž…๋ฌธ ๊ฐ€์ด๋“œ

## ํ•™์Šต ๋ชฉํ‘œ
Docker๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆํ™”ํ•˜๊ณ  ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

## 1. Docker๋ž€?
์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
- ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ ๋ณด์žฅ
- ๋น ๋ฅธ ๋ฐฐํฌ
- ๋ฆฌ์†Œ์Šค ํšจ์œจ์ 
- ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ์ ํ•ฉ

## 2. ์„ค์น˜
Ubuntu:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

ํ™•์ธ:
docker --version
docker run hello-world

## 3. ๊ธฐ๋ณธ ๋ช…๋ น์–ด
์ด๋ฏธ์ง€:
docker pull nginx
docker images
docker rmi nginx

์ปจํ…Œ์ด๋„ˆ:
docker run -d -p 8080:80 nginx
docker ps
docker ps -a
docker stop container_id
docker start container_id
docker rm container_id

๋กœ๊ทธ ๋ฐ ์ ‘์†:
docker logs container_id
docker logs -f container_id
docker exec -it container_id sh
docker exec -it container_id bash

## 4. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์˜ต์…˜
docker run -d nginx # ๋ฐฑ๊ทธ๋ผ์šด๋“œ
docker run -p 8080:80 nginx # ํฌํŠธ ๋งคํ•‘
docker run --name myapp nginx # ์ด๋ฆ„ ์ง€์ •
docker run -e DB_HOST=localhost nginx # ํ™˜๊ฒฝ๋ณ€์ˆ˜
docker run -v /host:/container nginx # ๋ณผ๋ฅจ ๋งˆ์šดํŠธ
docker run --rm nginx # ์ข…๋ฃŒ ์‹œ ์‚ญ์ œ
docker run --restart always nginx # ์ž๋™ ์žฌ์‹œ์ž‘

## 5. Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

๋นŒ๋“œ:
docker build -t myapp:1.0 .
docker build -t myapp:1.0 -f Dockerfile.prod .

## 6. ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ
FROM node:20 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

## 7. Docker Compose
docker-compose.yml:
version: "3.8"
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
- db
db:
image: mysql:8
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=myapp
volumes:
- db_data:/var/lib/mysql

volumes:
db_data:

๋ช…๋ น์–ด:
docker-compose up -d
docker-compose down
docker-compose logs -f
docker-compose ps
docker-compose exec web sh

## 8. ๋ณผ๋ฅจ
์ƒ์„ฑ:
docker volume create mydata
docker volume ls
docker volume inspect mydata
docker volume rm mydata

์‚ฌ์šฉ:
docker run -v mydata:/data nginx
docker run -v /host/path:/container/path nginx
docker run -v $(pwd):/app nginx

## 9. ๋„คํŠธ์›Œํฌ
์ƒ์„ฑ:
docker network create mynet
docker network ls

์—ฐ๊ฒฐ:
docker run --network mynet --name web nginx
docker run --network mynet --name db mysql

์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ :
web ์ปจํ…Œ์ด๋„ˆ์—์„œ db:3306์œผ๋กœ ์ ‘์† ๊ฐ€๋Šฅ

## 10. Docker Hub
๋กœ๊ทธ์ธ:
docker login

ํ‘ธ์‹œ:
docker tag myapp:1.0 username/myapp:1.0
docker push username/myapp:1.0

ํ’€:
docker pull username/myapp:1.0

## 11. ์ •๋ฆฌ ๋ช…๋ น์–ด
docker system prune # ๋ฏธ์‚ฌ์šฉ ๋ฆฌ์†Œ์Šค ์‚ญ์ œ
docker system prune -a # ๋ชจ๋“  ๋ฏธ์‚ฌ์šฉ ์‚ญ์ œ
docker container prune # ์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
docker image prune # ๋ฏธ์‚ฌ์šฉ ์ด๋ฏธ์ง€ ์‚ญ์ œ
docker volume prune # ๋ฏธ์‚ฌ์šฉ ๋ณผ๋ฅจ ์‚ญ์ œ

## 12. ์œ ์šฉํ•œ ํŒ
.dockerignore:
node_modules
.git
.env
*.log

์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์†Œ์Šค ์ œํ•œ:
docker run --memory=512m --cpus=1 myapp

ํ—ฌ์Šค์ฒดํฌ:
HEALTHCHECK --interval=30s CMD curl -f http://localhost/ || exit 1

## ์ถ”์ฒœ ํ•™์Šต ์ˆœ์„œ
1. ๊ธฐ๋ณธ ๋ช…๋ น์–ด ์ตํžˆ๊ธฐ
2. Dockerfile ์ž‘์„ฑ
3. Docker Compose ํ™œ์šฉ
4. ๋ณผ๋ฅจ๊ณผ ๋„คํŠธ์›Œํฌ
5. ํ”„๋กœ๋•์…˜ ์ตœ์ ํ™”