나만의 docker-image를 생성하기위한 파일입니다.
이미지에서는 여러가지의 레이어가 포함되는데 그중에 가장 베이스가 되는 레이어
Dockerflie
에서 설정한 종속성설치 및 명령어입력함 docker build <option> <Dockerfile-route>
docker build -t ghksaud55/testpj:latest -f Dockerfile.dev ./
<Dockerfile-route>
: Dockerfile
라는 파일이 존재하는 디렉토리를 가리키면됨-t
: 생성될 이미지의 이름지정 ( 관습적으로 아이디/저장소이름:버전
형태로 작성함 )-f
: -f
옵션으로 지정한 파일을 Dockerfile로 해석함 ( Dockerfile이름이 다를경우 사용 Dockerfile.dev ) # 파일명: Dockerfile
# 베이스 이미지 ( 기반이 되는 이미지 레이어 )
# FROM 이미지이름:태그 ( 태그 생략시 최신버전 사용 )
# FROM baseImage
FROM node:10
# 컨테이너에서 파일저장경로
WORKDIR /user/src/app
# 종속성만 미리 복사
COPY package*.json ./
# 추가적으로 필요한 파일 다운
# RUN command
RUN npm install
# 이외에 모든 파일 복사
COPY ./ ./
# 컨테이너 시작시 실행할 명령어
# CMD [ "executable" ]
CMD [ "node", "app" ]
FROM
: 기본 바탕이 되는 이미지레이어 설정RUN
: 도커이미지가 생성되기전에 수행할 쉘명령어CMD
: 컨테이너가 실행되었을 때 실행할 파일 or 쉘명령어COPY
: 생성할 이미지에 넣을 파일들 지정WORKDIR
: 컨테이너에서 파일을 저장할 경로 지정위와 같이 COPY
를 두개로 나눈 이유는 npm install
을 실행하여 받을 파일들(node_modules
)는 굳이 복사할필요 없어서 package.json
부터 이미 복사한후 npm install
로 파일을 받고 전체를 복사하면 용량이큰 node_modules
를 복사할필요가 없어지며 자동적으로 캐싱되기때문에 package.json
의 변화가 없는한 다음 빌드시 캐싱된 데이터를 사용하기때문에 빌드속도가 빨라짐
이게 정확한 기준인지는 모르겠지만 COPY로 복사한 데이터가 이전값과 일치한다면 기존에 캐싱한 데이터를 사용함, 즉 COPY
하는 package.json
이 기존에 빌드했던값과 일치하다면 이후 실행하는 npm install
해도 같은 값이기 때문에 캐싱된 데이터를 사용하므로 npm install
로 설치하는 시간만큼 빌드가 단축됨