brunch

You can make anything
by writing

C.S.Lewis

by 찐님 May 02. 2024

Fast API 프로젝트 Docker로 배포하기

내가 이해한대로 사용해보기



5/14 내용이 수정되었습니다



도커?

쉽게 말해 내가 개발한 프로젝트(=어플리케이션 = 코드 등)를 패키징할 수 있는 툴이다. 

컨테이너를 기반으로 어느 환경에서나 동일하게 동작하도록한다. 

그리고 도커는 기본적으로 우분투에서 사용이 가능하다고 한다. 




이미지? 

어플리케이션을 실행할 때 필요한 코드, 시스템 라이브러리 그리고 설정 등을 포함한 템플릿같은 것이다.

쉽게 말해 이렇게 프로그램을 실행하겠다라는 설계도로 비유할 수 있을 것 같다. 




컨테이너?

해상에서 사용하는 컨테이너는 이런 규격화된 형태를 가지고 있다. 그래서 안에 어떤 내용물이 있는지 신경안써도 그냥 옮기고, 내리면 된다. 


도커의 컨테이너도 비슷하게 어플리케이션을 분리하는 단위라고 생각하면 될 것 같다. 그리고 우리가 만들었던 이미지를 이용하여 컨테이너를 만든다. 







Docker의 구조...?


* 하나의 Image로 여러개의 Container를 만들 수 있다. 

* Frontend에서는 그럴 필요가 있는지는 모르겠지만, Backend같은 경우는 트래픽처리를 위해 Container를 병렬적으로 사용한다고 함






사용하기 


순서는 이 이미지와 같다. 



1. Dockerfile을 루트 경로 혹은 main.py가 있는 경로에 만들어준다.


1-1 라이브러리를 도커허브로부터 가져오기

도커허브에서 내가 사용하려는 라이브러리를 다운받을 수 있다. 


나는 파이썬 프로젝트를 배포할 예정이라 

도커허브 사이트에서 python을 가져온다라는 의미의 FROM python:버전 을 적어주었다. 

만약 React 프로젝트라면 FROM node로 적으면 된다. 


1-2. requirements.txt를 만든 후 사용한 라이브러리 목록 작성 

fastapi

uvicorn

pydantic

sqlalchemy

aiomysql

loguru

python-jose

passlib

ujson


1-3. 필요한 명령어 작성

requirements.txt를 도커에 복사하고, 기타 필요한 파일도 복사해준다. 



** 도커파일의 경우 하나라도 수정이 되면 이미지를 다시 빌드해야한다. 





2. Image 빌드

$ sudo docker build -t {이미지 이름} .




3. Container 실행

sudo docker run -p {호스팅포트}:{도커포트} -v /home/User/back/{로그 디렉토리}:/code/log {이미지 이름}

* -v 뒤에 있는 경로는 Container가 실행하고 있는 중에 쌓이는 로그파일을 나의 로컬 프로젝트에 동기화 시키기 위한 옵션이다. 필요하지 않다면 지워도 무방하다.







+@ 

이미지 삭제할 때 명령어 

sudo docker image rm diary_api

컨테이너 삭제할 때 명령어

sudo docker rm -f {컨테이너 ID}


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari