Docker에 Python Flask API 애플리케이션 배포하는 방법

만약 Docker와 컨테이너에 대해 처음이라면, Docker를 사용하여 Python Flask API 애플리케이션을 배포하는 것은 시작하기에 좋은 방법입니다. Docker는 가벼운 기술과 보안을 통해 애플리케이션을 컨테이너화하여 빠른 배포를 지원합니다.

이 튜토리얼에서는 Docker 컨테이너에 Python Flask API 애플리케이션을 설정하고 배포하는 방법에 대해 스스로 마스터하는 방법을 배우게 될 것입니다.

준비되셨나요? 시작해봅시다!

전제 조건

단계별로 따라하려면 다음이 설치되어 있어야 합니다:

  • Docker가 설치된 Ubuntu 머신. 이 튜토리얼은 Ubuntu 18.04.5 LTS와 Docker v19.03.8을 사용합니다.
  • Ubuntu 머신에 설치된 Python v3.9 이상. 이 튜토리얼에서는 Python v3.9.2를 Ubuntu 머신에서 사용합니다.
  • 이 튜토리얼에서 API를 테스트하는 데 사용되는 Ubuntu 머신에 Elinks 패키지를 설치합니다.

Python Flask API 애플리케이션 생성하기 (GET 및 POST API)

이 튜토리얼을 시작하려면 Python Flask 애플리케이션을 생성하세요. Flask는 Python으로 작성된 가벼운 WSGI 마이크로 웹 애플리케이션 프레임워크입니다. Flask는 Python으로 웹 애플리케이션을 만드는 데 편리한 도구와 기능을 제공합니다.

Python Flask 애플리케이션을 생성하기 전에 Python Flask와 Flask가 애플리케이션을 실행할 Python 가상 환경을 설치합니다.

1. 좋아하는 SSH 클라이언트를 사용하여 Ubuntu 머신에 로그인합니다.

2. 다음으로 아래 명령을 실행하여 docker_python_flask_demo라는 디렉터리를 만들고 해당 디렉터리로 전환합니다. 이 디렉터리는 애플리케이션을 실행하기 위해 Python과 Docker가 필요로하는 모든 파일을 보관합니다.

mkdir ~/docker_python_flask_demo
cd ~/docker_python_flask_demo

3. 아래 pip 명령을 실행하여 Flask가 응용 프로그램을 실행하기 위해 필요한 Python 가상 환경(virtualenv)을 설치합니다. Python 가상 환경은 자체 Python 이진 파일과 애플리케이션별로 설치된 패키지를 제공하여 다른 응용 프로그램과의 충돌을 피합니다.

pip install virtualenv
Installing the environment needed by Flask to execute the applications

4. 아래 virtualenv 명령을 실행하여 venv 모듈을 사용하여 가상 환경을 생성하고 활성화합니다.

virtualenv venv
Creating the virtual environment for Python

5. 이제 아래 명령을 실행하여 pip 패키지 관리자를 사용하여 Python flask 패키지를 설치합니다.

pip install flask

6. 다음 명령을 실행하여 가상 환경에서 패키지를 활성화한 다음 설치하거나 사용할 수 있습니다. 이 명령은 VIRTUAL_ENV 환경 변수를 수정하여 가상 환경을 가리키도록 하고, 경로에 가상 환경 Python 이진 파일을 먼저 추가하여 올바른 이진 파일을 실행합니다.

source venv/bin/activate

7. 하나의 파일을 더 만들어 requirements.txt로 이름을 지정하고 아래에 플라스크 애플리케이션의 종속성을 정의합니다.

Flask==2.0.2

8. 텍스트 파일 ~/docker_python_flask_demo/app.py를 생성하고 아래의 Python 코드를 파일에 채웁니다.

아래의 Python 코드는 Python flask 클래스를 가져오고 app이라는 클래스 인스턴스를 만듭니다. app 클래스 인스턴스에는 사용자가 /login 페이지로 요청을 보낼 때 실행되는 두 개의 login() 함수가 포함되어 있습니다.

success() 함수는 브라우저에 환영 메시지 “사용자 이름”을 표시하는 것으로 실행됩니다.


from flask import Flask , redirect , url_for , request # flask 클래스를 가져옵니다
# app은 Flask의 객체 또는 인스턴스입니다
app = Flask(__name__)
# app.route는 Flask에게 함수에서 사용할 URL을 알려줍니다
@app.route('/success/<name>')
# success라는 함수를 생성합니다
def success(name):
    return 'welcome %s' % name

@app.route('/login', methods = ['GET','POST'])
# login이라는 함수를 생성합니다
def login():
    if request.method == 'POST':
       user = request.form['adamlistek']
       return redirect(url_for('success', name = user)) 
    else:
       return "INVALID"
# 프로그램은 개발 서버에서 (시스템 내에서 로컬로) 디버깅이 활성화된 상태에서 여기서 실행됩니다
# 디버깅이 활성화됩니다
  
if __name__ == '__main__':
   app.run(debug = True)

9. 새 파일을 하나 더 만들어 ~/docker_python_flask_demo/form.html이라고 명명하고 아래 코드를 복사/붙여넣기하십시오.

아래의 HTML 코드를 실행하면 이름을 제공하는 텍스트 입력란과 제출 버튼이 있는 양식이 생성됩니다.

사용자 이름을 제공하고 제출 버튼을 누르면 즉시 포스트 요청이 전송되고 Flask가 다른 기능을 실행하고 http://localhost:5000/success/<username>에 새 웹 페이지를 엽니다.

