Dockerfile, Docker Image Build
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을 사용하면 사용자 정의 이미지를 만들어 애플리케이션 배포 및 관리에 사용할 수 있습니다.