前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云原生之Docker容器的存储管理

云原生之Docker容器的存储管理

原创
作者头像
江湖有缘
发布2023-01-21 09:50:30
6530
发布2023-01-21 09:50:30
举报
文章被收录于专栏:Linux成长之路Linux成长之路

一、检查本地docker环境

1.检查宿主机系统版本

代码语言:shell
复制
[root@docker ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core) 

2.检查docker版本

代码语言:shell
复制
[root@docker ~]# docker -v
Docker version 20.10.18, build b40c2f6

二、创建一个测试httpd容器

1.创建测试目录

代码语言:shell
复制
[root@docker ~]# mkdir -p /data/test
[root@docker ~]# cd /data/test/
[root@docker test]# 

2.创建httpd容器

代码语言:shell
复制
docker run -d  --name web01 -p 82:80 -v /data/test/htdocs/:/usr/local/apache2/htdocs/ httpd
image.png
image.png

3.查看容器状态

代码语言:shell
复制
[root@docker test]# docker ps
CONTAINER ID   IMAGE                         COMMAND                  CREATED              STATUS              PORTS                                                 NAMES
05d35ba971ad   httpd                         "httpd-foreground"       About a minute ago   Up About a minute   0.0.0.0:82->80/tcp, :::82->80/tcp                     web01

4.查看容器详细信息

