Docker

[Docker] Dockerfile 을 사용한 image build

sol-hee 2022. 5. 1. 23:26

Dockerfile

  • File 이름을 Dockerfile로 명명하면 자동으로 도커파일로 인식
  • VScode Extension 에서 Docker을 설치
  • 자체 이미지를 빌드할 때 실행하려는 도커에 대한 명령 포함, 자체 이미지에 대한 설정 명령 포함
FROM <base_image_name> # 다른 이미지를 가져와서 베이스로 사용 , local 혹은 docker hub

WORKDIR /app

COPY . /app # 어떤 파일이 이미지에 들어가야하는지 
COPY <외부> <내부>

RUN npm install

EXPOSE <port> # 단, docker 실행 시 -p <port>:<port> 지정해주지 않으면 소용없다,,,, 그냥 알려주는 용도

CMD ["node", "server.js"]

도커 허브 이미지를 기반으로 컨테이너를 처음 실행했을 때 이미지가 다운로드 및 캐시
실제로 로컬에 없는 이미지를 기반으로 컨테이너를 실행한 순간, 도커 허브에서 다운 받은 이미지가 로컬 머신에도 존재하게 됨

WORKDIR <폴더>

  • 모든 후속 명령이 해당 폴더 내부에서 실행될 것

COPY <컨테이너, 이미지 외부> <내부>

  • <외부> 에 . 일 경우 Dockerfile이 포함되어있는 동일한 폴더임을 가르킴, ( 단, Dockerfile은 제외 )
  • <내부> : COPY한 파일을 저장해야하는 이미지의 내부 경로 , root를 이용하지 않고 서브 폴더를 이용하는게 베스트 ( /app과 같이 아무 이름 작명해도 됨, 없을 경우 폴더 생성해줌 )

ex1) COPY . .

  • 이 프로젝트의 모든 폴더, 하위 폴더 및 파일을 COPY => root

ex2) COPY . /app

  • Dockerfile과 동일 및 하위 폴더에 위치하는 파일을 컨테이너, 이미지 내부의 /app 폴더로 COPY

ex3) COPY . ./

  • WORKDIR ( 현재 작업 디렉토리 ) 에 COPY
  • 위의 코드 상에선 /app 폴더로 파일을 COPY 하라는 것과 같음
  • 단, 이렇게 생략하기 보다 명확하게 COPY . /app로 나타내는 것이 추후 가독성을 높일 수 있음

RUN <명령어>

  • image에서 명령을 RUN, default로 컨테이너 및 이미지의 작업 디렉토리에서 실행
  • default작업 디렉토리는 컨테이너의 root.
  • 그러나 컨테이너의 /app 폴더에 package를 심었기 때문에 WORKDIR을 사용하여 작업 디렉토리를 설정(변경)해주어야한다.
  • 이미지가 빌드될때마다 실행

CMD []

  • 이미지가 생성될때 실행되지 않고 컨테이너가 시작될 때 실행
  • " " 공백을 기준으로 리스트 안을 분할
    ex) 이미지를 기반으로 컨테이너를 시작하는 경우에만 서버 시작

EXPOSE <port>

  • 로컬 시스템에 특정 포트 노출