Dockerfile 만들기 (.dockerignore)

2021. 8. 22. 14:02Docker

요약

docker 컨테이너 이미지 빌드를 하기 위한 파일


사용하는 명령어

  1. FROM
  2. WORKDIR
  3. COPY
  4. RUN
  5. ENV
  6. EXPOSE
  7. CMD

명령어 설명

FROM : 이미지를 생성 할 때 기반으로 하는 베이스 이미지이다 ex) 운영체제

WORKDIR : 생성한 docker 컨테이너에서 작업 할 디텍토리를 지정한다. 

COPY : 로컬 파일을 컨테이너로 복사한다.  ex) COPY [로컬, docker 컨테이너 내부]

RUN : 컨테이너 내부에서 명령을 실행한다. ex) npm i, yarn

* RUN 명령어를 여러번 사용이 가능하다.

ENV : 환경 변수 설정

ENV HOST x.x.x.x : x.x.x.x의 부터 네트워크 수신을 받겠다고 설정 ex) 모든 수신을 받을 때 0.0.0.0

EXPOSE : 컨테이너 런타임 중 특정 포트로 외부에 노출 할 때 사용

CMD : 컨테이너를 들어간 애플리케이션을 실행 할 때 사용하는 명령어 ex) ["yarn", "start"]

* RUN 명령어와 다르게 한번 만 사용한다.


작성

FROM node:18-alpine

WORKDIR /app
COPY ["package.json", "yarn-lock.json", "./"]
RUN yarn
COPY . .

ENV HOST 0.0.0.0
EXPOSE 3000

CMD ["yarn", "start"]

설명

FROM node:18-alpine  => NODE 18이 있는 작은 리눅스 이미지를 사용한다.

WORKDIR  => 생성한 docker 컨테이너에서 작업 할 디텍토리를 지정한다.

COPY ["package.json", "yarn-lock.json", "./"] => package.json과 yarn-lock.json을 먼저 COPY 한다.

RUN yarn => 패키지 설치

COPY . . => 소스코드를 COPY 한다

ENV HOST 0.0.0.0 => 모든 수신을 받는다.

EXPOSE 3000 => 3000 포트로 외부에 노출한다.

CMD ["yarn", "start"] => 애플리케이션 실행 명령어


COPY가 두 번 작성된 이유

패키지 설치 후에 도커 이미지 레이어 캐시로 인해 package.json의 변경 점이 없다면 이전에 만든 레이어를 그대로 사용해서 빌드시간이 줄어든다.

* 해당 방법을 사용 할 때 .dockerignore 파일이 존재해야한다.

 


.dockerignore

불필요한 파일을 제외 하여 이미지 효휼성을 개선

ex) node_modules

728x90
반응형