docker로 Flask 웹 애플리케이션 실습

2023. 9. 18. 22:58컴퓨터

docker라는 가상환경 안에서 컨테이너를 만들고 서버를 띄우는 과정에서 dockerfile, docker-compose.yml을 통해 해당 과정을 자동화하는 방법을 배웠다. 개인 서버가 아닌 대량의 서버를 한번에 관리할 때 도움이 될 것 같다.

하지만 dockerfile과 docker-compose.yml코드를 실행하는 과정 중 취약, 악성코드나 잘못되 포트가 연결되어 있을 때 보안 상 허점이 생길 수 있기 때문에 해당 파일의 구조와 서버가 만들어지는 과정을 자세히 알아놓아야 할 것 같다.

docker과 웹 frame에 아직 익숙하지 않아서 오늘은 만들어진 코드를 기준으로 과정을 살펴보고

다음 포스팅에서 도커파일해석과 서버프로그래밍에 대한 간단한 공부를 해 볼 예정이다.

 

 

우선 Flask frame에서 웹 서버를 만드는 방법을 참고합니다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Docker!'

if __name__ =='__main__':
    app.run(debug=True, host = '0.0.0.0', port = 8000)

위의 flask 예시 파일을 통해 파이썬 언어로 웹서버가 만들어는 것을 살펴보았습니다. 해당 파일에 html을 추가하여 웹을 구축하기는 힘들어 보이니 아마 flask의 다른 모듈을 사용하여 웹서버를 구축하는 것 같은데....이야기가 산으로 가는 것 같으므로(배워야 할게 진짜 많네요)오늘은 docker에서 flask 웹 애플리케이션을 만드는 것에 다시 집중하겠습니다!

 

1. dockerfile로 flask 이미지 빌드하기

*dockerfile 작성 방법은 웹사이트를 참고했습니다.

추가 웹사이트: https://docs.docker.com/engine/reference/builder/#from

FROM : 언어, version

WORKDIR : 작업장소, 경로

COPY : 호스트에서 이미지 파일 복사하여 추가

RUN : 이미지를 지정하면서 실행할 명령 지정

ENTRYPOINT : 컨테이너 어플 지정 ( 컨테이너 시작 시 실행할 명령어 )

EXPOSE : 컨테이너의 포트 지정

ADD : 이미지 생성 시 파일 추가

CMD : 컨테이너 어플 지정 (컨테이너 시작 시 명령어 지정)

docker build -t <image> -f ./Dockerfile

2. docker container 실행하기

  docker run -d --name <container> -p <port:port> <image>

3. docker-compose.yml로 2개의 flask container (flask_app_1, flask_app_2) 만들기

참고 웹사이트: Microsoft docker-compose.yml을 사용하여 다중 애플리케이션 정의

 

docker-compose.yml을 사용하여 다중 컨테이너 애플리케이션 정의 - .NET

docker-compose.yml을 사용하여 다중 컨테이너 애플리케이션에서 마이크로 서비스 컴퍼지션을 지정하는 방법입니다.

learn.microsoft.com

참고 웹사이트:  https://github.com/compose-spec/compose-spec/blob/master/spec.md

여러 attribute이 있었지만 아래 yml파일을 작성할 때는 build(context, dockerfile), ports, volume을 사용했습니다.

dockerfile은 위에서 사용한 dockerfile을 다시 사용했습니다.