도커파일의 각 커맨드는 캐시가 가능한 Layer 를 생성한다. 각 Layer는 변경점이 없다면 다시 실행되지 않는다.
예를 들어 노드 프로젝트의 경우 보통 소스코드를 받고 의존성 모듈을 설치하지만, 도커 커맨드 단계가 캐싱된다는 사실을 이용하려면 의존성 모듈 설치를 먼저해야한다.
# 설치 환경
FROM node:12
# 사용할 경로
WORKDIR /app
# 복사
COPY package*.json ./
# 의존성 설치
RUN npm install
# 소스코드 내용 복사 /node_modules는 .dockerignore에 추가하여 복사되지 않도록 한다.
COPY . .
# 환경 변수 설정
ENV PORT=8080
# 노출시킬 포트
EXPOSE 8080
# 서비스 시작용 커맨드
CMD ["npm", "start"]
FROM node:16.14.0-alpine as deps 와 같은 식으로 환경 구성할 때 as 키워드를 통해 논리적 과정 구분 이 가능하다. 이를 통해 Multi-stage build를 구성할 수 있다.:latest는 사용하지 않는다. 추후에 어떻게 될지 모름COPY 사용시 주의할 점dir/*: 디렉토리 구조말고 내용물만 dest로 복사된다CMD 사용시 환경변수 제공하기아래와 같은 CLI 커맨드를 입력하여 도커 이미지를 만들 수 있다.
docker build --build-arg PHASE=abc -t proj:1.0 . docker build -t {TAG} -f ./path/to/Dockerfile.ext {build context}t : 태그f : 파일 경로l : 라벨, 라벨 지정하면 arg는 build context 이다. Dockerfile 실행시 루트가 되는 경로를 지정한다. 예를 들어 프로젝트 루트에서 docker build 로 . 를 넘기면 프로젝트 루트가 기본 경로가 된다.이렇게 빌드된 이미지는 다른 이미지를 만드는데 사용할 수도 있고, container를 실행하는데 이용할 수도 있다.
Container에서 실행하려면 docker image를 [[Container Registry]]가있는 서버에 push해야한다.