■ 우분투에서 FastAPI 서버를 위한 도커 이미지를 생성하고 실행하는 방법을 보여준다.
※ 우분투 버전은 22.04이다.
※ 본인의 사용자 계정 디렉토리는 /home/king이다.
1. CTRL + ALT + T 키를 눌러서 [터미널]을 실행한다.
2. [터미널]에서 아래 명령을 실행한다.
▶ 실행 명령
1 2 3 |
cd ~ |
3. [터미널]에서 아래 명령을 실행 파이썬 프로젝트 디렉토리를 만들고 해당 디렉토리로 이동한다.
▶ 실행 명령
1 2 3 4 |
mkdir testproject cd testproject |
※ testproject : 파이썬 프로젝트 디렉토리명
4. 해당 폴더에 아래 파일을 추가한다.
▶ ~/testproject/main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from fastapi import FastAPI fastAPI = FastAPI() @fastAPI.get("/") def root(): return {"message" : "Hello World"} @fastAPI.get("/home") def home(): return {"message" : "home"} |
5. [터미널]에서 아래 명령을 실행해 파이썬 가상 환경을 만든다.
▶ 실행 명령
1 2 3 |
python3 -m venv env |
※ env : 파이썬 가상 환경명
6. [터미널]에서 아래 명령을 실행해 파이썬 가상 환경을 활성화한다.
▶ 실행 명령
1 2 3 |
source ./env/bin/activate |
7. [터미널]에서 아래 명령을 실행해 FastAPI 모델을 파이썬 가상 환경에 설치한다.
▶ 실행 명령
1 2 3 |
pip install "fastapi[all]" |
8. [터미널]에서 아래 명령을 실행해 FastAPI 서버가 정상적으로 실행되는지 확인한다.
▶ 실행 명령
1 2 3 |
uvicorn main:fastAPI --reload |
9. [터미널]에서 아래 명령을 실행해 requirements.txt 파일을 생성한다.
▶ 실행 명령
1 2 3 |
pip freeze > requirements.txt |
10. 도커 파일을 아래와 같이 추가한다.
▶ ~/testproject/dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# 우분투 이미지를 가져온다. FROM ubuntu:22.04 # 설치시 확인 메세지를 무시한다. (권장안함) #ENV DEBIAN_FRONTEND=noninteractive # 가상환경 디렉터리 경로를 설정한다. ENV VENV_PATH=/testproject/venv # 파이썬을 설치한다. RUN apt-get update -y RUN apt-get install -y python3 python3-pip python3-venv RUN apt-get clean # 작업 디렉토리를 지정한다. WORKDIR /testproject # 가상환경을 생성한다. RUN python3 -m venv $VENV_PATH # requirements.txt 파일을 복사하고 파이썬 모듈을 설치한다. COPY requirements.txt . RUN $VENV_PATH/bin/pip install --no-cache-dir -r requirements.txt # 소스를 복사한다. COPY . . # 노출 포트를 지정한다. EXPOSE 8000 # 가상환경 활성화하고 서버를 실행한다. CMD ["/bin/bash", "-c", "source $VENV_PATH/bin/activate && uvicorn main:fastAPI --host 0.0.0.0 --port 8000"] |
11. [터미널]에서 아래 명령을 실행해 도커 이미지를 만든다.
▶ 실행 명령
1 2 3 |
sudo docker build -t testproject-image . |
12. [터미널]에서 아래 명령을 실행해 도커 이미지를 실행한다.
▶ 실행 명령
1 2 3 |
sudo docker run -it --rm -p 8000:8000 testproject-image |