Python Flask 서비스를 컨테이너화하고 MariaDB를 구성
Flask 웹 서비스를 도커로 구성해보고 DB에 연동해본 후 Docker compose를 통해 관리
1) 도커, 컨테이너에 대한 이해
2) MariaDB를 컨테이너로 구성 및 Python Flask 연동
3) docker compose를 통해 여러개의 컨테이너를 효과적으로 관리
사전 지식
1) 컨테이너란?
실습
1) 이미지 빌드
pip3 freeze > requirements.txt
//현재 환경에 설치된 패키치들의 이름과 버전 정보를 requirements.txt파일에 저장
touch app.py
//app.py라는 flask app파일 생성
touch Dockerfile
//Docker image를 만들기 위한 Dockerfile 생성
//Dockerfile이란 이미지를 생성할 때와 이미지를 통해 컨테이너를 구동할 때
//어떤 작업을 실행할지를 작성해놓는 파일
* python3 -m flask run
=> -m mod : run library module as a script (terminates option list)
=> directory에 여러 개의 *.py파일 중 가장 알파벳 순으로 가장 앞에 있는 1개의 파일만을 실행하며
if __name__ =="__main__" : 을 통해서 option을 설정할 수 없는데
이해한 바에 따르면 flask module이 *.py파일을 import형태로 읽어와서 인 것 같다.
=> 위 스크린샷 처럼 python3의 --host, --port 옵션을 통해 이를 대체할 수 있다.
1) #syntax=docker/dockerfile:1
=> buildkit이 빌드 전 syntax를 자동으로 최신 버전으로 업데이트 (docker/dockerfile:1은 latest Release syntax를 의미)
3) FROM python:3.8-slim-buster
=> FROM은 새로운 이미지를 생성할 때 기반으로 할 이미지를 지정
4) WORKDIR
=> 이미지에서의 작업 directory를 지정, 이후 명렁어는 해당 directory를 기준으로 동작
5) COPY requirements.txt requirements.txt
=> locale directory의 requirements.txt 파일을 이미지에 requirements.txt라는 이름으로 복사한다.
6) RUN pip3 install -r requirements.txt
=> requirements.txt내부의 패키지들을 이미지 내부에 설치한다.
7) COPY . .
=> locale directory에 있는 모든 파일을 이미지에 복사
8) CMD ["python3", "-m", "flask", "run", "--host=0.0.0.0"]
=> 컨테이너 내에서 이미지가 실행될 때 실행할 명령어
이미지 내부의 디텍토리 구조
app
|___ app.py
|___ requirements.txt
|___ Dockerfile
* Dockerfile을 아래와 같이 수정해보았다.
1) 4번째 <COPY . .>이 중점으로
=> 전체 디렉토리를 복사하는 과정에서 requirements.txt도 복사가 될텐데 굳이 2번 반복해야되나 싶어서 빼고 해봤는데 정상적으로 작동했다.
2) 6번째 <CMD ["...."]>
=> "--host=0.0.0.0"이 없어도 localhost에서는 연결이 되야되지 않나 생각하고 시도해봤는데 되지않았다.
여러번 다양한 방법으로 시도해봤는데 안된걸 보고
<컨테이너 내부에서 실행되는 이미지에 외부 호스트가 지정되어있지 않다면
컨테이너 내부와 외부가 연결이 되지 않는다 라는 가설을 세웠다.> (나중에 다시볼때 고치자)
명령어 정리 docker run -d -p 3000:5000 --name rest-server python-docker
-d : --detach 컨테이너가 분리된 상대로 터미널 프롬프트에 들어감
-p 3000:5000 외부의 3000포트와 내부의 5000포트를 연결
--name rest-server : rest-server라는 이름으로 컨테이너 실행
docker ps : 실행 중인 컨테이너 목록 확인
docker ps -a : 모든 컨테이너 목록 확인
docker stop <컨테이너 이름> : 컨테이너 정지
docker restart <컨테이너 이름> : 컨테이너 재시작
docker rm <컨테이너 이름> : 컨테이너 제거
<참고>
'프로젝트' 카테고리의 다른 글
[동계 프로젝트] 전동킥보드 주행 중 헬멧 착용 여부 확인 프로그램 (0) | 2021.11.03 |
---|---|
[졸업 논문] 스마트 안전 장비 (0) | 2021.11.03 |
Application 배포 (By AWS EKS, Kubernetes) (0) | 2021.08.04 |
도커 컨테이너 구성 및 활용(2) (0) | 2021.08.04 |
Cloud 환경 구성 및 환경 설정 (0) | 2021.08.02 |
댓글