새소식

Docker

[🐳Docker] Flask App 띄우기

  • -

가상환경 만들기

C:\docker_study\flask_practice>python -m venv venv

가상환경 실행

C:\docker_study\flask_practice>venv\Scripts\activate

flask 설치

(venv) C:\docker_study\flask_practice>pip install flask

설치 확인

(venv) C:\docker_study\flask_practice>pip freeze click==8.1.3 colorama==0.4.5 Flask==2.1.2 itsdangerous==2.1.2 Jinja2==3.1.2 MarkupSafe==2.1.1 Werkzeug==2.1.2

flask 실행

python app.py

app.py 코드

from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return 'hello world' if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)

Dockerfile 작성하기

Dockerfile

FROM python:3.8-alpine COPY . /app WORKDIR /app RUN pip3 install flask RUN chmod +x /app/app.py CMD ["python3", "app.py"]

FROM  : 어떤 리눅스를 사용할 지, 해당 Docker의 이미지를 지정

COPY .  은 현재 디렉토리,  /app 은 컨테이너의 디렉토리 → docker build를 실행하는 곳의 파일을 /app으로 복사

WORKDIR : 컨테이너에서 명령어가 실행되는 디렉토리, 앞에서 /app에 소스코드를 copy했으므로 /app에서 실행

RUN : 컨테이너를 구성할 파일을 만들 때 사용
           위 Dockerfile에서는 flask 라이브러리 설치, app.py의 권한을 바꿔주는 명령어가 실행

CMD : 컨테이너가 실행된 후 실행할 명령어
           위 Dockerfile에서는 app.py를 실행하여 flask를 실행한다.

 

Dockerfile로 Build

C:\docker_study\flask_practice>docker build -t flask-app .

이미지 확인

C:\docker_study\flask_practice>docker images REPOSITORY TAG IMAGE ID CREATED SIZE flask-app latest 7fb384a3438b 2 minutes ago 76.1MB

Container 확인

아직 띄우지 않아서 없는 것을 알 수 있다.

C:\docker_study\flask_practice>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Container 띄우기

C:\docker_study\flask_practice>docker run -d -p 5000:5000 flask-app

app.py를 수정할 경우 다시 컨테이너를 빌드하고 다시 띄어주어야 한다.

우선 컨테이너를 종료한다.

C:\Users\korea>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 21925ba1dcd8 flask-app "python3 app.py" 2 minutes ago Up About a minute 0.0.0.0:5000->5000/tcp brave_keller C:\Users\korea>docker kill 21925ba1dcd8 21925ba1dcd8

다시 빌드

C:\docker_study\flask_practice>docker build -t flask-app .
C:\docker_study\flask_practice>docker images REPOSITORY TAG IMAGE ID CREATED SIZE flask-app latest c5f8cf2050f6 17 seconds ago 76.1MB <none> <none> 7fb384a3438b 7 minutes ago 76.1MB C:\docker_study\flask_practice>docker run -d -p 5000:5000 flask-app 8e004de4cc539aaa16f9be53625fc1cd2f13248b4ea0c5c5eb4a21b8d97ca6ba

 

다른 버전으로도 build해서 띄울 수 있다.

C:\Users\korea>docker build -t flask-app:v2 .
C:\docker_study\flask_practice>docker images REPOSITORY TAG IMAGE ID CREATED SIZE flask-app latest c5f8cf2050f6 6 minutes ago 76.1MB flask-app v2 c5f8cf2050f6 6 minutes ago 76.1MB <none> <none> 7fb384a3438b 13 minutes ago 76.1MB

latest 버전을 끄지 않았으므로 v2를 실행할 때는 다른 포트로 띄워주어야 한다.

C:\docker_study\flask_practice>docker run -d -p 5001:5000 flask-app:v2 1c7d9100bd5349ebed6f15a0b27426efb65a9dfb9b11d0f8aea0c0b273a02a35
728x90
Contents