이 영역을 누르면 첫 페이지로 이동
Arc 블로그의 첫 페이지로 이동

Arc

페이지 맨 위로 올라가기

Arc

[Docker] 디스크 용량으로 인한 배포 실패 상황

  • 2024.07.27 18:20
  • DevOps/Docker
글 작성자: SeoArc

CodeDeploy를 통해 개발 서버에 배포 하던 중 배포가 실패된 상황이 발생했다.

 

No space left on device

맞다. 서버에 남은 공간이 없다는 말이다.

비용적인 문제로 인해 개발서버를 t2.micro에 띄워 배포하고 있었는데, 프리티어의 경우 storage volumn이 최대 30GB까지만 허용되기 때문에 30GB를 다 사용했다는 말이었다.

 

그런데, 여태 코드 몇 줄 추가 했다고 30GB가 전부 채워질리는 없었다.

 

그럼 먼저 용량을 한번 확인해보자.

$ sudo df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           475M     0  475M   0% /dev/shm
tmpfs           190M  3.0M  187M   2% /run
/dev/xvda1       30G   27G    3G  90% /
tmpfs           475M     0  475M   0% /tmp
/dev/xvda128     10M  1.3M  8.7M  13% /boot/efi
tmpfs            95M     0   95M   0% /run/user/1000
overlay          30G   27G    3G  90% /var/lib/docker/overlay2/8ac2a574daa56a8bfa9de4a4e5f06ffddb866

확인해 보면 docker에서 27GB의 용량을 차지하고 있는 것을 볼 수 있다.

 

overlay2?
overlay2에 관련해서는 다음 글을 참고하자.
https://seoarc.tistory.com/126

 

 

원인

/var/lib/docker/overlay2에 왜 이렇게 용량이 차있는걸까?

 

Docker를 통해 여러 번 새로운 배포를 수행하면 이 overlay2에 여러 임시파일이나 미사용 이미지, 컨테이너 파일 등이 남아있게 된다.

때문에, 먼저 중지된 컨테이너, 사용하지 않은 이미지, 삭제하지 않고 남긴 로그 데이터가 있진 않은지 다시 한번 확인해 보는 것이 좋다. 또 추가적으로 고정된 volume이 있다면 이 부분도 확인이 필요하다.

특히, 서버를 계속 실행하다 보면 로그가 쌓이기 마련인데, Docker는 자체적으로 컨테이너 로그를 json으로 캐싱하는 json-file logging driver를 사용한다. 이로 인해 로그가 쌓여 디스크가 고갈되는 경우가 생긴다. (

https://docs.docker.com/config/containers/logging/configure/

 

Configure logging drivers

Learn how to configure logging driver for the Docker daemon

docs.docker.com

해당 문서에서는 디스크 고갈 방지를 위해 local logging driver를 구성하여 사용할 것을 권장하고 있다.

 

두번째로, 이미지에 대한 변경사항들이 과도하게 쌓이지 않았는지 확인해보는 것이 좋다. 이는 Docker가 유니온 파일 시스템 구조를 사용하고 있기 때문인데, 유니온 파일 시스템은 Copy-on-Write(CoW) 전략을 사용하기 때문에 변경사항을 원본에 반영하지 않고 따로 저장하게 된다.

유니온 파일 시스템에 관련하여 추가적으로 알고 싶다면 다음 링크를 확인해보자.

https://seoarc.tistory.com/126

 

[Docker] docker의 용량을 차지하는 overlay2는 무엇일까?

이전에 overlay2에 용량이 가득 차 배포를 실패하는 상황이 발생하여 해결한 적이 있었다. 그런데 이 overlay2라는게 과연 무엇일까?  OverlayFS먼저 overlay2를 알기 위해선 OverlayFS를 알 필요가 있다.Ov

seoarc.tistory.com

 

 

만약 남긴 데이터가 없다면, 남은 것은 캐시 데이터일 확률이 높다. Docker는 이미지 레이어를 재사용하기 위해 캐싱하는데, 이미지를 삭제해도 캐시가 남아있을 수 있기 때문에 이를 삭제해줘야 한다.

https://depot.dev/blog/docker-clear-cache

 

How to clear Docker cache and free up space on your system

A breakdown of different Docker artifacts and build cache items that take up disk space and how to prune them individually or clear them all locally and in CI.

depot.dev

 

 

해결

 

미사용 리소스 삭제

이제 디스크 공간을 지우기 위한 방법을 알아보자.

 

먼저 docker에는 prune이라는 명령이 있는데, 이 명령을 통해 사용하지 않는 리소스를 삭제할 수 있다.

  • Docker 캐시에서 컨테이너 제거: docker container prune
  • 이미지 제거: docker image prune
  • 볼륨 제거: docker volume prune
  • 빌드 캐시 제거: docker buildx prune
  • 네트워크 제거: docker network prune
  • 모든 것을 제거: docker system prune

prune 명령 시 삭제할 거냐는 경고문이 발생한다. 경고문을 띄우고 싶지 않다면 -f 옵션을 붙여 수행하면된다.

 

 

[참고]
[1] https://junstar92.tistory.com/170#1.-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84%EC%9D%98-%EC%9B%90%EB%A6%AC
[2] https://docs.redhat.com/ko/documentation/openshift_container_platform/3.11/html/scaling_and_performance_guide/comparing-overlay-graph-drivers
[3] https://docs.redhat.com/ko/documentation/red_hat_enterprise_linux/7/html/7.2_release_notes/technology-preview-file_systems#technology-preview-file_systems
[4] https://docs.docker.com/storage/storagedriver/
[5] https://blog.naver.com/alice_k106/221530340759
[6] https://uiandwe.tistory.com/1313
[7] https://ngela.tistory.com/90
[8] https://velog.io/@lom/Docker-overlay2

 

저작자표시 (새창열림)

'DevOps > Docker' 카테고리의 다른 글

[Docker] docker의 용량을 차지하는 overlay2는 무엇일까?  (0) 2024.07.28

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Docker] docker의 용량을 차지하는 overlay2는 무엇일까?

    [Docker] docker의 용량을 차지하는 overlay2는 무엇일까?

    2024.07.28
다른 글 더 둘러보기

정보

Arc 블로그의 첫 페이지로 이동

Arc

  • Arc의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (106)
    • Language (28)
      • C++ (0)
      • C# (0)
      • Java (28)
    • Algorithm (47)
      • Algorithm (15)
      • Data Structure (6)
      • PS (26)
    • Computer Science (22)
      • Design Pattern (1)
      • Network (14)
      • OS (7)
    • Game (0)
      • Unity (0)
    • Backend (3)
      • Spring (1)
      • JPA (2)
    • DB (0)
      • SQL (0)
    • DevOps (2)
      • AWS (0)
      • Docker (2)
      • Jenkins (0)
      • Nginx (0)
    • Software Engineering (4)
      • OOP (4)
    • AI (0)
      • Machine Learning (0)
    • Others (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 자바
  • java
  • algorithm
  • graph
  • network
  • 네트워크
  • 그래프
  • 알고리즘

나의 외부 링크

정보

SeoArc의 Arc

Arc

SeoArc

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © SeoArc. Designed by Fraccino.

티스토리툴바