[Docker] Python Flask 웹 서비스 배포

2024. 11. 4. 14:12·OS/Docker
Docker 컨테이너에서 Python Flask 웹 애플리케이션을 실행하는 데 필요한 설정을 해보고자 한다. 설정을 한 후 테스트를 해보고 볼륨 마운트를 통해 호스트 파일을 컨테이너와 연결하여, 코드 수정 시 실시간 반영을 확인해보고자 한다. 

 

# Python & Flask  디렉터리 생성

ubuntu@docker:~/ch11$ mkdir py_flask && cd $_

 

#  Docker file 작성

ubuntu@docker:~/ch11/py_flask$ vi dockerfile-py

 

Python Flask라는 새로운 디렉터리를 생성한 후 Python Flask 애플리케이션을 실행하기 위한 환경을 구성하는 Dockerfile을 작성하고자 한다. 

 

# dockerfile-py 내용

FROM python:3.8-alpine
RUN apk update && \
 apk add --no-cache \
 bash
RUN apk add --update build-base python3-dev py-pip
ENV LIBRARY_PATH=/lib:/usr/lib
ENV FLASK_APP=py_app
ENV FLASK_ENV=development
EXPOSE 9000
WORKDIR /py_app
COPY . /py_app
RUN pip install -r ./app/requirements.txt
ENTRYPOINT ["python"]
CMD ["./app/py_app.py"]

# Flask 앱 디렉터리 생성

ubuntu@docker:~/ch11/py_flask$ mkdir app && cd $_
ubuntu@docker:~/ch11/py_flask/app$ vi  py_app.py

 

Flask 애플리케이션의 코드를 작성해볼 것이다. .app 디렉터리를 생성하고 해당 디렉터리로 이동하여 py_app.py 파일을 만들어야 한다. 

 

# py_app.py 내용

from flask import Flask

## flask application 생성 코드

py_app = Flask(__name__)
## 특정 주소에 접속하면 바로 다음 줄에 있는 python_flask() 함수를
## 호출하는 flask decorator
@py_app.route('/')
def python_flask():
 return """
 <h1 style="text-align:center; color:deepskyblue;">
 Docker container application: Python & Flask!</h1>
 <p style="text-align:center; color:deepskyblue;">
 This is micro web framework for running Flask inside Docker.</p>
 """
## 프로그램 시작점일 때만 아래 코드 실행
if __name__ == '__main__':
 py_app.run(host='0.0.0.0', port=9000, debug=True)

# 개발 환경 요소 설정

ubuntu@docker:~/ch11/py_flask/app$ vi requirements.txt
ubuntu@docker:~/ch11/py_flask/app$ cd ..

 

우리가 웹 애플리케이션 밑에 필요한 파일을 작성해야한다. 즉, Flask 애플리케이션에 필요한 라이브러리 목록을 이 파일에 작성해야한다.  내용은 Flask이다. 

 

#  .dockerignore 파일 작성

ubuntu@docker:~/ch11/py_flask$ vi .dockerignore
파일내용 : dockerfile-py

Docker 빌드 과정에서 무시할 파일을 설정하기 위해 .dockerignore파일을 생성하였다.

 

 

 

#디렉터리 구조 확인

ubuntu@docker:~/ch11/py_flask$ tree -a
.
├── .dockerignore
├── app
│   ├── py_app.py
│   └── requirements.txt
└── dockerfile-py


ubuntu@docker:~/ch11/py_flask$ cat .dockerignore
dockerfile-py

 

#이미지 빌드

ubuntu@docker:~/ch11/py_flask$ docker build -t py_flask:1.0 -f dockerfile-py .

 

# 컨테이너 실행 및 볼륨 마운트

ubuntu@docker:~/ch11/py_flask$ docker run -it -p 9000:9000 -v ${PWD}/app:/py_app/app py_flask:1.0
 * Serving Flask app 'py_app'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:9000
 * Running on http://172.17.0.4:9000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 447-025-491
192.168.56.1 - - [04/Nov/2024 05:01:18] "GET / HTTP/1.1" 200 -
192.168.56.1 - - [04/Nov/2024 05:01:18] "GET /favicon.ico HTTP/1.1" 404 -

 

  • 호스트의 9000 포트를 컨테이너의 9000 포트와 연결을 해주었다.
  • 볼륨 마운트 (-v)
    • 호스트의 ${PWD}/app 디렉터리를 컨테이너의 /py_app/app 디렉터리로 마운트하여 실시간 코드 수정이 반영되도록 설정했다. 

 

# 소스 코드 수정 및 실시간 반영 확인 (2 번째 터미널 열어서 수정)

cd app/
vim py_app.py

 

# 수정 내용 : python & flask! 메시지를 BUSANIT로 변경해주기

<h1 style="text-align:center; color:deepskyblue;">
Docker container application: Busanit</h1>

 

배운 점

 

볼륨 마운트를 통해 호스트에서 코드 변경 시 컨테이너에 실시간 반영될 수 있도록 설정해주었다. 다음으로 브라우저에서 애플리케이션을 테스트하고, 코드 수정이 실시간 반영되는지 확인하여 개발 환경에서 편리하게 사용할 수 있는 설정을 완요할 수 있었다. 

저작자표시 비영리 변경금지 (새창열림)

'OS > Docker' 카테고리의 다른 글

[Docker] 멀티 컨테이너 서비스 구성 (feat. Docker Compose)  (1) 2024.11.04
[Docker] Docker Compose  (0) 2024.11.04
[Docker(go, shell-scr)] Multi-stage Build 이미지 경량화  (0) 2024.11.04
[Docker] 데이터 지속성을 위한 Volume 구성  (0) 2024.10.30
[Docker] scratch 이미지 경량화  (3) 2024.10.28
'OS/Docker' 카테고리의 다른 글
  • [Docker] 멀티 컨테이너 서비스 구성 (feat. Docker Compose)
  • [Docker] Docker Compose
  • [Docker(go, shell-scr)] Multi-stage Build 이미지 경량화
  • [Docker] 데이터 지속성을 위한 Volume 구성
Kouji
Kouji
Journey to Becoming a Data & Server Engineer
  • Kouji
    Kouji's Data & Server Journey
    Kouji
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Programming
        • Python
        • SQL
      • Data & AI
        • Data Analysis
        • Ai
      • Cloud(AWS)
      • OS
        • Linux
        • Docker
        • Jenkins
        • Ubuntu
        • Window
        • Kubernates
        • Ansible
      • Network
        • NVIDIA
        • Network[이론]
        • Network[GNS3, Packet]
        • Network[On-Premise]
        • Network [L2, L3]
      • 트러블 슈팅
      • Life
        • My Career Stories
        • Personal
      • 개발 + OS 지식 함양
  • 블로그 메뉴

    • 홈
    • 관리 페이지
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    VMware
    라우팅
    화이팅
    CISCO
    인프라
    네트워크엔지니어
    L3
    네트워크관리사
    서버
    docker
    IT
    서버엔지니어
    AWS
    네트워크엔지니어링
    알고리즘
    dns
    OS
    인프라엔지니어
    오블완
    웹
    시스템엔지니어
    보안
    ubuntu
    리눅스
    Linux
    스위치
    클라우드엔지니어
    네트워크
    티스토리챌린지
    도커
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kouji
[Docker] Python Flask 웹 서비스 배포
상단으로

티스토리툴바