MLOps/Docker
[Docker#15] Docker Compose 여러 개의 컨테이너 동시에 띄우기(1)
j.d
2025. 5. 13. 00:17
개발 환경을 셋업할 때, 데이터베이스와 백엔드 서버를 동시에 띄우는 작업은 매우 흔합니다.
이번 글에서는 MySQL과 Python(Flask 서버)를 Docker Compose로 한 번에 실행하는 실습을 해보겠습니다.
실습
디렉토리 구조
project/
├── app/
│ ├── main.py
│ ├── requirements.txt
│ └── Dockerfile
├── compose.yml
Flask 코드
from flask import Flask
import pymysql
app = Flask(__name__)
@app.route("/")
def hello_mysql():
try:
conn = pymysql.connect(
host="localhost"
user="root",
password="pwd1234",
database="test_db"
)
return "MySQL 연결 성공"
except Exception as e:
return f"연결 실패: {e}"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
requirements.txt
flask
pymysql
cryptography
compose.yml 작성
services:
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: pwd1234
MYSQL_DATABASE: test_db
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- "3306:3306"
my-app:
build: ./app
ports:
- "5000:5000"
depends_on:
- my-db
Flask 컨테이너용 Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
ENTRYPOINT ["python", "main.py"]
실행하기
$ docker compose up --build -d
두 개의 컨테이너(my-db, my-app)가 한 번에 실행됩니다.
그러나 많은 분들의 경우 http://localhost:5000으로 접속하면 아래와 같이 MySQL과 접속 오류 화면이 보일 것 입니다.
해당 해결 방법은 다음 글에서 다루도록 하겠습니다.