Dockerfile 사용법

박상은·2021년 8월 20일
0

🛢️ docker 🛢️

목록 보기
3/5


나만의 docker-image를 생성하기위한 파일입니다.

1. 베이스이미지

이미지에서는 여러가지의 레이어가 포함되는데 그중에 가장 베이스가 되는 레이어

2. 이미지 생성과정

  1. 베이스이미지를 이용해서 임시컨테이너를 생성함
  2. 임시컨테이너에 Dockerflie에서 설정한 종속성설치 및 명령어입력함
  3. 생성한 임시컨테이너를 이용해서 이미지를 생성함
  4. 임시컨테이너 삭제함
  • 요약
    1. 베이스이미지로 임시컨테이너생성
    2. 임시컨테이너와 Dockerfile로 나만의 이미지 생성
    3. 임시컨테이너 제거

3. 나만의 이미지생성

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" ]
  1. FROM: 기본 바탕이 되는 이미지레이어 설정
  2. RUN: 도커이미지가 생성되기전에 수행할 쉘명령어
  3. CMD: 컨테이너가 실행되었을 때 실행할 파일 or 쉘명령어
  4. COPY: 생성할 이미지에 넣을 파일들 지정
  5. WORKDIR: 컨테이너에서 파일을 저장할 경로 지정

위와 같이 COPY를 두개로 나눈 이유는 npm install을 실행하여 받을 파일들(node_modules)는 굳이 복사할필요 없어서 package.json부터 이미 복사한후 npm install로 파일을 받고 전체를 복사하면 용량이큰 node_modules를 복사할필요가 없어지며 자동적으로 캐싱되기때문에 package.json의 변화가 없는한 다음 빌드시 캐싱된 데이터를 사용하기때문에 빌드속도가 빨라짐

마무리

이게 정확한 기준인지는 모르겠지만 COPY로 복사한 데이터가 이전값과 일치한다면 기존에 캐싱한 데이터를 사용함, 즉 COPY하는 package.json이 기존에 빌드했던값과 일치하다면 이후 실행하는 npm install해도 같은 값이기 때문에 캐싱된 데이터를 사용하므로 npm install로 설치하는 시간만큼 빌드가 단축됨

참고한 사이트

  1. 인프런강의
  2. 전체적으로참고
  3. volume참고사이트
  4. docker이미지생성후테스트

0개의 댓글