자율프로젝트: Dockerfile

상현·2022년 11월 29일
1
post-thumbnail

우리는 이번 프로젝트에서 Dockerfile과 Docker Compose를 사용했다.
먼저 DockerFile에 대해 이야기를 해보려고 한다.


Docker는 Dockerfile에서 지시사항을 읽어오는 것으로 이미지를 자동적으로 빌드할 수 있다. Dockerfile은 사용자가 이미지를 구성하기 위해 사용하는 모든 명령어를 포함하는 텍스트 문서이다.

출처

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: 어떤 이미지를 베이스로 빌드를 시작할지를 정한다
    • 우리의 경우 파이썬3.7.13-slim-bullseye로 했는데 여기서 slim은 그 의미대로 최소한의 패키지만 설치되었음을 의미한다.

  • WORKDIR: 작업위치를 지정하고, 없으면 해당 위치를 만든다.

  • RUN: 새로운 레이어에서 명령을 실행하고 새로운 이미지를 생성한다.
    • 해당 방식으로 install처럼 설치시 물음이 나타날 때 우리가 y를 쳐줄 수 없기에 -y--yes, --assume-yes 플래그로 추가적인 입력을 막는다.

  • COPY: 빌드 중에 파일 또는 폴더를 이미지에 가져오는 것이다.
    • 위의 코드에서는 app이라는 폴더를 이미지에 가져왔다.

  • EXPOSE: 빌드로 생성된 이미지에서 열어줄 포트를 의미한다.
    • 위의 코드에서는 국룰 8080번 포트를 사용했다.

  • CMD: docker run을 실행할 때에 추가적인 명령어를 이용해 기존 명령어를 수정할 때 사용한다.
    • 어떻게 보면 함수의 매개변수에 default값을 주는 것과 비슷하다고 볼 수 있다.
    • CMD 는 마지막 한 줄만 사용된다.

이렇게 작성된 Dockerfile을 이용해 이미지를 빌드하면 된다.

docker build -t <이미지 이름>:<버전> <Dockerfile의 위치>

build가 정상적으로 완료되었는지는 docker images를 통해 확인할 수 있다.

0개의 댓글