avatar

nk

学习 思考 坚持 平静

  • 首页
  • 关于
Home 拥抱云原生:Docker文件系统
文章

拥抱云原生:Docker文件系统

Posted 2024-04-28 Updated 2024-04- 28
By nk
48~62 min read

拥抱云原生:Docker文件系统

通过 Nginxdocker镜像探索docker镜像是如何存储的

docker pull nginx

image-hhljh.png

image-voktv.png

image-zcfjg.png

使用 docker inspect

image-dryqd.png

[
    {
        "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 的说明

image-pyjtl.png

Nginx: LowerDir

/var/lib/docker/overlay2/759dd4b6ba1edb7ad1ee6b60fd53a108224ee36dd7d85c6e1de4aafb92e0002e/diff

image-icbnv.png

/var/lib/docker/overlay2/7d66ca6da2d51525126361f569175524b35cdd7ccf9cdadcd78b12ddee7eff65/diff

image-hxtti.png

/var/lib/docker/overlay2/eea8cbae59abb54701ec0241193883efe90418f33c945547c4034003e48609ed/diff

image-qpjgu.png

/var/lib/docker/overlay2/6b8ea607fb4ce06a6e3b89c07a75b319c8c7e7a457200e38932e3bcbf034a64d/diff

image-huhbf.png

/var/lib/docker/overlay2/2c14ed054f241390c2da0b62a1febb7113b3026079176e1708c22a2f50bbabbd/diff

image-zrlyl.png

image-founh.png

/var/lib/docker/overlay2/a57d32016bf030af8b1d7d735a0b882a26dcd5f806dabf7fd11c894b87c990f6/diff

image-pfpmb.png

我们启动一个 nginx 容器,看下容器和镜像是否有什么关联

启动一个nginx镜像

docker run  -it -d  --name mynginx nginx

进入 启动的nginx 镜像内部

docker exec  -it mynginx /bin/bash
镜像文件

image-oyrzj.png

容器内部文件

image-xtkgg.png

如果我们修改了nginx 里面的镜像里面的文件,那么修改是如何存储的呢
进入 我们刚才启动的容器,并修改 index.html

image-gtxfk.png

image-uxunj.png

我们首先看下 nginx 镜像里面的 nginx 文件是否发生变化

nginx 镜像文件的 /usr/share/nginx/html

image-oqhtk.png

nginx 容器的 /usr/share/nginx/html

image-glmgi.png

好的,确定是同一个文件,我们可以通过

docker inspect mynginx

查看 容器的信息

image-gtmqe.png

我们进入到 UpperDir#/var/lib/docker/overlay2/1965600fbe2f205b5f88ceb441fdc0e9ca3bb578ffdf7185e6440bab3dfe296d/diff

image-xpvnu.png

我们该如何理解这种实现呢?

官网文档说明

docker storage

image-yyfwe.png

docker 容器该如何挂载

docker支持哪些文件挂载方式

Claude-3 的回答

image-ynagx.png

dockers volumes 有哪些分类

回答来自于 Claude-3

image-meaas.png

如何创建本地卷

回答来自于 Claude-3

image-qvjzo.png

匿名卷和具名卷的区别

Claude-3 的回答

image-lzfar.png

docker -v html:/usr/share/nginx/html和 docker -v html:/usr/share/nginx/html 的区别

Claude-3 的回答

image-idowh.png

docker 绑定挂载有哪些潜在的问题

Claude-3 的回答

image-ocmqe.png

使用 docker -v /html:/usr/share/nginx/html挂载,如果 /html是空文件夹会带来什么问题呢

Claude-3 的回答

image-jgfrz.png

docker volume 官网说明

image-qqayk.png

云原生, Docker
云原生 Docker
License:  CC BY 4.0
Share

Further Reading

May 14, 2024

拥抱云原生:Dockerfile 的多阶段构建

什么是 Dockerfile的多阶段构建 多阶段构建的就是通过把一个构建过程拆分成多个临时构建的阶段,每个阶段完成一些任务,最后把这些分构建的结果来实现我们目标镜像的构建 ChatGPT 多

May 14, 2024

拥抱云原生:Dockerfile

拥抱云原生:Dockerfile 先来写个简单的 Dockerfile FROM alpine LABEL maintanier='study' RUN ["/bin/sh", "-c","ping -c 4 www.google.com"] CMD sleep 10000 构建镜像 C

Apr 28, 2024

拥抱云原生:Docker文件系统

拥抱云原生:Docker文件系统 通过 Nginxdocker镜像探索docker镜像是如何存储的 docker pull nginx

OLDER

拥抱云原生:Docker 指令小析

NEWER

拥抱云原生:Dockerfile

Recently Updated

  • 拥抱云原生:Dockerfile 的多阶段构建
  • 拥抱云原生:Dockerfile
  • 拥抱云原生:Docker文件系统
  • 拥抱云原生:Docker 指令小析
  • 拥抱云原生:起始

Trending Tags

Nginx 工作报告 云计算 云原生 Alpine Linux Docker Spring Linux 面试智慧

Contents

©2025 nk. Some rights reserved.

Using the Halo theme Chirpy