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 |