도커파일을 작성하는데, 각 해당 소스코드의 의미를 이해하고 싶었습니다.
먼저 소스코드를 보여드리자면,
FROM node:20.11 AS build
RUN mkdir /app
WORKDIR /app
COPY package.json /app/
RUN npm install
COPY . /app/
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]
입니다.
- FROM node:20.11 AS build
- Node.js 20.11 버전을 기반으로 하는 Docker 이미지를 빌드 단계의 베이스 이미지로 사용
- Node.js를 설치하고 애플리케이션을 빌드하기 위한 환경을 제공
- AS build는 이 단계를 "build" 단계로 명명하는 것
- RUN mkdir /app
- 컨테이너 내부에 "/app" 디렉토리를 생성
- app 디렉토리는 애플리케이션 소스 코드 및 의존성을 저장할 곳
- WORKDIR /app
- COPY package.json /app/
- 호스트의 "package.json" 파일을 컨테이너의 "/app/" 디렉토리로 복사
- npm install을 실행하기 전에 package.json 파일을 이미지에 복사하여 종속 항목을 설치할 준비
- RUN npm install
- package.json 파일에 명시된 종속 항목을 설치
- COPY . /app/
- 현재 디렉토리의 모든 파일을 컨테이너의 "/app/" 디렉토리로 복사
- 소스 코드 및 기타 모든 파일을 이미지에 추가하는 단계
- RUN npm run build
- 해당 npm 스크립트에 정의된 대로, package.json 파일 내의 "scripts" 섹션에서 정의된 "build" 스크립트를 실행
- EXPOSE 3000
- 컨테이너 내부의 3000번 포트를 외부에 노출
- 애플리케이션이 컨테이너 내에서 실행 중인 경우 외부에서 액세스할 수 있도록 함
- CMD ["npm", "start"]
- 컨테이너가 시작될 때 실행되는 명령어
- 애플리케이션을 시작함