Dockerfile

Hyuk4316·2024년 2월 14일
1

Docker

목록 보기
1/3
post-thumbnail

오픈소스 프로젝트를 보다 보면 코드 내 Dockerfile를 발견할 수 있다.
이러한 Dockerfile은 프로젝트를 Docker Image로 만들기 위한 규칙을 정의해 놓은 파일이라 할 수 있다.

Build

Docker에서 Dockerfile를 읽어 image를 만드는 것을 Build라고 한다.

# syntax=docker/dockerfile:1
FROM ubuntu:latest

RUN apt-get update && apt-get install -y build-essentials
COPY main.c Makefile /src/
WORKDIR /src/
RUN make build
$ docker build -t test:latest .


FROM을 통해 base image를 정하고, 각각의 명령어(RUN, COPY, etc.)는 layer로 저장되게 된다.

docker build명령을 실행하면 image가 생성되게 된다.

  • -t : 파일 이름을 설정
  • . : 현재 위치에서 빌드를 시작

기존 이미지를 사용하지 않는 'parent image'를 만들고 싶다면 FROM scratch를 이용해 만들 수 있다. Docker Docs: Build base-images

기존에 진행된 작업은 캐싱되어 같은 작업을 반복하지 않는다.
> Velog: Docker Caching 전략

.dockerignore

git에서 사용하는 .gitignore와 같이, 빌드 과정에서 특정 파일을 무시 할 때는 .dockerignore를 이용해 포함하지 않을 파일을 설정할 수 있다.
%% build context에서 제외할 수 있다고 나와있음 %%

좀더 자세한 내용은 dockeringore-files에서 알 수 있다.

Environment Replacement

ENV 등으로 지정된 환경변수의 경우에 명령어 내 ${variable_name}또는 $variable_name와 같은 형태가 발견되었을 때 값으로 교체된다.

ENV JAVA_HOME=/bin/java/
COPY javac.exe ${JAVA_HOME}

추가적인 기능으로는 다음과 같은 것이 있다.

  • ${variable:-word} : variable이 없을 때 word라는 값이 사용된다.
  • ${variable:+word} : variable이 있을 때 word라는 값이 사용된다.
    > environment replacement

Dockerfile 명령어

FROM image : 기존 이미지로부터 Layer를 추가함

RUN command : 이미지 빌드시 실행될 명령어
CMD command : 컨테이너가 생성될 때 실행될 명령어 (run 명령어에서 대체할 수 있음(실행 안될 수 있음))
ENTRYPOINT command : 컨테이너가 생성될 때 실행될 명령어 (무조건 실행됨)

WORKDIR path : 작업 디렉토리를 변경함
ENV key=value ... : 환경변수를 설정함
VOLUME ["path"] : 볼륨 마운트
EXPOSE port[/protocol] : 애플리케이션이 수신받을 포트

COPY path1 path2 : 파일을 이미지로 복사함 (path1 to path2)
SHELL ["/bin/bash", "options"] : 기본 명령 셸을 지정함

출처

Docker Docs: Dockerfile Reference
Docker Docs: .dockerIgnore files
Docker Docs: cache management

profile
한국공학대학교 소프트웨어전공 23학번

0개의 댓글