[Docker] Dockerfile 요약 정리

SMONGS·2025년 4월 23일

Docker

목록 보기
2/7
post-thumbnail

기본 개념

Dockerfile은 Docker 이미지를 생성하기 위한 스크립트(설정 파일)입니다. Docker는 Dockerfile에 작성된 명령어를 순차적으로 실행하여 자동으로 이미지를 생성합니다. 도커 이미지는 서버 프로그램, 소스코드, 실행 파일을 포함한 프로그램 구동을 위한 "종합선물세트"라고 볼 수 있습니다.

Dockerfile 주요 명령어

FROM

  • 기본 이미지를 지정하는 명령어입니다
  • 모든 Dockerfile은 FROM 명령어로 시작해야 합니다
  • 예: FROM ubuntu:18.04 - Ubuntu 18.04를 기본 이미지로 사용

RUN

  • 컨테이너 내에서 명령어를 실행하는 데 사용됩니다
  • 주로 패키지 설치 등의 작업에 사용됩니다
  • 예: RUN apt-get update && apt-get install -y python3

COPY와 ADD

  • 파일을 이미지로 복사하는 명령어입니다
  • COPY: 로컬 파일을 컨테이너로 단순 복사
  • ADD: 압축 파일 자동 해제, URL에서 다운로드 등 추가 기능 제공

WORKDIR

  • 작업 디렉토리를 설정하는 명령어입니다
  • 이후의 명령어(RUN, CMD, ENTRYPOINT 등)가 실행될 디렉토리를 지정
  • 예: WORKDIR /app

ENV

  • 환경변수를 설정하는 명령어입니다
  • 예: ENV NODE_ENV production

EXPOSE

  • 컨테이너가 실행 중에 수신 대기할 포트를 지정합니다
  • 예: EXPOSE 80

CMD

  • 컨테이너가 시작될 때 실행할 명령어를 지정합니다
  • Dockerfile에서 하나만 실행 가능하며, 여러 개 있을 경우 마지막 하나만 적용됨
  • 예: CMD ["node", "app.js"]

ENTRYPOINT

  • 컨테이너가 시작될 때 실행할 명령어를 지정하지만, CMD와 달리 덮어쓰기가 되지 않음
  • 예: ENTRYPOINT ["echo", "hello"]

VOLUME

  • 데이터를 컨테이너가 아닌 호스트에 저장할 디렉토리를 설정합니다
  • 예: VOLUME /data

USER

  • 명령어를 실행할 사용자를 지정합니다
  • 예: USER appuser

ARG

  • 빌드 시 전달할 변수를 정의합니다
  • 예: ARG VERSION=latest

HEALTHCHECK

  • 컨테이너 상태를 확인하는 명령어입니다
  • 예: HEALTHCHECK CMD curl -f http://localhost/ || exit 1

LABEL

  • 메타데이터를 추가하는 명령어입니다
  • 예: LABEL version="1.0" description="This is my application"

Dockerfile 작성 모범 사례

  1. 적절한 베이스 이미지 선택: OS와 버전을 정확히 지정 (예: ubuntu:18.04)
  2. 레이어 최소화: RUN 명령어를 && 연산자로 연결하여 레이어 수 줄이기
  3. 불필요한 패키지 설치 방지: 필요한 패키지만 설치
  4. 빌드 캐시 활용: 자주 변경되지 않는 명령어를 Dockerfile 상단에 배치
  5. 컨테이너 특성 이해: 컨테이너는 격리된 공간에서 프로세스가 동작하도록 하는 기술

이미지 빌드 방법

Dockerfile을 작성한 후 다음 명령어로 이미지를 빌드할 수 있습니다

작성 기준 최신의 이미지 빌드 명령어입니다

Usage: docker buildx build [OPTIONS] PATH | URL | -
  
docker buildx build -t 이미지이름:태그 .

이 명령어는 현재 디렉토리의 Dockerfile을 기반으로 Docker 이미지를 생성합니다.

이미지 빌드 관련해서는 새로운 게시글을 올리겠습니다.

결론

Dockerfile은 Docker 컨테이너화의 핵심 요소로, 애플리케이션과 그 실행 환경을 코드로 정의하는 방법입니다. 위에 설명된 명령어들을 활용하여 재현 가능하고 일관된 환경을 구축할 수 있습니다.

참고: https://docs.docker.com/reference/dockerfile/

profile
반갑습니당~😄

0개의 댓글