DockerFile 개요
가. Dockerfile 설명
1. 구조
Dockerfile은 기본적으로 여러 개의 레이어(layer)로 구성된 이미지를 만들기 위한 명령어들을 순서대로 나열합니다.
2. 기본 명령어
나. 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에 직접 포함시키지 않아야 합니다.
- 멀티스테이지 빌드: 크기가 큰 이미지를 줄이기 위해 멀티스테이지 빌드를 사용할 수 있습니다. 이는 빌드 과정에서 여러 단계를 거쳐 필요한 부분만 최종 이미지에 포함시키는 방법입니다.
라. 사용 이유
- 일관성: 모든 개발자가 동일한 환경에서 작업할 수 있도록 보장합니다.
- 재현성: 어떤 환경에서든 동일한 결과를 얻을 수 있습니다.
- 포터빌리티: 다양한 환경에서 손쉽게 애플리케이션을 배포할 수 있습니다.
'02. Container' 카테고리의 다른 글
쿠버네티스의 선언적 구성과 자동화 (0) | 2024.01.28 |
---|---|
Kubernetes에서 Manifest 개요 (0) | 2024.01.25 |
Helm과 Helm 차트의 관계 (0) | 2024.01.20 |
Helm 사용 전후의 Kubernetes 배포 관리 비교 (0) | 2024.01.20 |
컨테이너 레포지토리 운영 관리 방안 (0) | 2024.01.20 |