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과 접속 오류 화면이 보일 것 입니다. 

 

해당 해결 방법은 다음 글에서 다루도록 하겠습니다.