<html>
  <body>
    <form action="http://localhost:5000/login" method="post">
      <p>Please Enter your name</p>
      <p><input type="text" name="adamlistek" /></p>
      <p><input type="submit" value="Submit" /></p>
    </form>
  </body>
</html>

10. 마지막으로, 시스템에서 로컬로 응용 프로그램(app.py)이 작동하는지 확인하기 위해 아래의 Python 명령을 실행하십시오.

Python app.py

아래에서 볼 수 있듯이, 응용 프로그램은 Ubuntu 머신에서 성공적으로 실행되지만 Docker에서는 그렇지 않습니다. 다음 섹션에서 Docker에서 동일한 응용 프로그램을 시작할 것입니다.

Running the Python application on the ubuntu machine.

Python Flask API 응용 프로그램 배포를 위한 Dockerfile 생성

이제 로컬 시스템에서 Python Flask 응용 프로그램이 작동하는 것을 확인했습니다. 그러나 Docker에 응용 프로그램을 배포하기 전에 Dockerfile을 만들어서 모든 지시사항을 정의할 것입니다.Docker 이미지를 빌드하기 위한.

~/docker_python_flask_demo디렉터리에 Dockerfile이라는 파일을 만들고 아래 내용을 Dockerfile에 복사/붙여넣으십시오.

도커는 기본 이미지 (ubuntu:18.04) 위에 새로운 도커 이미지를 빌드하기 위해 이 Dockerfile을 사용합니다.

# 다음 명령에 대한 기본 이미지를 설정합니다
FROM ubuntu:18.04
# 작업 디렉토리를 컨테이너 내부에서 설정합니다
WORKDIR /app
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev
# 파일들을 작업 디렉토리로 복사합니다
COPY form.html /app/form.html
# 의존성 파일들을 작업 디렉토리로 복사합니다
COPY requirements.txt /app/requirements.txt
# 의존성을 설치합니다
RUN pip install -r requirements.txt
# 모든 것을 작업 디렉토리로 복사합니다
COPY . /app
# 컨테이너 시작 시 실행할 명령입니다
CMD [ "python" , "./app.py" ]

이제, Python Flask 애플리케이션을 실행하기 위해 필요한 모든 파일이 작업 디렉토리 (~/docker_python_flask_demo)에 포함되어 있는지 확인하기 위해 아래의 tree 명령을 실행하세요.

tree  
Verifying all Required Files to Run the Flask Application Exist

Python Flask API 애플리케이션을 위한 도커 이미지 빌드

이제 Python Flask 애플리케이션을 배포하기 위해 필요한 파일들이 있지만, 이미지를 빌드하지 않으면 이 파일들은 아무 작업도 수행하지 않습니다. Dockerfile에서 설정한 명령을 기반으로 도커 이미지를 빌드하기 위해 docker build 명령을 실행합니다.

다음 명령을 사용하여 작업 디렉토리(.)에 Docker 이미지를 빌드하십시오. 이 명령은 이미지를 flask-image 버전 1(:v1)로 태그합니다(-t).

sudo docker build -t flask-image:v1 .
Building the Docker Image

이제 모든 사용 가능한 이미지를 나열하려면 아래의 docker 명령을 실행하십시오.

sudo docker images

아래에서 REPOSITORY와 같은 여러 속성이 반환됩니다. REPOSITORY 이름이 flask-image이며 버전(v1)으로 태그되어 있음을 주목하십시오.

Verifying the New Docker Image (flask-image)

Docker 컨테이너에서 Python Flask 애플리케이션 실행

Docker 이미지를 만든 후 Docker 컨테이너에서 Python 플래시 애플리케이션을 실행할 수 있습니다. Docker 컨테이너는 코드와 해당 종속성을 묶어 애플리케이션을 빠르게 실행합니다.

다음을 수행하려면 다음 명령을 실행하십시오:

  • 컨테이너를 백그라운드 모드(-d)로 시작하여 생성 시 콘솔 출력을 반환합니다.
  • Docker 호스트 포트(-p 5000:5000)를 컨테이너의 포트와 매핑합니다.
  • flask-image:v1 컨테이너를 시작합니다.
sudo docker run -d -p 5000:5000 flask-image:v1

2. 다음으로, 아래의 docker 명령을 실행하여 Docker 엔진에 있는 모든 컨테이너를 나열합니다. Docker가 컨테이너를 성공적으로 생성했는지 확인하세요.

sudo docker ps -a
Verifying the Docker container in the Docker engine

3. 마지막으로, 다음 명령을 실행하여 elinks를 사용하여 Ubuntu 머신에서 웹 브라우저를 엽니다.

elinks form.html

이 명령은 터미널에서 웹 브라우저를 열고 이름을 요청합니다.

이름을 입력하고 제출 버튼을 누르세요.

Accessing the login web page with the form to enter your name

4. 아래에서 확인할 수 있듯이, 제출 버튼을 누른 후에 로그인 기능이 Flask 애플리케이션에서 성공 기능으로 리디렉션됩니다.

Displaying the welcome message in the web browser

결론

이 튜토리얼은 Python Flask API Docker 컨테이너를 Docker 이미지를 사용하여 설정하는 과정을 안내하기 위한 것이었습니다. 또한 Dockerfiles을 사용하여 Python Flask 컨테이너를 시작하는 방법에 대해 알아보았습니다. 이를 통해 선택한 대로 사용자 정의된 컨테이너를 편집하고 빌드할 수 있습니다.

그러면 Docker 컨테이너에 배포할 다른 응용 프로그램이 있나요? 어쩌면 Docker MongoDB 컨테이너가 있을까요?

Source:
https://adamtheautomator.com/python-flask-api/