代码语言:shell
复制
[root@docker test]# docker inspect web01 
[
    {
        "Id": "05d35ba971ad78179a7ab7a93dfb4c59faeb5872152f03a897144f4e5040b7ee",
        "Created": "2022-10-24T09:15:39.545943014Z",
        "Path": "httpd-foreground",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 113766,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-10-24T09:15:39.826230552Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:dabbfbe0c57b6e5cd4bc089818d3f664acfad496dc741c9a501e72d15e803b34",
        "ResolvConfPath": "/var/lib/docker/containers/05d35ba971ad78179a7ab7a93dfb4c59faeb5872152f03a897144f4e5040b7ee/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/05d35ba971ad78179a7ab7a93dfb4c59faeb5872152f03a897144f4e5040b7ee/hostname",
        "HostsPath": "/var/lib/docker/containers/05d35ba971ad78179a7ab7a93dfb4c59faeb5872152f03a897144f4e5040b7ee/hosts",
        "LogPath": "/var/lib/docker/containers/05d35ba971ad78179a7ab7a93dfb4c59faeb5872152f03a897144f4e5040b7ee/05d35ba971ad78179a7ab7a93dfb4c59faeb5872152f03a897144f4e5040b7ee-json.log",
        "Name": "/web01",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/data/test/htdocs/:/usr/local/apache2/htdocs/"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "82"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/97d6b86a78f355c15fb43d539fc284b60f464c0ee768d87a8e5cbe62e3a62626-init/diff:/var/lib/docker/overlay2/76281b2c0491c38ccd64dc2c9164c58eefd014a7294117c4962515bf75419681/diff:/var/lib/docker/overlay2/1f4f0f5f0c604cca28ad955db0b19c04f93026468448ca98f43f4eeaa69b4186/diff:/var/lib/docker/overlay2/47f840069670e495b72b41d3aba5e0ed52346af2da30c4b9accc0b9866d9e3f9/diff:/var/lib/docker/overlay2/e1042193e6b8e7fefe86fc987757ee0a9c7d1f297db466e08af143ead1095138/diff:/var/lib/docker/overlay2/4649e6ac724d477b2fe8db2da934d572eaaaa946a847936794b506edf8b0c87d/diff",
                "MergedDir": "/var/lib/docker/overlay2/97d6b86a78f355c15fb43d539fc284b60f464c0ee768d87a8e5cbe62e3a62626/merged",
                "UpperDir": "/var/lib/docker/overlay2/97d6b86a78f355c15fb43d539fc284b60f464c0ee768d87a8e5cbe62e3a62626/diff",
                "WorkDir": "/var/lib/docker/overlay2/97d6b86a78f355c15fb43d539fc284b60f464c0ee768d87a8e5cbe62e3a62626/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/data/test/htdocs",
                "Destination": "/usr/local/apache2/htdocs",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        "Config": {
            "Hostname": "05d35ba971ad",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "HTTPD_PREFIX=/usr/local/apache2",
                "HTTPD_VERSION=2.4.52",
                "HTTPD_SHA256=0127f7dc497e9983e9c51474bed75e45607f2f870a7675a86dc90af6d572f5c9",
                "HTTPD_PATCHES="
            ],
            "Cmd": [
                "httpd-foreground"
            ],
            "Image": "httpd",
            "Volumes": null,
            "WorkingDir": "/usr/local/apache2",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {},
            "StopSignal": "SIGWINCH"
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "99696b43e61670fc9f98c0d84d6da281fe4db3ec52dc5210895014dbe4ca69a4",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "82"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "82"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/99696b43e616",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "276ea4df3a145005646c1f457c57ad47ab3e367cc6a2c15ce78bc2b0a198b25d",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "49542796523d70c8ccea7b297c45542ee4b5f30be2d9e1420cdf9ea57c5864fe",
                    "EndpointID": "276ea4df3a145005646c1f457c57ad47ab3e367cc6a2c15ce78bc2b0a198b25d",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

三、宿主机目录内更新文件,验证容器内读取

1.进入容器宿主机挂载目录

代码语言:shell
复制
[root@docker test]# pwd
/data/test
[root@docker test]# cd htdocs/
[root@docker htdocs]# ls
[root@docker htdocs]# 

2.新建index.html文件

代码语言:shell
复制
echo "Docker technology plays an important role in today's society." > index.html

3.查看容器内index.html

代码语言:shell
复制
[root@docker htdocs]# docker exec -it web01 /bin/bash
root@05d35ba971ad:/usr/local/apache2# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs	modules
root@05d35ba971ad:/usr/local/apache2# cd htdocs/
root@05d35ba971ad:/usr/local/apache2/htdocs# ls
index.html
root@05d35ba971ad:/usr/local/apache2/htdocs# cat index.html 
Docker technology plays an important role in today's society.

四、删除测试容器,查看宿主机index.heml

代码语言:shell
复制
[root@docker htdocs]# docker stop web01 
web01
[root@docker htdocs]# docker rm  web01 
web01
[root@docker htdocs]# ls
index.html
[root@docker htdocs]# cat index.html 
Docker technology plays an important role in today's society.

五、容器的数据卷管理

1.再次运行测试容器

代码语言:shell
复制
[root@docker htdocs]# docker run -d  --name web02 -p 85:80 -v /usr/local/apache2/htdocs/  httpd
f028c9fbcddb186dd616a5bf7990378abc9f492e9275f0f5b587ef60a30145e3

2.查看容器默认挂载的数据卷

代码语言:shell
复制
[root@docker htdocs]# docker inspect web02  |grep Mounts -A5
        "Mounts": [
            {
                "Type": "volume",
                "Name": "3b1eab4eb072a43375068c8ff534028de2a7f6dd6aeceb60c0d1584c4bc046a6",
                "Source": "/var/lib/docker/volumes/3b1eab4eb072a43375068c8ff534028de2a7f6dd6aeceb60c0d1584c4bc046a6/_data",
                "Destination": "/usr/local/apache2/htdocs",

3.进入容器内编辑index.html内容

代码语言:shell
复制
[root@docker htdocs]# docker exec -it web02  /bin/bash
root@f028c9fbcddb:/usr/local/apache2# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs	modules
root@f028c9fbcddb:/usr/local/apache2# cd htdocs/
root@f028c9fbcddb:/usr/local/apache2/htdocs# echo "Docker technology plays an important role in today's society." > index.html
root@f028c9fbcddb:/usr/local/apache2/htdocs# 

4.宿主机访问内容

代码语言:shell
复制
[root@docker htdocs]# curl 127.0.0.1:85
Docker technology plays an important role in today's society.

5.在宿主机默认挂载卷检查index.html

代码语言:shell
复制
[root@docker htdocs]# docker inspect web02  |grep Mounts -A5
        "Mounts": [
            {
                "Type": "volume",
                "Name": "3b1eab4eb072a43375068c8ff534028de2a7f6dd6aeceb60c0d1584c4bc046a6",
                "Source": "/var/lib/docker/volumes/3b1eab4eb072a43375068c8ff534028de2a7f6dd6aeceb60c0d1584c4bc046a6/_data",
                "Destination": "/usr/local/apache2/htdocs",
[root@docker htdocs]# cd /var/lib/docker/volumes/3b1eab4eb072a43375068c8ff534028de2a7f6dd6aeceb60c0d1584c4bc046a6/_data
[root@docker _data]# ls
index.html
[root@docker _data]# cat index.html 
Docker technology plays an important role in today's society.

6.删除容器,验证数据持久化

代码语言:shell
复制
[root@docker _data]# docker stop web02 
web02
[root@docker _data]# docker rm  web02 
web02
[root@docker _data]# ls
index.html
[root@docker _data]# pwd
/var/lib/docker/volumes/3b1eab4eb072a43375068c8ff534028de2a7f6dd6aeceb60c0d1584c4bc046a6/_data
[root@docker _data]# cat index.html 
Docker technology plays an important role in today's society.

六、创建数据卷容器

1.创建一个数据卷容器test03

代码语言:shell
复制
[root@docker htdocs]#  docker create --name test03 -v /data/test/htdocs:/usr/local/apache2/htdocs -v /other/tools/ busybox 
3aab455cee0bccd7776ed43bee1d083a4fb61275e7cfd8b63a3e0de9a9b6b9c5

2.查看数据卷容器详细信息

代码语言:shell
复制
[root@docker htdocs]# docker inspect test03 |grep Mounts -A16
        "Mounts": [
            {
                "Type": "volume",
                "Name": "795b0038d6092015781b524d85e95252326787f9e5db45b703666f3ca587c1db",
                "Source": "/var/lib/docker/volumes/795b0038d6092015781b524d85e95252326787f9e5db45b703666f3ca587c1db/_data",
                "Destination": "/other/tools",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "bind",
                "Source": "/data/test/htdocs",
                "Destination": "/usr/local/apache2/htdocs",
                "Mode": "",
                "RW": true,
[root@docker htdocs]# 

七、创建test04测试容器

1.创建test04容器

代码语言:shell
复制
[root@docker htdocs]#  docker run --name test04 -td -p 86:80 --volumes-from test03  busybox
cfde4db1ff755695a7b2f4c10e863c9fdf8e9a0f7f4a132d2fdd2fb0e4c497f8

2.检查test04容器的volume部分

代码语言:shell
复制
[root@docker htdocs]# docker inspect test04 |grep Mounts
        "Mounts": [
[root@docker htdocs]# docker inspect test04 |grep Mounts -A16
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/data/test/htdocs",
                "Destination": "/usr/local/apache2/htdocs",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "795b0038d6092015781b524d85e95252326787f9e5db45b703666f3ca587c1db",
                "Source": "/var/lib/docker/volumes/795b0038d6092015781b524d85e95252326787f9e5db45b703666f3ca587c1db/_data",
                "Destination": "/other/tools",
                "Driver": "local",
                "Mode": "",
                "RW": true,

3.检查test04容器中index.html

代码语言:shell
复制
[root@docker htdocs]# docker exec -it test04 /bin/bash
OCI runtime exec failed: exec failed: unable to start container process: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown
[root@docker htdocs]# docker exec -it test04 /bin/sh
/ # cat /usr/local/apache2/htdocs/index.html
Docker technology plays an important role in today's society.
/ # 

4.在test04容器挂载路径创建文件,验证宿主机路径信息

代码语言:shell
复制
/ # cd /other/tools/
/other/tools # ls
/other/tools # echo "aa-test-out " > test.out
/other/tools # 

5.检查数据卷中的文件

代码语言:shell
复制
[root@docker htdocs]# docker inspect test04 |grep Mounts
        "Mounts": [
[root@docker htdocs]# docker inspect test04 |grep Mounts -A16
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/data/test/htdocs",
                "Destination": "/usr/local/apache2/htdocs",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "795b0038d6092015781b524d85e95252326787f9e5db45b703666f3ca587c1db",
                "Source": "/var/lib/docker/volumes/795b0038d6092015781b524d85e95252326787f9e5db45b703666f3ca587c1db/_data",
                "Destination": "/other/tools",
                "Driver": "local",
                "Mode": "",
                "RW": true,
[root@docker htdocs]# cd /var/lib/docker/volumes/795b0038d6092015781b524d85e95252326787f9e5db45b703666f3ca587c1db/_data
[root@docker _data]# ls
test.out
[root@docker _data]# cat test.out 
aa-test-out 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、检查本地docker环境
    • 1.检查宿主机系统版本
      • 2.检查docker版本
      • 二、创建一个测试httpd容器
        • 1.创建测试目录
          • 2.创建httpd容器
            • 3.查看容器状态
              • 4.查看容器详细信息
              • 三、宿主机目录内更新文件,验证容器内读取
                • 1.进入容器宿主机挂载目录
                  • 2.新建index.html文件
                    • 3.查看容器内index.html
                    • 四、删除测试容器,查看宿主机index.heml
                    • 五、容器的数据卷管理
                      • 1.再次运行测试容器
                        • 2.查看容器默认挂载的数据卷
                          • 3.进入容器内编辑index.html内容
                            • 4.宿主机访问内容
                              • 5.在宿主机默认挂载卷检查index.html
                                • 6.删除容器,验证数据持久化
                                • 六、创建数据卷容器
                                  • 1.创建一个数据卷容器test03
                                    • 2.查看数据卷容器详细信息
                                    • 七、创建test04测试容器
                                      • 1.创建test04容器
                                        • 2.检查test04容器的volume部分
                                          • 3.检查test04容器中index.html
                                            • 4.在test04容器挂载路径创建文件,验证宿主机路径信息
                                              • 5.检查数据卷中的文件
                                              相关产品与服务
                                              容器服务
                                              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                              领券
                                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档