02. Container

Dockerfile은 Docker 이미지를 생성

카이저일공 2024. 1. 21. 00:30
Dockerfile 설명

DockerFile 개요

가. Dockerfile 설명

1. 구조

Dockerfile은 기본적으로 여러 개의 레이어(layer)로 구성된 이미지를 만들기 위한 명령어들을 순서대로 나열합니다.

2. 기본 명령어

  • FROM: 베이스 이미지를 지정합니다. 예를 들어, FROM ubuntu:18.04는 Ubuntu 18.04를 베이스 이미지로 사용합니다.
  • RUN: 이미지 빌드 과정에서 실행할 명령어를 지정합니다.
  • COPY 및 ADD: 로컬 파일 시스템의 파일들을 이미지에 추가합니다.
  • CMD: 컨테이너가 시작될 때 실행될 명령어를 정의합니다.
  • EXPOSE: 컨테이너가 리스닝할 포트를 지정합니다.
  • ENV: 환경 변수를 설정합니다.
  • ENTRYPOINT: 컨테이너가 시작될 때 실행될 명령어를 정의합니다. CMD와 유사합니다.
  • 나. Dockerfile 예제

    Dockerfile 예제와 각 라인의 설명:

      
                FROM node:14
                WORKDIR /usr/src/app
                COPY package*.json ./
                RUN npm install
                COPY . .
                EXPOSE 8080
                CMD [ "node", "app.js" ]
            
    • FROM node:14: Node.js 버전 14를 베이스 이미지로 사용합니다.
    • WORKDIR /usr/src/app: 작업 디렉토리를 '/usr/src/app'으로 설정합니다.
    • COPY package*.json ./: package.json 파일들을 작업 디렉토리로 복사합니다.
    • RUN npm install: package.json에 정의된 의존성들을 설치합니다.
    • COPY . .: 현재 디렉토리의 모든 파일을 작업 디렉토리로 복사합니다.
    • EXPOSE 8080: 8080 포트를 외부에 노출합니다.
    • CMD [ "node", "app.js" ]: 컨테이너가 시작될 때 'node app.js'를 실행합니다.

    다. 고려사항

    • 캐싱: Docker는 빌드 과정을 최적화하기 위해 레이어를 캐시합니다. 변경이 자주 발생하는 명령어는 Dockerfile의 하단에 위치시키는 것이 좋습니다.
    • 보안: 민감한 데이터나 비밀번호 등은 Dockerfile에 직접 포함시키지 않아야 합니다.
    • 멀티스테이지 빌드: 크기가 큰 이미지를 줄이기 위해 멀티스테이지 빌드를 사용할 수 있습니다. 이는 빌드 과정에서 여러 단계를 거쳐 필요한 부분만 최종 이미지에 포함시키는 방법입니다.

    라. 사용 이유

    • 일관성: 모든 개발자가 동일한 환경에서 작업할 수 있도록 보장합니다.
    • 재현성: 어떤 환경에서든 동일한 결과를 얻을 수 있습니다.
    • 포터빌리티: 다양한 환경에서 손쉽게 애플리케이션을 배포할 수 있습니다.
    Docker 알아보기