>백엔드 개발 >Golang >`docker system df` 및 `/system/df`(docker api 엔드포인트)

`docker system df` 및 `/system/df`(docker api 엔드포인트)

WBOY
WBOY앞으로
2024-02-09 16:45:08567검색

`docker system df` 与 `/system/df` (docker api 端点)

php 편집기 Yuzai는 docker의 두 가지 명령인 `docker system df` 및 `/system/df`(docker api 엔드포인트)를 소개합니다. 두 명령 모두 Docker 시스템 리소스 사용량을 보는 데 사용되지만 사용법과 결과 표시 방법이 약간 다릅니다. `docker system df`는 터미널에서 직접 실행할 수 있는 docker 명령으로, docker 시스템의 다양한 리소스(이미지, 컨테이너, 데이터 볼륨 등 포함)의 사용량과 전체 리소스 사용량을 표시합니다. . 그리고 `/system/df`는 docker API 엔드포인트이며 API를 호출하여 관련 정보를 얻어야 합니다. 반환 결과는 `docker system df`와 유사하지만 프로그래밍 방식으로 docker 시스템 리소스 사용량을 얻는 데 더 적합합니다.

질문 내용

내 도커 호스트에서 총 디스크 사용량을 GB 단위로 가져오는 프로그램을 Go로 작성 중입니다. 이를 위해 나는 go lib의 func DiskUsage()를 사용합니다:

  • https://pkg.go.dev/github.com/docker/docker/client#Client.DiskUsage.

코드를 보면 함수가 docker api 엔드포인트를 호출하고 있습니다. /system/df:

  • https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemDataUsage

그러나 docker system df 명령을 사용하여 GB를 계산하면서 이 라이브러리를 사용할 때 이상한 동작을 발견했습니다.

  • docker系统df출력: 으아악
  • My Go 애플리케이션 출력: 으아악

보시다시피 두 출력에는 차이가 있습니다. 엔드포인트에서 데이터를 가져오는 계산에 문제가 있는지 이해하는 데 도움이 필요합니다. /system/df감사합니다:)

Go 앱:

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          223       4         21.02GB   20.7GB (98%)
Containers      6         0         0B        0B
Local Volumes   13        1         536.4MB   340.4MB (63%)
Build Cache     954       0         13.51GB   13.51GB

솔루션

Docker 소스 코드 기반:

  • 명령: system dfhttps://github.com/docker/cli/blob/v24.0.5/cli/command/system/df.go
  • 출력 형식:
  • https://github.com/docker/cli/blob/v24.0.5/cli/command/formatter/disk_usage.go
다음 코드를 사용하면

수행하는 작업을 정확하게 재현할 수 있습니다. docker 系统 df

  • go.mod
  • 으아악
  • main.go
  • 으아악
    이미지의 경우
  • 는 전체 크기를 나타내므로 직접 계산하지 않으셔도 됩니다docker库直接提供了diskUsage.LayersSize
  • 빌드 캐시의 경우 공유 프로젝트를 제외해야 합니다(
  • )if !bc.Shared
크기를 올바른 단위로 변환하려면

)을 사용하는 것이 좋습니다. 이렇게 하면 단위 변환의 악몽을 피할 수 있습니다! github.com/docker/go-units (例如 units.HumanSize(float64(diskUsage.LayersSize))

위 내용은 `docker system df` 및 `/system/df`(docker api 엔드포인트)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제