가상환경 만들기
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