
📚 개요
때는 2월 20일 새벽 1시
새로 작성한 코드를 빌드한 도커의 이미지 크기가 매우매우 커다래 졌고
결국엔 내 EC2 인스턴스가 맛탱이가 가버렸다.
React 이미지가 1.5GB 정도이고 Node 이미지가 1.4GB 인데 약 3개이니 총 6.7GB 정도를 차지했다.
Node 이미지가 2개까지는 버텨졌는데 3개까지 가버리니
cpu가 죽는 불상사가 생겨버렸다.
애초에 t2.micro의 컴퓨팅 파워 자체가 매우 약하다보니 그럴 수 있지만, 돈이없으면 어쩔수없다. 주어진 환경에서 살아남아보자
아래 사진에 보면 20일에 cpu 사용량이 최대로 오르면서 AWS EC2에 접속중이던 내 터미널이 아무 반응이 일어나지 않는 상태가 됐었다.
그럴 땐 최대한 빠르게 AWS 콘솔에 들어가서 해당 인스턴스를 재실행하거나 중지해서 콘솔에 접속 가능한 상태로 만들고 해당 프로세스를 죽여야합니다.
리소스 과다 사용으로 인한 EC2 Linux 인스턴스 상태 확인 실패 문제 해결
EC2 Linux 인스턴스가 리소스 과다 사용으로 인해 인스턴스 상태 확인에 실패했습니다. 이 문제를 해결하려면 어떻게 해야 합니까? 최종 업데이트 날짜: 2021년 9월 22일 Amazon Elastic Compute Cloud(Amazon EC
aws.amazon.com
아주 쉬운 해결법이 있지만, 최선은 예방!
그래서 준비한 도커 이미지 크기 줄이기!
🔖 준비물
- Docker
- React App
- Node App
🎬 Get Started
React 의 dockerfile
FROM node:16
WORKDIR /usr/src/app/client
COPY package.json .
RUN yarn install
COPY . .
EXPOSE 3000
CMD ["yarn", "start"]
Node 의 dockerfile
FROM node:16
WORKDIR /usr/src/app/server
COPY package.json .
RUN npm install
COPY . .
EXPOSE 8080
CMD ["npm","run", "start"]
공통으로 들어갈 .dockerignore
node_modules
이후에 도커 이미지를 빌드해줍니다.
아무 내용이 없는 프로젝트를 빌드했는데 어마무시하게 큰 용량의 이미지가 탄생했습니다.
이것은 어쨋든 가상의 OS를 만드는거고, 그 위에서 돌아가는 엔진을 다운로드 받아야 하고 소스의 크기도 있으니 어쩔 수 없다라고 생각 할 수 있으나
똑똑하신 분들께서 만들어놓은 Alpine 이라는 이미지가 존재합니다.
이 Alpine이라는 이미지는 기존의 이미지를 경량화 해놓은것으로써 꼭 필요한 정보만이 담겨있어서 굉장히 가볍다
일반 Node 이미지 = 약 900 MB
Alpine Node 이미지 = 약 100 MB
하지만 Alpine 이미지를 사용했을 때 오류를 띄우는 애들이 있으니 조심히 다루자.
나 같은 경우에도 기존에 사용하던 React에서 web3 라는 라이브러리를 설치하니 빌드에 실패했다.
Alpine에서 다시 일반 이미지로 교체했더니 잘 된다.
아무튼 이번엔 Alpine 이미지로 교체해보겠다.
기존의 dockerfile 들에서 첫 줄을 교체해준다.
FROM node:16
->
FROMT node:16-alpine
짠
차이가 느껴지십니까 휴먼
기존 리액트 1.23GB , 노드 916MB -> 약 2.1GB 에서
경량 리액트 436MB , 노드 123MB -> 약 560MB 로
약 75% 크기 절감을 얻어냈습니다.
사실 더 깊게가서 소스 코드를 제외한 모든 코드를 제외해버려서
5MB 정도의 이미지도 만들어버릴 수 있지만
이건 너무 과하다 싶다..
다른 무언가를 추가하면 문제 생기고 또 문제생기니 얕게 해보는건 여기까지 해보고 좀 더 딥한것은 조심스럽게 접근해야한다.
⚙️ 후기
아무튼 위와 같은 방식으로 나는 현재 4개의 어플리케이션을 EC2에서 돌리지만
이미지를 실행 시키는 과정(CPU 제일 많이 써먹을때) 에서도 CPU 사용량이 15~20% 사이에 존재하도록 잘 써먹고있다.
🔗 출처
리소스 과다사용 해결법 : https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-linux-resource-over-utilization/
이미지 : ME
내용 : ME
'B4 Junior' 카테고리의 다른 글
Cloudfront - S3 - EC2 도입 ( FE 배포과정 ) (0) | 2023.03.01 |
---|---|
Cloudfront - S3 - EC2 도입 ( BE 배포과정 ) (0) | 2023.03.01 |
AWS EC2 (ECS) 인스턴스 생성 및 접속 (0) | 2023.02.28 |
DOCKER 기초 docker build , docker run , docker images , docker container (0) | 2023.02.28 |
IPFS with PINATA (0) | 2023.01.31 |
백엔드는 못말려
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!