https://docs.docker.com/get-started/docker-concepts/building-images/writing-a-dockerfile/
Dockerfile은 컨테이너 이미지를 생성하기 위해 사용되는 텍스트 기반 문서. Dockerfile은 이미지 빌더(builder)에게 실행할 명령어들, 복사할 파일, 시작 명령 등에 대한 지침(instructions)을 제공
예를 들면, 다음 Dockerfile은 실행이 가능한 상태의 Python앱을 만듦 :
FROM python:3.12
WORKDIR /usr/local/app
# Install the application dependencies
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# Copy in the source code
COPY src ./src
EXPOSE 5000
# Setup an app user so the container doesn't run as the root user
RUN useradd app
USER app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]
Dockfile에서 자주 사용하는 명령어들은 다음과 같음 :
FROM <image>
빌드가 확장할 기본 이미지(base image)를 지정
WORKDIR <path>
파일들이 복사되고 명령어들이 실행될 이미지 내 작업 디렉터리(working directory) 또는 path를 지정
COPY <host-path> <image-path>
빌더(builder)에게 host로부터 파일들을 복사하고, 복사한 파일들을 컨테이너 이미지에 넣으라고 알려주는 지침(instruction)
RUN <command>
빌더(builder)가 지정된 명령을 실행하도록 알려주는 지침(instruction)
ENV <name> <value>
실행중인 컨테이너가 사용할 환경 변수 설정
EXPOSE <port-number>
이미지가 노출(expose)시키고자 하는 포트를 나타내는 구성을 이미지에 설정
USER <user-or-uid>
이후 지침(instruction)들을 수행하기 위해 기본(default) 유저 설정
CMD ["<command>", "<arg1>"]
이미지를 사용하는 컨테이너가 실행할 기본(default) 명령어를 설정
Dockerfile은 대부분 다음 과정들로 이뤄짐 :