Linux-Docker数据管理

Docker数据管理

  如果正在运行中的容器生成了新的数据或者修改了现有的一个已经存在的文件内容,那么新产生的数据将会被复制到读写层进行持久化保存,这个读写层也就是容器的工作目录,此即“写时复制(COW)copy on write”

 

 

数据类型

Docker的镜像是分层设计的,镜像层是只读的,通过镜像启动的容器添加了一层可读写的文件系统,用户写入的数据保存这一层当中。

如果要将写入到容器的数据永久保存,则需要将容器中的数据保存到宿主机的指定目录,目前Docker的数据类型分为两种:

  • 一是数据卷(data volume),数据卷类似于挂载的一块磁盘,数据容器是将数据保存在一个容器上。
  • 二是数据卷容器(Data volume container),数据卷容器时将宿主机的目录挂载至一个专门的数据卷容器,然后让其他容器通过数据卷容器读写宿主机的数据。
[19:28:43 root@ubuntu-lyj ~]#docker inspect 455fc2e0e6ea
.......................................
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/8d75954cffcb348d75c85e9b706198778cb60abc3af05ca0c481ea07d6a64ae1/diff:/var/lib/docker/overlay2/f80215f2a891b48b89cc9cd9eb559dc5842e1a41f85c969d2bf8ab5a2a23dbbb/diff:/var/lib/docker/overlay2/bdc2a653ddf7cf0fe549a130bf1f5ca00cb9f164659007c1d71de7fe14d36284/diff:/var/lib/docker/overlay2/a3022eeb3eb7a5c9ed9ccb853ae59846e3428fb6233ef0d9574c45d11ebbf92a/diff:/var/lib/docker/overlay2/5ea5c0d025af26892b5eeb3c0264115c26df51a24974588032633708a1a1a570/diff:/var/lib/docker/overlay2/9c1ca92802d4c3b279670279ffce2d483cd76d414bd9332fc0289995b1931c76/diff:/var/lib/docker/overlay2/5e047fb2a38bccda50957812a97d92db91cb5d9958c26a502004fffbd4c9bbf1/diff:/var/lib/docker/overlay2/5ab198a0340fb0f702850705f47907e882ddc809e6d6124623f2c34b628dc254/diff:/var/lib/docker/overlay2/f6a0f82f4d6ebcc4a5c830cdd5302dbd6449cf3d02a1379f75e193d6865c1b43/diff:/var/lib/docker/overlay2/8f0c2f846ac07f6f0ac24a99f2fa4a4de06bbc1e3dca48f4fef4edd58132ed94/diff:/var/lib/docker/overlay2/4498ee83611df85835acaa00f9a255ba26f6b3e515e6ab5217429ab0ecae9dd0/diff:/var/lib/docker/overlay2/4f1a0421b0678996419aca6b8c469ac39cac3b6cbe2ae0b9417407d036d4c759/diff:/var/lib/docker/overlay2/9eaac887cd3fbbf5b50dba857b1cede9b0638e515c27e770bf41c24eb7bba623/diff",
                "MergedDir": "/var/lib/docker/overlay2/7aa93647252f594532e8d6d40fe14f033001c76e05167e464cec5eda55eba90a/merged",
                "UpperDir": "/var/lib/docker/overlay2/7aa93647252f594532e8d6d40fe14f033001c76e05167e464cec5eda55eba90a/diff",
                "WorkDir": "/var/lib/docker/overlay2/7aa93647252f594532e8d6d40fe14f033001c76e05167e464cec5eda55eba90a/work"
            },
            "Name": "overlay2"
        }
.......................................

 

Lower Dir: image 镜像层(镜像本身,只读)
Merged Dir:容器的文件系统,使用Union FS(联合文件系统)将lowerd和upperdir合并给容器使用
Upper Dir:容器的上层(读写)
work Dir:容器在宿主机的工作目录

 

什么是数据卷(data volume)

数据卷实际上就是宿主机上的目录或者是文件,可以被直接挂载到容器当中使用。

实际生产环境中,需要针对不同类型的服务,不同类型的数据存储要求做相应的规划,最终保证服务的可扩展性,稳定性以及数据的安全性。。

 

 创建app目录并生成web页面:

此app以数据卷的方式,提供给容器使用,比如容器可以直接宿主机本地的webapp,而需要将代码提前添加到容器中,此方式适用于小型web站点。

