본문 바로가기
Library

Dockerfile, Docker Image Build

by Andrew's Akashic Records 2023. 4. 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