소개
이 튜토리얼에서는 Docker 컨테이너 내부에서 실행되는 Flask 웹 서버를 외부에 노출하는 방법을 살펴봅니다. 이 가이드를 마치면 Flask 애플리케이션을 구축하고, Docker 컨테이너에 패키징하며, 외부에서 접근할 수 있도록 만드는 방법을 배우게 될 것입니다. 웹 개발자이든 DevOps 엔지니어이든, 이 튜토리얼은 Flask 기반 프로젝트에 Docker 를 활용하는 지식을 갖추도록 도와줄 것입니다.
이 튜토리얼에서는 Docker 컨테이너 내부에서 실행되는 Flask 웹 서버를 외부에 노출하는 방법을 살펴봅니다. 이 가이드를 마치면 Flask 애플리케이션을 구축하고, Docker 컨테이너에 패키징하며, 외부에서 접근할 수 있도록 만드는 방법을 배우게 될 것입니다. 웹 개발자이든 DevOps 엔지니어이든, 이 튜토리얼은 Flask 기반 프로젝트에 Docker 를 활용하는 지식을 갖추도록 도와줄 것입니다.
Docker 는 개발자가 컨테이너라는 일관되고 격리된 환경에서 애플리케이션을 구축, 배포 및 실행할 수 있도록 지원하는 오픈소스 플랫폼입니다. 컨테이너는 애플리케이션과 모든 종속성을 하나의 휴대 가능한 단위로 패키징하여, 기반 인프라에 관계없이 애플리케이션이 동일한 방식으로 실행되도록 보장합니다.
Flask 는 파이썬용 가벼운 오픈소스 웹 프레임워크입니다. 사용하기 쉽고 시작하기 쉬워 웹 애플리케이션, API 및 마이크로서비스 구축에 인기 있는 선택입니다. Flask 는 라우팅, HTTP 요청 처리 및 템플릿 렌더링과 같은 작업을 처리하여 웹 애플리케이션을 생성하는 간단하고 유연한 방법을 제공합니다.
Docker 와 Flask 를 결합하면 다음과 같은 여러 가지 이점이 있습니다.
Docker 와 Flask 를 시작하려면 시스템에 다음을 설치해야 합니다.
Docker 와 파이썬을 설치하면 Flask 애플리케이션을 구축하고 Docker 컨테이너에 배포하기 시작할 수 있습니다.
Flask 웹 애플리케이션을 생성하려면 다음 단계를 따르세요.
Flask 설치: 터미널을 열고 다음 명령어를 실행하여 Flask 를 설치합니다.
pip install flask
Flask 애플리케이션 생성: 새로운 파이썬 파일 (예: app.py) 을 생성하고 다음 코드를 추가합니다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello, LabEx!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
이 코드는 / 경로 하나만을 가진 기본 Flask 애플리케이션을 생성하며, 이 경로는 "Hello, LabEx!" 메시지를 반환합니다.
Flask 애플리케이션 실행: 터미널에서 app.py 파일이 있는 디렉토리로 이동하고 다음 명령어를 실행합니다.
python app.py
이렇게 하면 Flask 개발 서버가 시작되고 애플리케이션은 http://localhost:5000/에서 사용 가능해집니다.
Flask 애플리케이션에 더 많은 기능을 추가하려면 추가적인 라우트와 뷰를 생성할 수 있습니다.
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/contact', methods=['GET', 'POST'])
def contact():
if request.method == 'POST':
## 양식 제출 처리
return '양식 제출 성공!'
return render_template('contact.html')
이 예제에서는 세 가지 라우트 (/, /about, /contact) 를 추가했습니다. /는 홈페이지, /about은 정보 페이지, /contact는 연락처 양식 페이지입니다. 연락처 양식 라우트는 GET 및 POST 요청을 모두 처리하여 사용자가 양식을 보고 제출할 수 있도록 합니다.
Flask 는 Jinja2 템플릿 엔진을 사용하여 HTML 템플릿을 렌더링합니다. 프로젝트에 templates 디렉토리 (폴더) 를 생성하고 다음 파일을 추가합니다.
index.html:<!doctype html>
<html>
<head>
<title>LabEx Flask 애플리케이션</title>
</head>
<body>
<h1>LabEx Flask 애플리케이션에 오신 것을 환영합니다!</h1>
<p>이것은 홈페이지입니다.</p>
</body>
</html>
about.html:<!doctype html>
<html>
<head>
<title>정보 - LabEx Flask 애플리케이션</title>
</head>
<body>
<h1>LabEx Flask 애플리케이션 정보</h1>
<p>이것은 정보 페이지입니다.</p>
</body>
</html>
contact.html: (생략)이러한 템플릿은 Flask 애플리케이션의 페이지에 대한 기본 구조를 제공합니다.
Docker 컨테이너에 Flask 애플리케이션을 배포하려면 Dockerfile 을 생성해야 합니다. Dockerfile 은 Docker 이미지를 구축하는 방법을 담은 텍스트 파일입니다.
다음은 Flask 애플리케이션을 위한 Dockerfile 예제입니다.
## 공식 Python 이미지를 기본 이미지로 사용
FROM python:3.9-slim
## 작업 디렉토리를 /app으로 설정
WORKDIR /app
## requirements 파일을 컨테이너로 복사
COPY requirements.txt .
## Python 종속성 설치
RUN pip install --no-cache-dir -r requirements.txt
## Flask 애플리케이션 코드를 컨테이너로 복사
COPY . .
## Flask 애플리케이션이 실행될 포트 노출
EXPOSE 5000
## Flask 애플리케이션 시작 명령 설정
CMD ["python", "app.py"]
이 Dockerfile 은 다음과 같은 작업을 수행합니다.
/app으로 설정합니다.requirements.txt 파일을 컨테이너로 복사합니다.requirements.txt 파일에 나열된 Python 종속성을 설치합니다.Docker 이미지를 구축하려면 Dockerfile 이 있는 동일한 디렉토리에서 다음 명령어를 실행합니다.
docker build -t labex-flask-app .
이렇게 하면 Dockerfile 의 지침에 따라 labex-flask-app이라는 Docker 이미지가 생성됩니다.
Docker 컨테이너를 실행하려면 다음 명령어를 사용합니다.
docker run -p 5000:5000 labex-flask-app
이렇게 하면 Docker 컨테이너가 시작되고 호스트의 5000 번 포트가 컨테이너의 5000 번 포트와 매핑되어 http://localhost:5000/에서 Flask 애플리케이션에 접근할 수 있게 됩니다.
Docker 컨테이너에 Flask 애플리케이션을 배포한 후에는 Docker 의 확장 및 관리 기능을 활용할 수 있습니다.
Docker 를 활용하면 Flask 애플리케이션이 다양한 환경에서 일관되게 배포 및 관리되어 개발, 테스트 및 프로덕션 라이프사이클을 간소화할 수 있습니다.
이 튜토리얼에서는 Docker 컨테이너 내에서 실행되는 Flask 웹 서버를 노출하는 방법을 배웠습니다. Flask 애플리케이션을 Docker 컨테이너에 패키징함으로써 다양한 환경에서 일관되고 안정적인 배포를 보장할 수 있습니다. 얻은 지식을 바탕으로 이제 Docker 의 기능을 활용하여 Flask 웹 개발 및 배포 프로세스를 간소화할 수 있습니다.