fastapiboard
├─ Dockerfile
├─ myapp
│ ├─ domain
│ │ ├─ articles
│ │ ├─ comments
│ │ └─ users
│ ├─ main.py
│ ├─ migrations
│ └─ models.py
└─ requirements.txt
FROM python:3.9
WORKDIR /test
COPY ./requirements.txt /test/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /test/requirements.txt
COPY ./myapp /test/myapp
WORKDIR /test/myapp
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Docker을 실행하고 아래의 명령어를 입력해준다.
docker build -t test-image:latest .
Dockerfile을 작성할때, main.py
의 구성에 주의해야한다.
내 main.py
에는 같은 디렉토리에 있는 domain
을 import
하는 구조로 되어있었는데,
myapp
디렉토리에서 uvicorn main:app --reload
를 실행하면 문제가 발생하지 않았지만,
상위 디렉토리인 fastapiboard
에서 uvicorn myapp.main:app --reload
로 실행하면 domain
모듈을 불러오지 못해 오류가 발생했다.
따라서, Dockerfile을 작성할때도 이에 주의하여 명령어 직전에 WORKDIR
로 디렉토리를 설정해주어야한다.
이미지 파일을 생성하고 실행까지 제대로 작동했다.
이제 이 파일을 배포해보겠다.