우리는 이번 프로젝트에서 Dockerfile과 Docker Compose를 사용했다.
먼저 DockerFile에 대해 이야기를 해보려고 한다.
아래 코드는 우리팀의 Dockerfile이다.
FROM python:3.7.13-slim-bullseye
WORKDIR /app
COPY requirements.txt .
RUN apt-get update && apt-get upgrade -y
RUN apt-get install libgl1-mesa-glx libglib2.0-0 -y
RUN pip install --no-cache-dir --upgrade -r requirements.txt
COPY app .
EXPOSE 8080
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
순서대로 내용을 살펴보면
FROM
,WORKDIR
,RUN
,COPY
,EXPOSE
,CMD
의 명령어가 앞에 붙어있는 것을 확인할 수 있다.
FROM
: 어떤 이미지를 베이스로 빌드를 시작할지를 정한다slim
은 그 의미대로 최소한의 패키지만 설치되었음을 의미한다.WORKDIR
: 작업위치를 지정하고, 없으면 해당 위치를 만든다.RUN
: 새로운 레이어에서 명령을 실행하고 새로운 이미지를 생성한다.install
처럼 설치시 물음이 나타날 때 우리가 y를 쳐줄 수 없기에 -y
나 --yes
, --assume-yes
플래그로 추가적인 입력을 막는다.COPY
: 빌드 중에 파일 또는 폴더를 이미지에 가져오는 것이다. app
이라는 폴더를 이미지에 가져왔다.EXPOSE
: 빌드로 생성된 이미지에서 열어줄 포트를 의미한다.8080
번 포트를 사용했다.CMD
: docker run
을 실행할 때에 추가적인 명령어를 이용해 기존 명령어를 수정할 때 사용한다.CMD
는 마지막 한 줄만 사용된다.docker build -t <이미지 이름>:<버전> <Dockerfile의 위치>
build가 정상적으로 완료되었는지는 docker images
를 통해 확인할 수 있다.