본문 바로가기
Docker

Docker를 활용한 초간단 웹 서버(Flask) 구축하기 (feat. WhiteHat School)

by gungle 2023. 9. 17.

Dockerfile 과 Docker Compose 차이

 

Difference between Docker Compose Vs Dockerfile

Docker - Beginners Intermediate Advanced

dockerlabs.collabnix.com

Dockerfile은 사용자가 이미지를 조립하기 위해 호출할 명령을 담고 있는 간단한 텍스트 파일이다. 반면에 Docker Compose는 여러 컨테이너로 구성된 Docker 애플리케이션을 정의하고 실행하기 위한 도구이다.

Docker Compose는 docker-compose.yml 파일에서 앱을 구성하는 서비스를 정의하여 이를 격리된 환경에서 함께 실행할 수 있게 한다.

docker-compose up 명령만으로 앱을 실행시킬 수 있다. 만약 프로젝트의 docker-compose.yml에 build 명령을 추가하면 Docker Compose는 Dockerfile을 사용한다.

따라서 Docker 작업 흐름은 각 이미지를 만들기 위해 적절한 Dockerfile을 빌드하고, 그런 다음 빌드 명령을 사용하여 이미지를 조립하기 위해 compose를 사용하는 것이어야 한다.

 

Flask "Hello World!" 서버 코드

 

빠르게 시작하기 — Flask 0.11-dev documentation

웹 어플리케이션에 있어서 클라이언트에서 서버로 보내는 데이타를 처리하는 것은 중요한 일이다. Flask에서 이 정보는 글로벌한 request 객체에 의해 제공된다. 여러분이 파이썬 경험이 있다면,

flask-docs-kr.readthedocs.io

# hello.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Docker!'

if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0', port=8000)

 

Flask 서버 코드(hello.py)를 구동하기 위한 Dockerfile 작성

# 기본 이미지 설정
FROM python:latest

# 작업 디렉토리 설정
WORKDIR /app

# hello.py 파일 복사
COPY hello.py .

# Flask 설치
RUN pip install Flask

# 포트 8000 노출
EXPOSE 8000

# 앱 실행
CMD ["python", "hello.py"]

Flask 애플리케이션을 실행하기 위한 필요한 파일들을 컨테이너에 복사한다.

그 후 Flask를 설치하고 hello.py 스크립트를 실행한다.

 

위에 명세한 Dockerfile을 실행하기 위한 docker-compose.yml 파일 작성

version: "3"

services:
    flask_app_1:
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - "9000:8000"
        volumes:
            - .:/app

    flask_app_2:
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - "9001:8000"
        volumes:
            - .:/app

 

flask_app_1 서비스는 호스트의 9000번 포트를 컨테이너의 8000번 포트와 연결힌다.

flask_app_2 서비스는 호스트의 9001번 포트를 컨테이너의 8000번 포트와 연결힌다.

이렇게 설정하면 docker-compose up 명령어를 실행할 때 두 개의 Flask 애플리케이션 인스턴스가 각각 9000과 9001 포트에서 실행된다.

 

정리

이번 글에서는 Dockerfile과 Docker Compose의 주요 차이점을 살펴보고, Flask를 예시로 들어 Flask 애플리케이션을 Docker 컨테이너로 실행하는 방법을 확인해 보았다.

Flask 애플리케이션의 서버 코드를 담은 Dockerfile을 작성하고, 이를 실행하기 위한 docker-compose.yml 파일을 설정하여 여러 개의 애플리케이션 인스턴스를 각각 다른 포트에서 실행할 수 있도록 했고, 이를 통해 동시에 여러 Flask 애플리케이션을 실행하고 관리할 수 있는 환경을 구축하는 방법을 알아보았다.

'Docker' 카테고리의 다른 글

[Docker] '--no-cache' 옵션  (0) 2023.11.07