Tech & TIL

Docker 문법 정리 본문

MLOps

Docker 문법 정리

Jadon Yang 2022. 5. 9. 16:36

Dockerfile에서 사용되는 문법 정리

1) syntax

# syntax=docker/dockerfile:1

반드시 Dockerfile 첫 번째 줄에 적어야한다. Parser directive라고 표현하며 도커 빌더에게 도커 파일을 파싱할 때 어떤 문법으로 파싱해야하는지 알려주는 역할을 한다.

docker/dockerfile:1은 항상 가장 최신의 version 1 syntax로 설정해주기 때문에 공식 문서에서 권장하고 있다.

2) FROM

FROM python:3.8-slim-buster

도커 이미지는 다른 이미지로 부터 상속받을 수 있다. 따라서 스스로 Base Image를 구축하는 것보다 Official 하게 제공되는 Base Image를 사용하는 것을 권장한다. 여기서는 Python 3.8 버전의 Base Image를 기준으로 예를 든다.

3) WORKDIR

WORKDIR /app

Working Directory를 설정하는 표현이다. 이것이 도커에게 default location으로 /app 을 사용하라고 알려주는 역할을 한다. 이렇게 함으로써 개발자들은 도커 파일을 작성하면서 Full Path를 적어야하는 불편함을 방지할 수 있다.

4) COPY

COPY requirements.txt requirements.txt

도커 파일에 requirements.txt 라는 파일을 설치하는 명령을 적고 싶다면 해당 파일을 도커 이미지에 복사해주어야 한다. COPY를 하지 않는다면 이미지는 해당 파일의 위치를 알 수 없다.

COPY는 두 개의 파라미터를 가진다.

  1. 이미지에 복사할 파일
  2. 파일을 어디에 복사할지

따라서 위 명령은 *"현재 폴더 밑의 requirements.txt를 이미지의 현재 폴더의 requirements.txt에 복사하겠다"* 는 말이 된다.

5) RUN

RUN pip3 install -r requirements.txt

COPY로 이미지에 requirements.txt가 복사되고 나면 RUN 명령어로 pip3 install을 실행할 수 있다.

명령어가 실행되면 이미지에 requirements.txt 내부에 있는 라이브러리들이 설치가 된다.

6) COPY . .

COPY . .

지금까지의 과정을 통해, 우리는 Python 3.8 버전의 이미지를 갖게 되었고 Dependencies를 설치 완료 되었다. 다음 단계는 우리의 전체 소스코드를 이미지에 쓰는 것이다. COPY 명령어를 사용하여 (. 은 현재 위치를 의미) 현재의 전체 코드를 복사하여 이미지에 넣어준다.

7) CMD

CMD ["python3", "-m", "flask", "run", "--host=0.0.0.0"]

마지막으로 우리가 해야할 일은 도커에게 이미지가 컨테이너 내부에서 실행되었을 때 어떤 명령어를 실행해야할지 알려주는 것뿐이다. CMD 명령어를 사용하여 터미널에서 사용하는 코드를 그대로 넣어주면 터미널과 동일하게 동작한다.

정리

Dockerfile

# syntax=docker/dockerfile:1

FROM python:3.8-slim-buster

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .

CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]

Reference

Docker Official Document

'MLOps' 카테고리의 다른 글

Docker 튜토리얼 [파이썬] - 2  (0) 2022.05.09
Docker 튜토리얼 [파이썬] - 1  (0) 2022.05.09
Comments