관리 메뉴

seok의 패치노트

[Docker] 이미지 만들기(Dockerfile 최적화) 본문

DevOps/Docker

[Docker] 이미지 만들기(Dockerfile 최적화)

석석's 2021. 10. 19. 17:22

Dockerfile 의 내용

# 1. node 설치
FROM ubuntu:20.04
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs npm


# 2. 소스 복사
COPY . /usr/src/app


# 3. Nodejs 패키지 설치
WORKDIR /usr/src/app
RUN npm install


# 4. WEB 서버 실행 (Listen 포트 정의)
EXPOSE 3000
CMD node app.js

파일내용을 보면

#1. node 설치

베이스이미지인 ubuntu:20.04를 설치하고 거기에 apt 패키지 매니저를 설치하고 node와 npm을 인스톨한다.

 

#2. 소스복사

현재 디렉터리에 있는 파일들을 /usr/src/app에 복사한다.

 

#3. Nodejs 패키지 설치

/usr/src/app 폴더로 이동하여 npm을 install한다.

 

#4. WEB서버 실행

접근 포트를 3000번으로 하고 컨테이너 실행시 기본 명령어를 app.js 실행으로 한다.

 

 

 

Docker파일 내용 최적화1

 

# 1. node 설치
FROM node:12


# 2. 소스 복사
COPY . /usr/src/app


# 3. Nodejs 패키지 설치
WORKDIR /usr/src/app
RUN npm install


# 4. WEB 서버 실행 (Listen 포트 정의)
EXPOSE 3000
CMD node app.js

#1. node 설치

이미 누군가 만들어둔 node:12라는 이름을 가진 이미지를 베이스 이미지로 설치한다

(node:12는 ubuntu가 깔려있고 안에 node가 설치되어있는 이미지이다.)

 

#2. 소스복사

현재 디렉터리에 있는 파일들을 /usr/src/app에 복사한다.

 

#3. Nodejs 패키지 설치

/usr/src/app 폴더로 이동하여 npm을 install한다.

 

#4. WEB서버 실행

접근 포트를 3000번으로 하고 컨테이너 실행시 기본 명령어를 app.js 실행으로 한다.

 

 

Docker파일 내용 최적화2

# 1. node 설치
FROM node:12-alpine 


# 2. 패키지 우선 복사
COPY ./package* /usr/src/app/
WORKDIR /usr/src/app
RUN npm install 


# 3. 소스 복사
COPY . /usr/src/app


# 4. WEB 서버 실행 (Listen 포트 정의)
EXPOSE 3000
CMD node app.js

 

#1. node 설치

이미 누군가 만들어둔 node:12-alpine라는 이름을 가진 이미지를 베이스 이미지로 설치한다

(node:12-alpine는 ubuntu가 깔려있고 안에 오로지 node만 설치되어 있고 안쓰이는 파일들은 모두 제거한 이미지이다.)

 

#2. 패키지 우선복사

현재 디렉터리의 package라는 이름이 들어간 파일이나 폴더를 /usr/src/app/ 에 복사한다.

/usr/src/app 으로 이동하여 npm을 설치한다.

(이렇게 하면 

 

#3. 소스복사

현재 디렉터리에 있는 파일들을 /usr/src/app에 복사한다.

 

#4. WEB서버 실행

접근 포트를 3000번으로 하고 컨테이너 실행시 기본 명령어를 app.js 실행으로 한다.

 

이 방법으로 하면 app.js 파일 수정시마다 이미지를 새로만들어야하는데 그럴때마다 시간이 너무 오래걸려서 캐쉬를 최대한 살려 최대한 빠르게 이미지를 빌드 할 수가 있다!!.

 

이미지 생성시 캐시가 작동하려면 이미지에 들어가는 파일들의 수정내용이 없어야하는데 Dockerfile 스크립트를 읽다가 수정된 내용이 보이면 그때서야 캐시가 깨진다. 그렇기때문에 자주변경되는 app.js를 복사하는 3번보다 패키지를 우선 복사하여 속도를 높힌다.