Docker Compose를 사용한 웹 애플리케이션 배포

Docker Compose를 사용한 웹 애플리케이션 배포

Docker Compose
Docker Compose를 사용한 웹 애플리케이션 배포
Author

gabriel yang

Published

October 7, 2024


Docker Compose를 사용한 웹 애플리케이션 배포

Docker Compose를 사용하여 간단한 웹 애플리케이션을 배포하는 방법에 대해 설명해드리겠습니다. 이 예제에서는 Nginx 웹 서버와 Flask 백엔드 애플리케이션을 배포하는 방법을 단계별로 알아봅니다.

목표:

  • Flask: 간단한 파이썬 웹 애플리케이션을 백엔드로 설정.
  • Nginx: 프론트엔드 웹 서버로 사용.
  • Docker Compose: 두 컨테이너를 함께 관리하고, 애플리케이션을 배포.

1. 프로젝트 구조 설정

먼저 프로젝트 디렉토리 구조를 정의합니다.

my-web-app/
├── docker-compose.yml
├── nginx/
   └── default.conf
└── web/
    ├── app.py
    └── requirements.txt

각 파일의 역할:

  • docker-compose.yml: Docker Compose 설정 파일.
  • nginx/default.conf: Nginx 설정 파일.
  • web/app.py: Flask 웹 애플리케이션.
  • web/requirements.txt: Flask와 같은 파이썬 패키지 의존성 목록.

2. Flask 애플리케이션 작성

my-web-app/web/app.py 파일을 생성하고 간단한 Flask 애플리케이션을 작성합니다.

# web/app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, World! This is Flask running behind Nginx."

if __name__ == '__main__':
    app.run(host='0.0.0.0')

설명:

  • Flask 애플리케이션은 / 경로에서 “Hello, World!” 메시지를 반환합니다.
  • app.run(host='0.0.0.0')를 통해 모든 네트워크 인터페이스에서 Flask 서버를 접근할 수 있게 설정합니다.

3. 파이썬 의존성 파일 작성

my-web-app/web/requirements.txt 파일에 Flask 의존성을 추가합니다.

Flask==2.0.1

4. Nginx 설정 파일 작성

my-web-app/nginx/default.conf 파일에 Nginx 설정을 작성합니다.

server {
    listen 80;

    location / {
        proxy_pass http://web:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

설명:

  • Nginx는 80번 포트에서 요청을 수신하고, Flask 백엔드 컨테이너(web)의 5000번 포트로 프록시합니다.
  • proxy_pass http://web:5000;에서 web은 Docker Compose에서 정의한 서비스 이름을 참조합니다.

5. Docker Compose 파일 작성

my-web-app/docker-compose.yml 파일을 작성하여 두 개의 서비스(Nginx와 Flask)를 정의합니다.

version: '3'

services:
  web:
    build: ./web
    ports:
      - "5000:5000"
    volumes:
      - ./web:/app

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - web

설명:

  • web: Flask 애플리케이션을 빌드하고 5000번 포트에서 실행합니다.
    • build: ./web: Flask 애플리케이션을 정의한 디렉토리에서 빌드합니다.
    • volumes: 호스트의 ./web 디렉토리를 컨테이너 내부의 /app 디렉토리에 마운트합니다.
  • nginx: Nginx 이미지를 사용하여 80번 포트에서 실행합니다.
    • volumes: 호스트의 Nginx 설정 파일을 컨테이너에 마운트합니다.
    • depends_on: web 서비스가 먼저 실행되도록 설정합니다.

6. Flask용 Dockerfile 작성

my-web-app/web/Dockerfile 파일을 작성하여 Flask 애플리케이션의 이미지를 빌드합니다.

# web/Dockerfile
FROM python:3.9-alpine

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "app.py"]

설명:

  • FROM python:3.9-alpine: 파이썬 3.9을 기반으로 하는 Alpine 이미지를 사용합니다.
  • WORKDIR /app: 애플리케이션이 실행될 디렉토리입니다.
  • COPY: 호스트의 파일을 컨테이너로 복사합니다.
  • CMD: Flask 애플리케이션을 실행합니다.

7. 애플리케이션 실행

모든 설정이 완료되었으면, Docker Compose 명령을 사용하여 애플리케이션을 실행할 수 있습니다.

docker-compose up --build

설명:

  • --build: 컨테이너를 처음 빌드할 때 사용합니다. 이후에는 docker-compose up만 사용해도 됩니다.
  • 이 명령어는 Nginx와 Flask 컨테이너를 동시에 실행합니다.

8. 웹 애플리케이션 접속

애플리케이션이 성공적으로 실행되었다면, 브라우저에서 http://localhost에 접속하면 Nginx를 통해 Flask 애플리케이션의 “Hello, World!” 메시지를 확인할 수 있습니다.

카테고리 다른 글

Date Title Author
Jan 1, 3000 전체 카테고리 gabriel yang
Oct 13, 2024 Dockerfile로 Nginx와 Django를 함께 사용하는 방법 gabriel yang
Oct 10, 2024 도커란 무엇인가? (컨테이너와 이미지) gabriel yang
Oct 10, 2024 도커 컨테이너 생성 및 실행하기 gabriel yang
Oct 10, 2024 도커 이미지 다운로드 및 관리하는 방법 gabriel yang
Oct 10, 2024 Dockerfile 작성 및 실행방법 gabriel yang
Oct 10, 2024 도커 컨테이너 쉘로 접속하는 방법 gabriel yang
Oct 7, 2024 Docker Compose에서 볼륨(Volume) 설정하기 gabriel yang
Oct 7, 2024 Docker-Compose의 주요 용어 및 개념 gabriel yang
Oct 7, 2024 Docker-Compose 서비스 정의 및 사용 방법 gabriel yang
Oct 7, 2024 Docker Compose에서 네트워크 설정하기 gabriel yang
No matching items
Back to BLOG LIST