돈이 없는데 서버의 하드디스크가 꽉찼다. (docker chromium)트러블 슈팅2023. 6. 4. 23:16
Table of Contents
서론.
기존 git pull && yarn build && yarn run으로만 관리하던 프로젝트의 메모리가 꽉찼다.
아래는 프로젝트 관련 파일을 다 삭제한 상태.. 그래도 8%의 여유공간밖에 없다.
문제 인식: 어째서 프로젝트가 이 모양이 되었는가?
ec2 8GB 1 인스턴스를 사용하고 있다. (t2.micro)
우리 프로젝트는 크롬 드라이버를 활용하여 크롤링을 진행하는데 크롬 드라이버가 용량을 많이 차지하는 것이 의심된다.
크롬 브라우저, 크롬 드라이버를 설치하고, 여러 라이브러리(git, npm etc)들에 의존하기 때문에 설치한 라이브러리들이 굉장히 많다.
아마도 같이 설치되고 삭제되지 않은 데이터들이 숨어있는 것이 문제일 것이다.
해결 방안: 어떻게 해결할 것인가?
우선, 메모리를 늘리는 것은 안된다. 내 지갑이 얇아진다..
다음과 같이 해결해야한다.
- 별도의 라이브러리 설치 없이 구동되어야 한다.
- 프로젝트 구동에 필요한 용량을 줄여야 한다.
- linux에서 효율적으로 구동되어야한다.
위와 같은 이유로 docker 관련 문서를 찾아봤다.
해결방안을 찾아보다 docker의 node.js alpine 이미지에 chromium가 내장되어있다는 것을 알았다.
alpine이란? 가벼운 버전 경량화 버전이라고 생각하면 된다.
결과
크롬을 삭제한 후, docker, node.js alpine 16을 설치하여 구동하였다.
- 작성한 Dockerfile
FROM node:16-alpine AS base
ENV CHROME_BIN="/usr/bin/chromium-browser" \
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true"
RUN set -x \
&& apk update \
&& apk upgrade \
&& apk add --no-cache \
udev \
ttf-freefont \
chromium \
&& yarn add puppeteer@20.2.1
WORKDIR /app
COPY . .
RUN yarn install && yarn build
EXPOSE 3000
CMD ["node", "dist/main"]
- 도커의 장점
- docker는 linux 친화적으로 작동하여 적은 메모리로도 동작시킬 수 있다.
- forever, pm2 등의 구동 유지 라이브러리 없이 구동을 유지 시킬 수 있다.
- 로그 기능을 지원한다.
- 각기 다른 컨테이너를 동시에 구동시킬 수 있다.
- 이번에 프로젝트 진행하면서 정리한 도커 요약
- docker build {이미지 명}: 도커 이미지 파일 생성(이미지명은 {유저명/이미지명}으로 명명할 것.)
- docker push {이미지 명}: 빌드된 도커 이미지를 원격 환경에 업로드(이미지 명이 {유저명/이미지명}구조가 아니면 에러 발생 가능)
- docker images: 로컬의 이미지 목록 조회
- docker pull {이미지 명}: 원격 환경의 이미지 가져오기
- docker ps: 구동중인 도커 컨테이너 조회
- docker container ls: 모든 도커 컨테이너 조회
- docker ps -a: 모든 도커 컨테이너 조회
- docker rm {컨테이너 id}: 특정 컨테이너 id를 사용하여 삭제.
- docker rmi {이미지 명}: 특정 이미지를 삭제. (해당 이미지를 fork하는 로컬 컨테이너가 존재하지 않아야함.)
- docker container run -d -p 3000:3000 {이미지 명}: 특정 컨테이너 실행
- docker logs {컨테이너 id}: 특정 컨테이너의 로그를 조회할 수 있음.
- docker exec -it {컨테이너 id}: 특정 컨테이너 내부로 접속할 수 있음.
추후에는 github action을 공부하여 자동화 처리해보겠습니다~
'트러블 슈팅' 카테고리의 다른 글
[MySQL 복구 2] binlog를 통해 데이터베이스 복구하기 (0) | 2023.09.08 |
---|---|
[MySQL 복구 1] .ibd 파일을 이용하여 데이터 복구하기 (0) | 2023.09.08 |
Refresh Token을 사용하는 이유(Feat. Redis) (0) | 2023.04.07 |
인덱스의 카디널리티, 복합키의 성능 최적화 (0) | 2023.03.30 |
팀원이 설정한 알람이 내 폰에서 울려야한다. (0) | 2023.03.28 |
@임채성 :: 푸르고 개발 블로그
글 내용 중 잘못되거나 이해되지 않는 부분은 댓글을 달아주세요! 감사합니다! 문의: puleugo@gmail.com