Docker 이미지 경량화 하기

재능없는 개발자·2023년 5월 1일
0

Docker로 프로젝트 빌드하기

FROM node:16

WORKDIR /usr/src/app

RUN NODE_ENV=production

COPY . /usr/src/app

RUN npm install

COPY . .

RUN npm run build

CMD ["node", "dist/src/server.js"]

Dockerfile을 위와 같이 작성해주고

docker build -t to1step .

Dockerfile에 정의해준대로 우리의 서버를 to1step이라는 이미지로 만들어준다.

이미지가 1.15GB를 차지하는 모습을 볼 수 있다.


프로젝트에 맞는 이미지 사용하기

FROM node:16-alpine3.14

WORKDIR /usr/src/app

RUN NODE_ENV=production

COPY . /usr/src/app

RUN npm install

COPY . .

RUN npm run build

CMD ["node", "dist/src/server.js"]

node:16과 node:16-alpine은 둘 다 Docker Hub에서 제공하는 Node.js의 공식 이미지 중 두 가지 다른 타입이다.

node:16 이미지는 Debian GNU/Linux에서 빌드되었으며, Node.js 16 버전과 함께 일부 기본 라이브러리와 도구를 제공한다. 이 이미지는 더 많은 기능과 유틸리티를 가지고 있어서 더 많은 용도로 사용된다.

반면에 node:16-alpine 이미지는 Alpine Linux에서 빌드되었으며, 더 작고 경량화된 버전의 Node.js를 제공한다다. Alpine Linux는 더 작은 크기의 디스크 공간을 차지하고 더 적은 시스템 리소스를 사용하므로, 컨테이너를 빠르게 시작하고 더 적은 메모리를 사용하게 된다. 그러나, Alpine Linux는 Debian GNU/Linux보다 덜 보편적인 리눅스 배포판이므로, 어떤 Node.js 라이브러리와 호환되지 않을 수 있다.

따라서, 만약 빠르게 컨테이너를 시작하고 리소스를 최적화하려는 경우에는 node:16-alpine 이미지를 선택할 수 있다. 그러나, 라이브러리와 도구 호환성 문제를 방지하려면 node:16 이미지를 사용하는 것이 좋다. 우리는 아직 호환이 되지 않는 라이브러리가 없고, 라이브러리를 많이 사용하지 않으므로 alpine을 사용하기로 하였다.

node:16-alpine3.14를 사용했더니 눈에 띄게 size가 줄어든 모습을 볼 수 있다.


Docker ignore로 이미지 경량화 하기

.DS_Store
.dockerignore
.git
.github
.gitignore
.husky
.node-version
DockerFile
README.md
dist
docker-compose.yml
node_modules

Dockerfile은 Docker 이미지를 빌드하기 위한 명령어의 집합이지만, 불필요한 파일이나 디렉토리를 포함하면 이미지 크기가 커지는 문제가 있다.
이때 .dockerignore 파일을 사용하면 Docker 이미지를 빌드할 때 포함하지 않을 파일이나 디렉토리를 지정할 수 있어, 이미지 크기를 줄일 수 있다.

profile
https://www.youtube.com/watch?v=__9qLP846JE

0개의 댓글