seok의 패치노트
[Docker] 이미지 만들기(Dockerfile 최적화) 본문
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번보다 패키지를 우선 복사하여 속도를 높힌다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] 우분투에 도커 설치 (0) | 2022.02.09 |
---|---|
[Docker] Spring Boot 배포하기 (0) | 2021.10.20 |
[Docker] 이미지 만들기-2(build) (0) | 2021.10.19 |
[Docker] 이미지 만들기-1(commit) (0) | 2021.10.19 |
[Docker]WorkBench로 Mysql 접속하기 (0) | 2021.10.17 |