拥抱云原生:Docker文件系统
拥抱云原生:Docker文件系统
通过 Nginx
docker镜像探索docker镜像是如何存储的
docker pull nginx
使用 docker inspect
[
{
"Id": "sha256:03861782bd3bd54ac209eb40764e3851600bc7c59b2782fc65da7ff629bd8b54",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:d1c3a4e634ab6b7089dfc0b1e70a401972493e9e16a65b3f655b3a07955571f7"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2024-04-23T22:15:45Z",
"Container": "",
"ContainerConfig": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": null,
"Cmd": null,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.25.5",
"NJS_VERSION=0.8.4",
"NJS_RELEASE=2~bookworm",
"PKG_RELEASE=1~bookworm"
],
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"/docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"maintainer": "NGINX Docker Maintainers <[email protected]>"
},
"StopSignal": "SIGQUIT"
},
"Architecture": "amd64",
"Os": "linux",
"Size": 187557417,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/759dd4b6ba1edb7ad1ee6b60fd53a108224ee36dd7d85c6e1de4aafb92e0002e/diff:/var/lib/docker/overlay2/7d66ca6da2d51525126361f569175524b35cdd7ccf9cdadcd78b12ddee7eff65/diff:/var/lib/docker/overlay2/eea8cbae59abb54701ec0241193883efe90418f33c945547c4034003e48609ed/diff:/var/lib/docker/overlay2/6b8ea607fb4ce06a6e3b89c07a75b319c8c7e7a457200e38932e3bcbf034a64d/diff:/var/lib/docker/overlay2/2c14ed054f241390c2da0b62a1febb7113b3026079176e1708c22a2f50bbabbd/diff:/var/lib/docker/overlay2/a57d32016bf030af8b1d7d735a0b882a26dcd5f806dabf7fd11c894b87c990f6/diff",
"MergedDir": "/var/lib/docker/overlay2/32993b98e23a2074e85bb80e1d1b78f94068f133cfb4a5d84c764d04d8c41ced/merged",
"UpperDir": "/var/lib/docker/overlay2/32993b98e23a2074e85bb80e1d1b78f94068f133cfb4a5d84c764d04d8c41ced/diff",
"WorkDir": "/var/lib/docker/overlay2/32993b98e23a2074e85bb80e1d1b78f94068f133cfb4a5d84c764d04d8c41ced/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:1f00ff20147800878a4ebc9c283f79149a1dde5cc11d659c69d3a9c0bfeb7d4f",
"sha256:733f45b8d9acaf40cdd77277d36a0501bf8c889bf7d732777dd3fa12a47f5057",
"sha256:e0d9c02efff40e1f120185504ccda3a615bc1880ccaddbb6bf24d2d1f36c13f8",
"sha256:edc02f610740f067ec1fdd7b1af58abda431a926b6b4bf3f849a5823586e251a",
"sha256:a60e9ce84e3e26991bc1de5fbcf4e1652819e730fe43d928c3c7719bb2697b5d",
"sha256:3c08afe634e4c8b24a784057e2db3b7d912db2b7c2c2f0d8be96395e1f6cccab",
"sha256:f5afead8647df208b354815a2a86873eab37a47fc3f02919af7918c8fe438dc1"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
GraphDriver
{
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/759dd4b6ba1edb7ad1ee6b60fd53a108224ee36dd7d85c6e1de4aafb92e0002e/diff:/var/lib/docker/overlay2/7d66ca6da2d51525126361f569175524b35cdd7ccf9cdadcd78b12ddee7eff65/diff:/var/lib/docker/overlay2/eea8cbae59abb54701ec0241193883efe90418f33c945547c4034003e48609ed/diff:/var/lib/docker/overlay2/6b8ea607fb4ce06a6e3b89c07a75b319c8c7e7a457200e38932e3bcbf034a64d/diff:/var/lib/docker/overlay2/2c14ed054f241390c2da0b62a1febb7113b3026079176e1708c22a2f50bbabbd/diff:/var/lib/docker/overlay2/a57d32016bf030af8b1d7d735a0b882a26dcd5f806dabf7fd11c894b87c990f6/diff",
"MergedDir": "/var/lib/docker/overlay2/32993b98e23a2074e85bb80e1d1b78f94068f133cfb4a5d84c764d04d8c41ced/merged",
"UpperDir": "/var/lib/docker/overlay2/32993b98e23a2074e85bb80e1d1b78f94068f133cfb4a5d84c764d04d8c41ced/diff",
"WorkDir": "/var/lib/docker/overlay2/32993b98e23a2074e85bb80e1d1b78f94068f133cfb4a5d84c764d04d8c41ced/work"
},
"Name": "overlay2"
}
}
Claude-3 的说明
Nginx
: LowerDir
/var/lib/docker/overlay2/759dd4b6ba1edb7ad1ee6b60fd53a108224ee36dd7d85c6e1de4aafb92e0002e/diff
/var/lib/docker/overlay2/7d66ca6da2d51525126361f569175524b35cdd7ccf9cdadcd78b12ddee7eff65/diff
/var/lib/docker/overlay2/eea8cbae59abb54701ec0241193883efe90418f33c945547c4034003e48609ed/diff
/var/lib/docker/overlay2/6b8ea607fb4ce06a6e3b89c07a75b319c8c7e7a457200e38932e3bcbf034a64d/diff
/var/lib/docker/overlay2/2c14ed054f241390c2da0b62a1febb7113b3026079176e1708c22a2f50bbabbd/diff
/var/lib/docker/overlay2/a57d32016bf030af8b1d7d735a0b882a26dcd5f806dabf7fd11c894b87c990f6/diff
我们启动一个 nginx 容器,看下容器和镜像是否有什么关联
启动一个nginx镜像
docker run -it -d --name mynginx nginx
进入 启动的nginx 镜像内部
docker exec -it mynginx /bin/bash
镜像文件
容器内部文件
如果我们修改了nginx 里面的镜像里面的文件,那么修改是如何存储的呢
进入 我们刚才启动的容器,并修改 index.html
我们首先看下 nginx 镜像里面的 nginx 文件是否发生变化
nginx 镜像文件的 /usr/share/nginx/html
nginx 容器的 /usr/share/nginx/html
好的,确定是同一个文件,我们可以通过
docker inspect mynginx
查看 容器的信息
我们进入到 UpperDir
#/var/lib/docker/overlay2/1965600fbe2f205b5f88ceb441fdc0e9ca3bb578ffdf7185e6440bab3dfe296d/diff
我们该如何理解这种实现呢?
官网文档说明
docker 容器该如何挂载
docker支持哪些文件挂载方式
Claude-3 的回答
dockers volumes 有哪些分类
回答来自于 Claude-3
如何创建本地卷
回答来自于 Claude-3
匿名卷和具名卷的区别
Claude-3 的回答
docker -v html:/usr/share/nginx/html
和 docker -v html:/usr/share/nginx/html
的区别
Claude-3 的回答
docker 绑定挂载有哪些潜在的问题
Claude-3 的回答
使用 docker -v /html:/usr/share/nginx/html
挂载,如果 /html
是空文件夹会带来什么问题呢
Claude-3 的回答