개발 환경을 셋업할 때, 데이터베이스와 백엔드 서버를 동시에 띄우는 작업은 매우 흔합니다.
이번 글에서는 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과 접속 오류 화면이 보일 것 입니다.
해당 해결 방법은 다음 글에서 다루도록 하겠습니다.
'MLOps > Docker' 카테고리의 다른 글
[Kubernetes#1] 쿠버네티스(Kubernetes)란? (0) | 2025.05.13 |
---|---|
[Docker#16] Docker Compose 여러 개의 컨테이너 동시에 띄우기(2) (0) | 2025.05.13 |
[Docker#14] Docker Compose란? (0) | 2025.05.12 |
[Docker#13] Dockerfile WORKDIR (3) | 2025.05.12 |
[Docker#12] Dockerfile RUN (0) | 2025.05.12 |