Library

Dockerfile, Docker Image Build

Andrew's Akashic Records 2023. 4. 24. 11:24
728x90

Dockerfile은 Docker 이미지를 빌드하기 위한 스크립트 파일입니다. Dockerfile은 여러 명령어를 포함하며, 이를 통해 기존 이미지를 기반으로 새로운 이미지를 생성할 수 있습니다. 이 과정을 통해, 원하는 소프트웨어, 패키지 및 구성을 포함하는 사용자 정의 이미지를 만들 수 있습니다.

Dockerfile 문법과 주요 사용법에 대해 알아보겠습니다.

1. 기본 구조

Dockerfile은 각 줄마다 하나의 명령어를 포함하며, 주석은 '#'으로 시작합니다.

# 주석입니다.
INSTRUCTION argument


2. 주요 명령어

- `FROM`: 기본 이미지를 설정합니다. Dockerfile에서 가장 먼저 나와야 하는 명령어입니다.

  FROM ubuntu:20.04

- `RUN`: 이미지 빌드 시 스크립트나 명령어를 실행합니다. 여러 개의 RUN 명령어를 사용할 수 있습니다.

  RUN apt-get update && apt-get install -y curl

- `CMD`: 컨테이너가 실행될 때 기본 명령어를 설정합니다. CMD는 Dockerfile에서 하나만 사용해야 하며, 여러 개의 CMD가 있는 경우 마지막 CMD만 적용됩니다.

  CMD ["echo", "Hello, Docker!"]

- `ENTRYPOINT`: 컨테이너가 실행될 때 항상 실행되는 명령어를 설정합니다. CMD와 함께 사용할 경우, ENTRYPOINT 다음에 오는 인수로 CMD를 사용할 수 있습니다.

  ENTRYPOINT ["echo"]
  CMD ["Hello, Docker!"]

- `COPY`: 파일이나 디렉토리를 이미지에 복사합니다. `COPY <src> <dest>` 형식으로 사용합니다.

  COPY . /app

- `ADD`: 파일이나 디렉토리를 이미지에 추가합니다. 압축된 파일의 경우 자동으로 압축 해제하여 추가합니다. `ADD <src> <dest>` 형식으로 사용합니다.

  ADD app.tar.gz /app

- `WORKDIR`: 이후 명령어의 작업 디렉토리를 설정합니다.

  WORKDIR /app

  - `ENV`: 환경 변수를 설정합니다. `ENV <key>=<value>` 형식으로 사용합니다. 

ENV NODE_ENV=production

- `EXPOSE`: 컨테이너에서 사용할 포트를 지정합니다. 호스트와 연결하려면, 실행 시 `-p` 옵션을 사용해야 합니다.

  EXPOSE 80

- `VOLUME`: 데이터 볼륨을 설정하여 컨테이너와 호스트 사이에 데이터를 공유합니다

  VOLUME /data

- `ARG`: Dockerfile에 전달되는 빌드 시점의 변수입니다. `ARG <name>[=<default_value>]` 형식으로 사용합니다.

  ARG VERSION=latest

- `LABEL`: 이미지에 메타데이터를 추가합니다. `LABEL <key>=<value>` 형식으로 사용합니다.

  LABEL version="1.0" maintainer="your@email.com"

- `USER`: 이후 명령어를 실행할 사용자를 설정합니다.

  USER nonroot

- `ONBUILD`: 기반 이미지로 사용될 때 실행되는 명령어를 설정합니다. 다른 이미지가 이 이미지를 기반으로 생성될 때 실행됩니다.

  ONBUILD RUN npm install


3. Docker 이미지 빌드

Dockerfile을 사용하여 이미지를 빌드하려면 다음 명령어를 실행합니다.

docker build -t your-image-name:tag .


여기서 `your-image-name`은 원하는 이미지 이름, `tag`는 이미지의 태그, 마지막에 있는 '.'은 Dockerfile이 위치한 디렉토리를 가리킵니다.

예시:

docker build -t myapp:1.0 .


이제 Dockerfile 문법과 주요 사용법에 대해 알게 되었습니다. Dockerfile을 사용하면 사용자 정의 이미지를 만들어 애플리케이션 배포 및 관리에 사용할 수 있습니다.

728x90