Docker-compose
Docker Compose ํ์ฉ ๐ ๏ธ
1๏ธโฃ Docker Compose ์ค์น
Docker Compose๋ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ํ ๋ฒ์ ์ ์ํ๊ณ ์คํํ ์ ์๋ ๋๊ตฌ์ ๋๋ค.
๐น 1 Linux์์ Docker Compose ์ค์น
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
๐ ์ค์น ํ์ธ
docker-compose --version
๐ Docker Compose๋ฅผ ์ฌ์ฉํ๋ฉด docker-compose.yml
ํ์ผ์ ํตํด ์ฌ๋ฌ ๊ฐ์ ์ปจํ
์ด๋๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค!
2๏ธโฃ Docker Compose ๊ธฐ๋ณธ ๊ฐ๋ ๐
๐ Docker Compose๋?
- ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์ ์ํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๋๊ตฌ
docker-compose.yml
ํ์ผ์ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์ฝ๋๋ก ์ ์- ๋จ์ผ ๋ช ๋ น์ด๋ก ์ปจํ ์ด๋๋ฅผ ํ ๋ฒ์ ์คํ, ์ค์ง, ์ญ์ ๊ฐ๋ฅ
๐น Docker Compose๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์!
โ๏ธ ์ฌ๋ฌ ๊ฐ์ ์ปจํ
์ด๋๋ฅผ ์์ฝ๊ฒ ์คํ ๊ฐ๋ฅ
โ๏ธ ์ปจํ
์ด๋ ๊ฐ ๋คํธ์ํฌ๋ฅผ ์๋์ผ๋ก ์ค์
โ๏ธ ํ๊ฒฝ ๋ณ์์ ๋ณผ๋ฅจ ์ค์ ๋ฑ์ ์ฝ๋๋ก ๊ด๋ฆฌ
โ ์ฌ์ฉ ์์
- API ์๋ฒ + DB + ์น์๋ฒ
- ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ
- CI/CD ํ์ดํ๋ผ์ธ
๐ Docker Compose ์ค์น ํ์ธ
docker-compose --version
3๏ธโฃ docker-compose.yml
์์ฑ๋ฒ ๐
๐ ๊ธฐ๋ณธ์ ์ธ docker-compose.yml
๊ตฌ์กฐ
version: "3.8" # Docker Compose ๋ฒ์
services:
app:
image: nginx
ports:
- "8080:80"
database:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
๐ ์๋น์ค ์ ์
ํค์๋ | ์ค๋ช |
---|---|
version |
Docker Compose ํ์ผ์ ๋ฒ์ |
services |
์คํํ ์ปจํ ์ด๋ ๋ชฉ๋ก |
image |
์ฌ์ฉํ Docker ์ด๋ฏธ์ง |
build |
Dockerfile์ ์ฌ์ฉํ์ฌ ์ง์ ๋น๋ |
ports |
ํธ์คํธ์ ์ปจํ ์ด๋ ๊ฐ ํฌํธ ๋งคํ |
volumes |
๋ฐ์ดํฐ ์ ์ฅ์ ์ํ ๋ณผ๋ฅจ ์ค์ |
environment |
ํ๊ฒฝ ๋ณ์ ์ค์ |
4๏ธโฃ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋ ๊ตฌ์ฑ (API ์๋ฒ + DB + ์น์๋ฒ)
๐ ์์ : API ์๋ฒ (Flask) + MySQL + Nginx ๊ตฌ์ฑ
๐น 1 ํ๋ก์ ํธ ํด๋ ๊ตฌ์กฐ
my_project/
โโโ docker-compose.yml
โโโ app/
โ โโโ Dockerfile
โ โโโ app.py
โ โโโ requirements.txt
โโโ nginx/
โโโ default.conf
๐น 2 Flask API ์๋ฒ ๊ตฌ์ฑ
๐ Flask API ์๋ฒ ์ฝ๋ (app/app.py
)
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello, Docker Compose!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
๐ Flask ์์กด์ฑ ํ์ผ (app/requirements.txt
)
flask
๐ Flask ์ปจํ
์ด๋ Dockerfile (app/Dockerfile
)
# ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ค์
FROM python:3.9
# ์์
๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /app
# ํ์ํ ํจํค์ง ์ค์น
COPY requirements.txt .
RUN pip install -r requirements.txt
# ์ ํ๋ฆฌ์ผ์ด์
๋ณต์ฌ
COPY . .
# Flask ์คํ
CMD ["python", "app.py"]
๐น 3 Nginx ์ค์
๐ Nginx ์ค์ ํ์ผ (nginx/default.conf
)
server {
listen 80;
location / {
proxy_pass http://app:5000;
}
}
๐น 4 docker-compose.yml
์์ฑ
๐ ๋ชจ๋ ์ปจํ
์ด๋๋ฅผ ํฌํจํ docker-compose.yml
version: "3.8"
services:
app:
build: ./app
ports:
- "5000:5000"
depends_on:
- database
database:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
volumes:
- db_data:/var/lib/mysql
nginx:
image: nginx
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
ports:
- "8080:80"
depends_on:
- app
volumes:
db_data:
5๏ธโฃ Docker Compose๋ก ์๋น์ค ๊ด๋ฆฌ ๐๏ธ
๐น 1 ์ปจํ ์ด๋ ์คํ
docker-compose up -d
-d
์ต์ : ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ
๐ ์คํ ํ์ธ
docker-compose ps
๐น 2 ์ปจํ ์ด๋ ์ค์ง
docker-compose down
docker-compose down
์ ์คํํ๋ฉด ๋ชจ๋ ์ปจํ ์ด๋์ ๋คํธ์ํฌ๊ฐ ์ข ๋ฃ๋จ
๐ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ฑ๋ก ์ค์งํ๋ ค๋ฉด?
docker-compose stop
๐น 3 ํน์ ์ปจํ ์ด๋๋ง ์คํ/์ค์ง
docker-compose up -d app # app ์๋น์ค๋ง ์คํ
docker-compose stop app # app ์๋น์ค๋ง ์ค์ง
๐น 4 ๋ก๊ทธ ํ์ธ
docker-compose logs -f
๐น 5 ์ปจํ ์ด๋ ๋ด๋ถ ์ ์
docker exec -it my_project_app_1 bash
๐ ์ปจํ ์ด๋ ์ด๋ฆ ํ์ธ
docker-compose ps
๊ฒฐ๋ก ๐ฏ
โ
Docker Compose๋ฅผ ํ์ฉํ๋ฉด ์ฌ๋ฌ ๊ฐ์ ์ปจํ
์ด๋๋ฅผ ์์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์
โ
docker-compose.yml
ํ์ผ์ ํตํด ์๋น์ค๋ฅผ ์ฝ๋๋ก ์ ์ํ๊ณ ์คํ ๊ฐ๋ฅ
โ
depends_on
, volumes
, environment
๋ฑ์ ํ์ฉํ์ฌ ์ปจํ
์ด๋ ๊ฐ ์ฐ๋์ด ๊ฐ๋ฅ
โ
์ค๋ฌด์์๋ ๋ง์ดํฌ๋ก์๋น์ค, CI/CD, ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฑ์ ํ์ฉ
๐ ์ถ๊ฐ ํ์ต ๋ฆฌ์์ค