일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- gcc 업데이트
- subporcess path
- c3 축 없애기
- c3 축 가리기
- linux시간으로 변경
- gcc regex
- CentOS7
- 백준
- c3 second
- 정규식 컴파일
- c3 초
- snmp test
- influxdb 설치
- semanage
- regex_search
- telegraf
- snmp
- grafana dashboard
- selinux port 등록
- 정규식 활용
- InfluxDB
- centos pyhon 설치
- python popen
- c++ 정규식
- g++ 업데이트
- python subprocess
- python os
- c3 step graph
- 정규식 문자열 출력
- 1697
- Today
- Total
리셋 되지 말자
docker image 실제 크기 본문
도커 이미지 크기와 실제 file system 에서의 크기
df vs du
linux에서 남은 용량을 확인하기 위해 du나 df명령어를 사용할 수 있다. 이때, 위에처럼서로 남은 용량의 크기가 다르다. 이는 df와 du가 디스크 용량을 계산하는 방식이 다르기 때문이라고 한다. 각자 방식은 아래와 같다. (출처)
- df : 파일시스템의 디스크 블럭들을 조회
- du : 파일트리를 따라 이동하면서 stat()라는 시스템 호출을 이용하여 얻은 각각의 디렉토리, 심링크 및 파일에 할당된 블럭의 수를 더하여 계산
도커 이미지 다운로드 및 용량 변화 체크
python:3.8 이미지를 다운받고, 용량 변화를 체크한다.
다운받은 이미지의 크기가 885MB 라고 표시된다.
df는 5981에서 6896으로 915MB가 증가했다. du는 5904에서 6804으로 900MB가 증가했다.
docker 루트 디렉토리 확인
python:3.8 이미지를 다운로드 받은 후의 /var/lib/docker 디렉토리의 용량이 902MB 임을 확인할 수 있다.
도커의 공식문서 또는 docker info 명령어를 사용해 Docker Root Dir을 확인하면 /var/lib/docker 임을 확인할 수 있다.
python:3.8 이미지를 삭제하고 나면, /var/lib/docker 디렉토리 용량이 1MB로 줄어든것을 확인할 수 있다. 그렇다면 docker image를 다운로드 받으면 모든 파일이 /var/lib/docker 디렉토리에 저장되는 것인가? 라는 의문이 든다.
도커 이미지 다운로드 전, 후 확인
[root@ip-192-168-0-59 ~]# du -c / > before.txt
python:3.8 이미지를 삭제한 상태에서 du 명령어의 결과를 저장한다.
[root@ip-192-168-0-59 ~]# du -c / > after.txt
python:3.8 이미지를 다운로드 받은 상태에서 du 명령어의 결과를 저장한다.
[root@ip-192-168-0-59 ~]# diff before.txt after.txt > result.txt
before.txt 파일과 after.txt 파일의 변경된 내용을 result.txt에 저장한다.
result.txt 파일 분석
< 6047248 /
< 6047248 total
---
> 6971776 /
> 6971776 total
root 디렉토리의 용량은 924,528KB 증가했다. 이 중에서 before, after, result.txt 파일의 용량을 제외하면 증가량은 922,968KB가 된다.
< 381360 /var
---
> 1304328 /var
/var 용량은 922,968KB(약 922968 kB = 901.3359375 MB) 증가했다.
< 252 /var/lib/docker
< 30376 /var/lib
---
> 923216 /var/lib/docker
> 953344 /var/lib
/var/lib는 922,968KB가 증가했다. 여기까지 분석하면 /var/lib 의 용량만 증가했음을 확인할 수 있다.
/var/lib/docker는 922,964KB가 증가했다. 여기까지 분석하면 4KB 차이가 생긴다. 그럼 이 4KB는 어디에 생기는가?
< 0 /var/lib/containerd/io.containerd.content.v1.content/blobs/sha256
< 0 /var/lib/containerd/io.containerd.content.v1.content/blobs
< 0 /var/lib/containerd/io.containerd.content.v1.content
---
> 4 /var/lib/containerd/io.containerd.content.v1.content/blobs/sha256
> 4 /var/lib/containerd/io.containerd.content.v1.content/blobs
> 4 /var/lib/containerd/io.containerd.content.v1.content
8495c8521
< 88 /var/lib/containerd
---
> 92 /var/lib/containerd
8502c8528,12189
/var/lib/containerd가 4KB 증가한 것을 확인할 수 있다. 정확히는 /var/lib/containerd/io.containerd.content.v1.content/blobs/sha256 이 4KB 증가했다.
ubuntu:18.04 이미지를 추가로 다운로드
ubuntu:18.04 이미지를 다운로드 받은 후, /var/lib/containerd는 8, /var/lib/docker는 68104KB 증가했다.
root 디렉토리(/)의 용량은 68,112KB 증가했다.
TMI
[root@ip-192-168-0-59 sha256]# cat 5fca29485c9d818999ac73b464a074485165634097f0571fe60995b7dede40ae
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 8577,
"digest": "sha256:2359cdffa276ad2bc06877b37fb8d28316c6f72273e9762f81141f16f569e49b"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 54917164,
"digest": "sha256:0c6b8ff8c37e92eb1ca65ed8917e818927d5bf318b6f18896049b5d9afc28343"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 5152685,
"digest": "sha256:412caad352a3ecbb29c080379407ae0761e7b9b454f7239cbfd1d1da25e06b29"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 10871783,
"digest": "sha256:e6d3e61f7a504fa66d7275123969e9917570188650eb84b2280a726b996040f6"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 54567492,
"digest": "sha256:461bb1d8c517c7f9fc0f1df66c9dc34c85a23421c1e1c540b2e28cbb258e75f5"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 196529197,
"digest": "sha256:808edda3c2e855dc13af758b35cefbcc417ad1ab4fead7f72234b09aeda893a0"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 6290717,
"digest": "sha256:724cfd2dc19be12b837643ea67bd5ad7a6fd98049a88f02ec70eca30fa03a5a1"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 9022752,
"digest": "sha256:97883a2e318ebe4f446ed8de9b4fa23dd4f6c63a4a80d53d62a929d89ca1d824"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 235,
"digest": "sha256:08bbfb2bdff709c0f1ece89e51a8a9a38f2ed535e053d87a1d8f9c55297e0e1f"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 2352921,
"digest": "sha256:3ded81a913fd89d733c1eb9a26ff8c56a24108cabb896bab35396137696a13fe"
}
]
}
python:3.8 이미지를 다운받았을 때, /var/lib/containerd/io.containerd.content.v1.content/blobs/sha256 의 용량이 4KB 증가하는데, 해당 위치에 생성된 파일의 내용이다. 이는 해당 이미지를 이루는 레이어에 대한 manifest 파일이라고 한다.
[root@ip-192-168-0-59 sha256]# docker image inspect 2359cdffa276 | grep 5fca2948
"395389474517.dkr.ecr.ap-northeast-2.amazonaws.com/python@sha256:5fca29485c9d818999ac73b464a074485165634097f0571fe60995b7dede40ae"
해당 파일의 이름은 repo에 저장되있던 이미지의 hash id 값이다.
'Docker' 카테고리의 다른 글
[buildx] buildx 사용하기 - volume 마운트 실행 (2) | 2023.01.06 |
---|---|
[buildx] buildx 사용하기 - 설치 (0) | 2023.01.06 |
[source code] build 코드 (0) | 2021.12.03 |
[docker] docker logs -f <컨테이너명> (0) | 2021.07.14 |
[docker] 컨테이너 실행 시 timezone 변경 (0) | 2021.06.18 |