[09:12:28 root@ubuntu-lyj ~]#mkdir /data/testapp 
[09:13:25 root@ubuntu-lyj ~]#echo "testapp page 1.1" > /data/testapp/index.html
[09:14:16 root@ubuntu-lyj ~]#cat /data/testapp/index.html 
testapp page 1.1

测试启动容器并验证数据

--rm 退出容器后,自动删除容器

使用-v参数,将宿主机目录映射到容器内部

[10:13:24 root@ubuntu-lyj ~]#docker run -it --rm  --name web1 -v /data/testapp:/data/tomcat/webapps/testapp -p 8080:8080 hardor.jing.com/n65/tomcat-web:app2
Using CATALINA_BASE:   /apps/tomcat
Using CATALINA_HOME:   /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.2    ab5b6661bb93

进入容器查看挂载的目录成功

[10:13:44 root@ubuntu-lyj ~]#docker exec -it ab5b6661bb93 bash
[root@ab5b6661bb93 /]# ll /data/tomcat/webapps/
total 8
drwxr-xr-x 1 www  www  4096 Aug  8 10:26 myapp
drwxr-xr-x 2 root root 4096 Aug 11 09:14 testapp
[root@ab5b6661bb93 /]# 

web端访问测试

 

 在容器中修该web界面的代码

[10:13:44 root@ubuntu-lyj ~]#docker exec -it ab5b6661bb93 bash
[root@ab5b6661bb93 /]# ll /data/tomcat/webapps/
total 8
drwxr-xr-x 1 www  www  4096 Aug  8 10:26 myapp
drwxr-xr-x 2 root root 4096 Aug 11 09:14 testapp
[root@ab5b6661bb93 /]#vim /data/tomcat/webapps/testapp/index.html 
[root@ab5b6661bb93 /]# cat /data/tomcat/webapps/testapp/index.html 
testapp page 1.1.15
[root@ab5b6661bb93 /]# 

web访问测试

 

 退出容器,宿主机目录的内容还在

[10:23:47 root@ubuntu-lyj ~]#cat /data/testapp/index.html 
testapp page 1.1.15

数据卷的特点及使用:

1、数据卷是宿主机的目录或者文件,并且可以在多个容器之间共同使用。
2、在宿主机对数据卷更改数据后会在所有容器里面会立即更新。
3、数据卷的数据可以持久化保存,即使删除使用该容器卷的容器也不影响。
4、在容器里面写入数据不会影响到镜像本身。

 

文件挂载

文件挂载用于很少更改文件内容的场景,比如nginx的配置文件、tomcat的配置文件等

 

数据卷使用场景

日志输出
静态web页面
应用配置文件
多容器间目录或文件共享

 

数据卷容器:

  数据卷容器功能是可以让数据在多个docker容器之间共享,即可以让B容器访问A容器的内容,而C容器也可以访问A容器的内容,即先要创建一个后台运行的容器作为Server,用于卷提供,这个卷可以为其他容器提供数据存储服务,其他使用此卷的容器作为client端

/data/testapp
/data/tomcat/static
/data/tomcat/conf/server.xml


docker run -it --rm  --name volume-server -v /data/testapp:/data/tomcat/webapps/testapp \
-v /data/tomcat/conf/server.xml:/apps/tomcat/conf/server.xml:ro  \
-v /data/tomcat/static:/data/tomcat/webapps/static \
harbor.jing.com/m43/tomcat-web:app1


docker run -d --name web1  -p 8801:8080 --volumes-from  volume-server  harbor.jing.com/m43/tomcat-web:app1
docker run -d --name web2  -p 8802:8080 --volumes-from  volume-server  harbor.jing.com/m43/tomcat-web:app2
docker run -d --name web3  -p 8803:8080  harbor.magedu.com/m43/tomcat-m43:app2
docker run -d --name web4  -p 8804:8080 --volumes-from  volume-server  harbor.jing.com/m43/tomcat-web:app2

停止卷server:
  1.不影响当前已经创建好的容器的运行
  2.而且也不影响新容器的创建

删除卷server:
  1.不影响当前已经创建好的容器的运行
  2.但是无法创建基于volume-server集成卷的新容器

posted @ 2022-08-11 10:58  goodbay说拜拜  阅读(206)  评论(0编辑  收藏  举报