기본적으로 Docker의 image는 build를 하거나 pull을 통해 Docker Hub의 Repository에서 받아오게 됩니다.
Docker Container image의 경우, 하기와 같이 기본적인 layer층으로 이뤄져 있습니다.
기본적으로 간단한 nginx를 받았을 때, 나타나는 log입니다.
root@kube-master:~# docker pull nginx:latest
latest: Pulling from library/nginx
33847f680f63: Pull complete
dbb907d5159d: Pull complete
8a268f30c42a: Pull complete
b10cf527a02d: Pull complete
c90b090c213b: Pull complete
1f41b2f2bf94: Pull complete
Digest: sha256:8f335768880da6baf72b70c701002b45f4932acae8d574dedfddaf967fc3ac90
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
우선 눈에 띄는 첫 줄과 마지막 줄을 보면,
root@kube-master:~# docker pull nginx:latest
latest: Pulling from library/nginx
...
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
으로 새로운 nginx의 latest version을 가져오는 곳은 library로 docker의 library입니다.
결국 우리가 nginx:latest라는 것은 결국 docker.io/library/nginx:latest입니다.
기본적으로 Docker Image의 이름은 <NAMESPACE>/<IMAGE_NAME>:<TAG> 형식으로 구성된다.
Docker Hub의 공식 Image가 저장되어 있는 특별한 Namespace는 보통 library가 되고, 보통은 사용자의 이름이 옵니다.
ex) official nginx -> library/nginx:latest
bitnami nginx -> bitnami/nginx-ingress-controller
때문에 Docker Image Repository의 Domain에 들어 있는 nginx의 최신 Official한 Image이기 때문에 docker.io/library/nginx:latest가 되는 것입니다.
추가로 하기의 sha256:~의 값을 nginx@sha256:~으로 붙여주면 nginx:latest와 같다고 볼 수 있습니다.
root@kube-master:~# docker pull nginx:latest
...
Digest: sha256:8f335768880da6baf72b70c701002b45f4932acae8d574dedfddaf967fc3ac90
...
결국은 하기 4가지가 모두 같은 image 주소를 나타내고 있습니다.
- nginx:latest
- nginx@sha256:8f335768880da6baf72b70c701002b45f4932acae8d574dedfddaf967fc3ac90
- library/nginx:latest
- docker.io/library/nginx:latest
마지막으로 pull한 고유 ID들입니다.
root@kube-master:~# docker pull nginx:latest
...
33847f680f63: Pull complete
dbb907d5159d: Pull complete
8a268f30c42a: Pull complete
b10cf527a02d: Pull complete
c90b090c213b: Pull complete
1f41b2f2bf94: Pull complete
...
기본적으로 위에서부터 layer1으로 시작해서 nginx는 layer6까지 구성되어 있습니다.
해당 값들에 대해서 찾아보기 위해서는 docker data는 가 있는 위치를 찾기 위해서는 docker info를 보면 됩니다.
root@kube-master:~# docker info
...
Server:
...
Storage Driver: overlay2
...
Docker Root Dir: /var/lib/docker
...
기본적으로 Storage Driver는 overlay2이며, 이의 Root Directory는 /var/lib/docker에 저장됩니다.
즉 고유 ID들은 sha256값으로 layer image들은 /var/lib/docker/image/overlay2/layerdb/sha256에서 찾으면 됩니다.
해당 위치에서 grep으로 찾아본 값들입니다.
# 33847f680f63
root@kube-master:/var/lib/docker/image/overlay2# grep -rin 33847f680f63 .
./distribution/v2metadata-by-diffid/sha256/814bff7343242acfd20a2c841e041dd57c50f0cf844d4abd2329f78b992197f4:1:[{"Digest":"sha256:33847f680f63fb1b343a9fc782e267b5abdbdb50d65d4b9bd2a136291d67cf75","SourceRepository":"docker.io/library/nginx","HMAC":""}]
# dbb907d5159d
root@kube-master:/var/lib/docker/image/overlay2# grep -rin dbb907d5159d .
./distribution/v2metadata-by-diffid/sha256/7c0b223167b96d7deaacf1e1d2d35892166645b09b17bcc8675a4d882ef84893:1:[{"Digest":"sha256:dbb907d5159dcb993c532a46d2edaff7a72670d093d518e38e6aaf8115103f73","SourceRepository":"docker.io/library/nginx","HMAC":""}]
# 8a268f30c42a
root@kube-master:/var/lib/docker/image/overlay2# grep -rin 8a268f30c42a .
./distribution/v2metadata-by-diffid/sha256/59b01b87c9e7f668b740d23eb872c5964636c33aef795f1186f08b172197bc35:1:[{"Digest":"sha256:8a268f30c42a7c778c9c9497d043dfac6143281918cb9337f20335d4f11e1937","SourceRepository":"docker.io/library/nginx","HMAC":""}]
# b10cf527a02d
root@kube-master:/var/lib/docker/image/overlay2# grep -rin b10cf527a02d .
./distribution/v2metadata-by-diffid/sha256/988d9a3509bbb7ea8037d4eba3a5e0ada5dc165144c8ff0df89c0048d1ac6132:1:[{"Digest":"sha256:b10cf527a02df3ba9f85346ee04f59f920d9ec341a7ca688339c8ae1f8ea978c","SourceRepository":"docker.io/library/nginx","HMAC":""}]
# c90b090c213b
root@kube-master:/var/lib/docker/image/overlay2# grep -rin c90b090c213b .
./distribution/v2metadata-by-diffid/sha256/b857347059916922b353147882544f17bb96e64c639081c0677bf386c446be4f:1:[{"Digest":"sha256:c90b090c213b9e42d7982715b827803437fcbf4337f4672fead618c60cd36b84","SourceRepository":"docker.io/library/nginx","HMAC":""}]
# 1f41b2f2bf94
root@kube-master:/var/lib/docker/image/overlay2# grep -rin 1f41b2f2bf94 .
./distribution/v2metadata-by-diffid/sha256/e3135447ca3e69c6975aee1621c406e3865e0e143c807bbdcf05abefa56054a2:1:[{"Digest":"sha256:1f41b2f2bf94740d411c54b48be7f5e9dfbe14f29d1a5cf64f39150d75f39740","SourceRepository":"docker.io/library/nginx","HMAC":""}]
root@kube-master:/var/lib/docker/image/overlay2/distribution/v2metadata-by-diffid/sha256# ls -la
total 32
drwxr-xr-x 2 root root 4096 8월 9 21:48 .
drwxr-xr-x 3 root root 4096 8월 9 21:48 ..
-rw-r--r-- 1 root root 141 8월 9 21:48 59b01b87c9e7f668b740d23eb872c5964636c33aef795f1186f08b172197bc35
-rw-r--r-- 1 root root 141 8월 9 21:48 7c0b223167b96d7deaacf1e1d2d35892166645b09b17bcc8675a4d882ef84893
-rw-r--r-- 1 root root 141 8월 9 21:48 814bff7343242acfd20a2c841e041dd57c50f0cf844d4abd2329f78b992197f4
-rw-r--r-- 1 root root 141 8월 9 21:48 988d9a3509bbb7ea8037d4eba3a5e0ada5dc165144c8ff0df89c0048d1ac6132
-rw-r--r-- 1 root root 141 8월 9 21:48 b857347059916922b353147882544f17bb96e64c639081c0677bf386c446be4f
-rw-r--r-- 1 root root 141 8월 9 21:48 e3135447ca3e69c6975aee1621c406e3865e0e143c807bbdcf05abefa56054a2
해당값들과 nginx image의 image들과 비교했을 때, 같은지 확인해 보면 같음을 알 수 있습니다.
root@kube-master:~# docker inspect nginx
[
{
...
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:814bff7343242acfd20a2c841e041dd57c50f0cf844d4abd2329f78b992197f4",
"sha256:7c0b223167b96d7deaacf1e1d2d35892166645b09b17bcc8675a4d882ef84893",
"sha256:59b01b87c9e7f668b740d23eb872c5964636c33aef795f1186f08b172197bc35",
"sha256:988d9a3509bbb7ea8037d4eba3a5e0ada5dc165144c8ff0df89c0048d1ac6132",
"sha256:b857347059916922b353147882544f17bb96e64c639081c0677bf386c446be4f",
"sha256:e3135447ca3e69c6975aee1621c406e3865e0e143c807bbdcf05abefa56054a2"
]
},
...
}
]
'Cloud > Docker' 카테고리의 다른 글
Ubuntu Docker Setting (0) | 2021.08.09 |
---|