# du -csh /var/lib/docker/overlay2
580M 51d029d96e73b67e449f0b0570be47b6292da46c8c69b9f0dc6df35db85*****
2.3G ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****
76M d1b8d94d2ecfa140794c61e2a81ad4a09eba1646d764018cf5afd433b51*****
4.5G ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****
40K ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****-init
24K l
7.4G total
# du -shc /var/lib/docker/overlay2/*/diff
580M /var/lib/docker/overlay2/51d029d96e73b67e449f0b0570be47b6292da46c8c69b9f0dc6df35db85*****/diff
2.3G /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff
76M /var/lib/docker/overlay2/d1b8d94d2ecfa140794c61e2a81ad4a09eba1646d764018cf5afd433b51*****/diff
996M /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****/diff
20K /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****-init/diff
3.9G total
# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest b29b7073fea2 2 months ago 2.69GB
<none> <none> 30e4746e631e 3 months ago 2.23GB
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 2.689GB 0B (0%)
Containers 1 1 950.4MB 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
다음 명령어를 시도해 보았지만 도움이 되지 않았습니다.
# /var/discourse/launcher cleanup
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
프로덕션 환경으로 전환하면 설치 용량이 계속 증가하여 시스템이 오류를 일으킬까 봐 걱정됩니다.
Docker 이미지와 설치의 일반적인 크기가 어느 정도인지, 그리고 공간을 확보하기 위해 무엇을 할 수 있는지 조언을 구합니다.
감사합니다.
<none> 도커 이미지의 의미를 알아보고 싶습니다. (수정: docker images -a에서 <none> 이미지가 보인다면 큰 문제가 아니지만, docker images에서 보인다면 공간 낭비가 된다는 것 같습니다. 런처의 정리 작업이 도움이 될 것이라 희망했지만, 당신에게는 도움이 되지 않은 것 같네요…)
참고로, df를 통해 확인되는 오버레이 파일시스템 사용량은 루트 파일시스템의 사용량과 일치합니다. 데이터가 이중으로 사용되고 있는 부분이 많으므로 이중 계산을 하지 않도록 주의해야 합니다. 당신의 경우 가용 공간은 3.2G이며, 이것이 걱정해야 할 수치입니다. 정리가 필요한 부분이 있을 수 있습니다.
아래에 제 유사한 통계를 보여드리겠습니다. 저는 서로 다른 호스트에 두 개의 포럼을 운영하고 있습니다. 한 호스트는 20G, 다른 호스트는 25G의 공간을 가지고 있습니다. 업데이트 과정에서 시작 전에 5G의 여유 공간이 요구되므로, 15G는 매우 빠듯할 것 같습니다.
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 25G 19G 5.1G 79% /
# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest 8da0107aba03 2 months ago 2.7GB
discourse/base 2.0.20210415-1332 30e4746e631e 3 months ago 2.23GB
<none> <none> 1e6bf44c2762 5 months ago 2.46GB
discourse/base 2.0.20201221-2020 c0704d4ce2b4 7 months ago 2.11GB
# du -shc /var/lib/docker/overlay2/*/diff
2.2G /var/lib/docker/overlay2/05fa0e4df2...
76M /var/lib/docker/overlay2/58b000b1f5c...
20K /var/lib/docker/overlay2/6271023fc7a...
1.1G /var/lib/docker/overlay2/6271023fc7...
2.3G /var/lib/docker/overlay2/91d6adf7ad...
481M /var/lib/docker/overlay2/b6b06a7cee...
592M /var/lib/docker/overlay2/d81e44d563...
76M /var/lib/docker/overlay2/fb98649680b...
6.8G total
# du -shc /var/lib/docker/overlay2/*
2.2G /var/lib/docker/overlay2/05fa0e4df2...
76M /var/lib/docker/overlay2/58b000b1f5c...
4.7G /var/lib/docker/overlay2/6271023fc7...
40K /var/lib/docker/overlay2/6271023fc7a...
2.3G /var/lib/docker/overlay2/91d6adf7ad...
481M /var/lib/docker/overlay2/b6b06a7cee...
592M /var/lib/docker/overlay2/d81e44d563...
76M /var/lib/docker/overlay2/fb98649680b...
36K /var/lib/docker/overlay2/l
11G total
# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 4 1 5.155GB 4.689GB (90%)
Containers 1 1 1.059GB 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
업데이트: 백업을 수행하고 업데이트를 실행한 후, 정리(cleanup) 작업도 함께 수행했습니다.
Docker 이미지 관리를 위한 도구를 사용하는 것이 /var/lib/docker/overlay2에 직접 접근하는 것보다 더 바람직하다고 생각합니다. 그리고 이러한 도구보다 자동 정리가 더 나은 방법입니다. (다만, 링크된 게시물에서 언급했듯이 백업, 스왑 파일, 저널 파일, 업로드, 가져오기, 로그 파일 등 디스크 공간이 사용되는 다른 방법들이 있습니다.)
위에서 게시한 ‘전체’ 상태에 대한 ‘이후’ 상태를 확인한 결과는 다음과 같습니다 - 백업 때문일 가능성이 높지만, 시작점의 사용 가능한 디스크 공간이 더 낮은 것에 유의하세요:
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 25G 19G 5.1G 79% /
# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest 8da0107aba03 2 months ago 2.7GB
discourse/base 2.0.20210415-1332 30e4746e631e 3 months ago 2.23GB
<none> <none> 1e6bf44c2762 5 months ago 2.46GB
discourse/base 2.0.20201221-2020 c0704d4ce2b4 7 months ago 2.11GB
# /var/discourse/launcher cleanup
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: discourse/base:2.0.20201221-2020
untagged: discourse/base@sha256:e18*
deleted: sha256:1e6*
deleted: sha256:a22*
deleted: sha256:c07*
deleted: sha256:9b7*
deleted: sha256:87c*
untagged: discourse/base:2.0.20210415-1332
untagged: discourse/base@sha256:b3b*
Total reclaimed space: 2.456GB
# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest 8da0107aba03 2 months ago 2.7GB
<none> <none> 30e4746e631e 3 months ago 2.23GB
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest 8da0107aba03 2 months ago 2.7GB
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 25G 17G 7.8G 68% /
# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 2.699GB 0B (0%)
Containers 1 1 1.13GB 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 25G 17G 7.8G 68% /
# du -shc /var/lib/docker/overlay2/*
4.9G /var/lib/docker/overlay2/627*
40K /var/lib/docker/overlay2/627*-init
2.3G /var/lib/docker/overlay2/91d*
592M /var/lib/docker/overlay2/d81*
76M /var/lib/docker/overlay2/fb9*
24K /var/lib/docker/overlay2/l
7.8G total
# du -shc /var/lib/docker/overlay2/*/diff
20K /var/lib/docker/overlay2/627*-init/diff
1.2G /var/lib/docker/overlay2/627*/diff
2.3G /var/lib/docker/overlay2/91d*/diff
592M /var/lib/docker/overlay2/d81*/diff
76M /var/lib/docker/overlay2/fb9*/diff
4.2G total
# journalctl --disk-usage
Archived and active journals take up 1.5G in the file system.
라는 결과가 나왔습니다.
그리고 공간을 확보하기 위해 이 명령을 실행했습니다. # journalctl --vacuum-time=10d
이제 1GB가 더 확보되었습니다.
제 순수한 질문은 discourse에 실제로 필요한 용량에 관한 것이었습니다.
실제로 백업은 프로덕션 환경이 아니어서 약 10MB 수준이며, 백업 3개를 합치면 총 30MB 정도입니다.
업데이트 중에 공간이 필요하다는 점은 이해하지만, 실행 중에는 현재 버전을 유지하면서 이전 버전을 삭제할 수 있는 옵션이 있어야 한다고 생각합니다.
오버레이의 모든 diff가 필요한가요, 아니면 용량을 복구하기 위해 모든 콘텐츠를 어떤 방식으로든 병합할 수 있는 방법이 있을까요? 또한 마운트된 볼륨도 보이지 않아서 discourse가 모든 데이터를 거기에 저장한다고 가정하고 있습니다.
링크된 스레드에서는 ./launcher cleanup이 도움이 되지 않았지만 docker system prune --all --volumes --force가 문제를 해결한 상황이 보입니다. 왜 그런지는 알 수 없습니다.
Docker 이미지들이 어떻게 쌓이는지, diff 디렉터리가 왜 그렇게 큰지, 또는 Docker의 디스크 사용량이 Docker가 보고하는 크기보다 훨씬 크게 나타나는 이유를 이해하지 못하고 있습니다.
그러나 디스크 사용량을 최소화하는 데는 노력이 필요하다는 점을 유의할 가치가 있습니다. Docker도 Discourse도 디스크 사용량 최소화를 우선순위로 두지 않습니다. 두 프로젝트 모두 제품 개선과 단순성 유지에 더 중점을 두고 있습니다.
저는 20GB 인스턴스에서 성공적으로 운영 중입니다. 업그레이드를 위해 5GB를 비워두어야 하므로, 실제로는 사용 중인 디스크 공간의 한도가 15GB입니다. 15GB 인스턴스를 사용하는 경우, 사용량을 10GB 이내로 유지해야 합니다. 이는 더 어려울 수 있으며, 불가능할 수도 있습니다. 당연히 최소한의 요구 사항은 있을 것입니다.
모든 Docker와 Discourse를 제거하고 사이트 구성과 데이터베이스만 남긴 채 재설치하라는 조언이 담긴 스레드를 본 것 같습니다. 저는 그걸 가볍게 하지는 않을 것이며, 백업 없이 절대 하지 않을 것입니다. 안타깝게도 지금은 그 스레드를 찾을 수 없습니다.
그리고 25GB는 DigitalOcean을 사용하는 일반적인 초보자나 저예산 사용자들이 사용하는 용량입니다. 이것이 실제로는 주요 대상 사용자층입니다.
25GB 미만의 디스크 공간을 관리할 전문 지식은 있지만, 25GB 디스크 공간에 대한 예산은 없는 사람들의 수는 매우 적습니다. 지난 5년간 당신의 요청을 받은 것이 처음인 것 같습니다.
자체 백업을 관리하고 원격으로 백업하면 조금 절약할 수 있습니다. 단일 백업에는 세 가지 사본이 필요합니다. 이전 사본, 새로운 압축되지 않은 사본, 그리고 새로운 압축된 사본입니다. 제가 생각할 수 있는 가장 큰 절약 방법은 이것이지만, 저는 특별한 도커 지식에 대해 주장하지는 않습니다.
또한 임시 서버에서 새로운 이미지를 원격으로 빌드하고 리포지토리에 푸시하는 방식을 고안할 수도 있습니다. 이렇게 하면 로컬에서 추가적인 도커 공간이 필요하지 않습니다. 이것이 아마도 가장 좋은 방법일 것입니다. 하지만 이를 수행하는 잘 문서화된 방법은 없으며, 대부분 지원되지 않습니다(비도커 설치보다는 더 많이 지원되긴 합니다). 만약 저에게 이를 수행하도록 고용한다면, 10GB 디스크 공간 비용의 수년 치가 될 것입니다. 저는 이러한 이미지를 빌드하는 서비스(실제로는 더 잘 지원되는 Bitnami)를 고려해 봤지만, 개발 시간을 정당화할 시장이 있다고 생각하지 않아서 아직着手하지 못했습니다.