Docker & Compose ์นํธ์ํธ ํต์ฌ ๋ช
๋ น์ด ๋ฐ ์ค์ ๊ฐ์ด๋
์ปจํ
์ด๋ ์๋ช
์ฃผ๊ธฐ ์ ์ด, ์ด๋ฏธ์ง ๋น๋/ํ๊น
, Compose ๋ค์ค ์ปจํ
์ด๋ ๋ฐ ๋์คํฌ ์ ๋ฆฌ ๋ช
๋ น์ด
## 1. ์ปจํ
์ด๋ ์คํ ๋ฐ ์๋ช
์ฃผ๊ธฐ
```bash
# ๋ฐฑ๊ทธ๋ผ์ด๋(๋ฐ๋ชฌ) ๋ชจ๋๋ก ํฌํธ ํฌ์๋ฉ ์คํ ๋ฐ ์๋ ์ญ์
docker run -d --name my-web -p 8080:80 --rm nginx:alpine
# ์คํ ์ค์ธ ์ปจํ
์ด๋ ๋ชฉ๋ก ์กฐํ (์ค์ง๋ ์ปจํ
์ด๋ ํฌํจ ์ -a)
docker ps -a
# ์ปจํ
์ด๋ ์ค์ง, ์ฌ์์ ๋ฐ ๊ฐ์ ์ข
๋ฃ
docker stop my-web
docker restart my-web
docker kill my-web
```
`-p 8080:80`์ ํธ์คํธ์ 8080 ํฌํธ๋ฅผ ์ปจํ
์ด๋ ๋ด๋ถ 80 ํฌํธ๋ก ๋งคํํฉ๋๋ค.
## 2. ๋ํํ ์ ์ ์ & ๋ก๊ทธ ๋ชจ๋ํฐ๋ง
```bash
# ์คํ ์ค์ธ ์ปจํ
์ด๋ ๋ด๋ถ์ bash/sh ๋ํํ ์ ์
docker exec -it my-web /bin/sh
# ์ค์๊ฐ ๋ก๊ทธ ์คํธ๋ฆฌ๋ฐ (์ต๊ทผ 100์ค๋ถํฐ ์ถ์ )
docker logs -f --tail 100 my-web
# ์ปจํ
์ด๋์ ์ค์๊ฐ CPU/๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ๋์๋ณด๋
docker stats
```
Alpine ๊ธฐ๋ฐ ๊ฒฝ๋ ์ด๋ฏธ์ง๋ `/bin/bash` ๋์ `/bin/sh`๋ฅผ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
## 3. ์ด๋ฏธ์ง ๋น๋ & ํ๊น
& ํธ์
```bash
# ํ์ฌ ๋๋ ํ ๋ฆฌ์ Dockerfile๋ก ์ด๋ฏธ์ง ๋น๋
docker build -t my-app:v1.0.0 .
# ๋น๋ ์บ์๋ฅผ ๋ฌด์ํ๊ณ ์ฒ์๋ถํฐ ์๋ก ๋น๋
docker build --no-cache -t my-app:latest .
# ์๊ฒฉ ๋ ์ง์คํธ๋ฆฌ์ฉ ํ๊ทธ ์์ฑ ๋ฐ ํธ์
docker tag my-app:latest ghcr.io/username/my-app:latest
docker push ghcr.io/username/my-app:latest
```
## 4. ํ์ผ ๋ณต์ฌ ๋ฐ ๊ฒ์ฌ (Inspect & CP)
```bash
# ํธ์คํธ ํ์ผ์ ์ปจํ
์ด๋ ๋ด๋ถ๋ก ๋ณต์ฌ (๋๋ ๊ทธ ๋ฐ๋)
docker cp ./config.json my-web:/app/config.json
docker cp my-web:/app/logs ./container-logs
# ์ปจํ
์ด๋ IP, ๋ง์ดํธ ๋ณผ๋ฅจ, ํ๊ฒฝ๋ณ์ ์์ธ JSON ํ์ธ
docker inspect my-web
```
## 5. ๋ณผ๋ฅจ & ๋คํธ์ํฌ ๊ด๋ฆฌ
```bash
# ๋ณผ๋ฅจ ์์ฑ ๋ฐ ๋ชฉ๋ก ํ์ธ
docker volume create app_data
docker volume ls
# ํธ์คํธ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณผ๋ฅจ์ผ๋ก ๋ฐ์ธ๋ ๋ง์ดํธํ์ฌ ์คํ
docker run -d -v $(pwd)/src:/app/src -p 3000:3000 node:20
# ๋
๋ฆฝ๋ ๊ฐ์ ๋ธ๋ฆฟ์ง ๋คํธ์ํฌ ์์ฑ ๋ฐ ์ปจํ
์ด๋ ์ฐ๊ฒฐ
docker network create internal-net
docker network connect internal-net my-web
```
## 6. Docker Compose ํต์ฌ ์กฐ์
```bash
# ๋ชจ๋ ์๋น์ค๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋น๋ ๋ฐ ์์
docker compose up -d --build
# ์๋น์ค ์ํ ํ์ธ ๋ฐ ๋ก๊ทธ ์ถ์
docker compose ps
docker compose logs -f <service-name>
# ๋ชจ๋ ์๋น์ค ์ค์ง ๋ฐ ์์ฑ๋ ๋คํธ์ํฌ/๋ณผ๋ฅจ ์ ๋ฆฌ
docker compose down -v
```
`-v` ํ๋๊ทธ๋ `docker-compose.yml`์์ ์ ์๋ ์ต๋ช
/๋ค์๋ ๋ณผ๋ฅจ๊น์ง ๋ง๋ํ๊ฒ ์ญ์ ํฉ๋๋ค.
## 7. ๋ถํ์ ๋ฆฌ์์ค ์ผ๊ด ๋์คํฌ ์ฒญ์
```bash
# ์ค์ง๋ ์ปจํ
์ด๋, ์ฌ์ฉํ์ง ์๋ ๋คํธ์ํฌ/์ด๋ฏธ์ง ์ผ๊ด ์ ๊ฑฐ
docker system prune -f
# ๋ฏธ์ฌ์ฉ ๋ณผ๋ฅจ๊น์ง ํฌํจํ์ฌ ๋์คํฌ ์์ ์ ๋ฆฌ (์ฃผ์!)
docker system prune -a --volumes -f
# ํ๊ทธ ์๋ ๋๊ธ๋ง(dangling) ์ด๋ฏธ์ง ์ ์ฉ ์ญ์
docker image prune
```
`docker system df` ๋ช
๋ น์ด๋ก Docker๊ฐ ์ฐจ์งํ๋ ๋์คํฌ ๊ณต๊ฐ์ ๋จผ์ ํ์ธํ ์ ์์ต๋๋ค.
์๊ฒฌ ๋ฐ ์ง๋ฌธ
0์์ง ๋ฑ๋ก๋ ์๊ฒฌ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋๊ธ์ ๋จ๊ฒจ๋ณด์ธ์!
๋๊ธ ์์
๋๊ธ ์ญ์