Docker容器数据持久化存储机制

朴灿烈づ我的快乐病毒、 2024-03-02 08:48 133阅读 0赞

这里写目录标题

  • 一、Docker容器数据持久化存储介绍
  • 二、Docker容器数据持久化存储方式
  • 三、Docker容器数据持久化存储方式应用案例演示
    • 3.1 docker run -v
      • 3.1.1 创建了本地目录
      • 3.1.2 未创建本地目录
    • 3.2 volumes
      • 3.2.1 创建数据卷
      • 3.2.2 使用数据卷

一、Docker容器数据持久化存储介绍

物理机或虚拟机数据持久化存储

  • 由于物理机或虚拟机本身就拥有大容量的磁盘,所以可以直接把数据存储在物理机或虚拟机本地文件系统中,亦或者也可以通过使用额外的存储系统(NFS、GlusterFS、Ceph等)来完成数据持久化存储。

Docker容器数据持久化存储

  • 由于Docker容器是由容器镜像生成的,所以一般容器镜像中包含什么文件或目录,在容器启动后,我们依旧可以看到相同的文件或目录。
  • 由于Docker容器属于”用后即焚”型计算资源,因此Docker容器不适合做数据持久化存储

二、Docker容器数据持久化存储方式

Docker提供三种方式将数据从宿主机挂载到容器中:

  • docker run -v

    • 运行容器时,直接挂载本地目录至容器中
  • volumes

    • Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)
    • 是Docker默认存储数据方式
  • bind mounts

    • 将宿主机上的任意位置文件或目录挂载到容器中

三、Docker容器数据持久化存储方式应用案例演示

3.1 docker run -v

3.1.1 创建了本地目录

nginx下新建index.html文件,并且定义内容

  1. root@hecs-213321:~/Docker/nginx# ls
  2. index.html
  3. root@hecs-213321:~/Docker/nginx# cat index.html
  4. <h1>今天是99日</h1>

启动容器
-v ./nginx/:/usr/share/nginx/html/:将宿主机中的nginx目录下的文件挂载到容器中的/usr/share/nginx/html/目录下

  1. root@hecs-213321:~/Docker# docker run -d --name web -v ./nginx/:/usr/share/nginx/html/ nginx:latest

查看容器

  1. root@hecs-213321:~/Docker# sudo docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. e3e2107bf3fc nginx:latest "/docker-entrypoint.…" 58 seconds ago Up 56 seconds 80/tcp web

查看容器的IPAddress

  1. root@hecs-213321:~/Docker/nginx# docker inspect web

20c072ffbb5acc2f1a2735c638e014f2.png

访问

  1. root@hecs-213321:~/Docker/nginx# curl http://172.17.0.2
  2. <h1>今天是99日</h1>

把容器删掉

  1. root@hecs-213321:~/Docker/nginx# docker stop web
  2. web
  3. root@hecs-213321:~/Docker/nginx# docker rm web
  4. web

发现宿主机中的文件还在

  1. root@hecs-213321:~/Docker# cd nginx/
  2. root@hecs-213321:~/Docker/nginx# ls
  3. index.html

当重新运行容器时,容器中的/usr/share/nginx/html/目录下还会存在index.html文件

  1. root@hecs-213321:~/Docker/nginx# docker run -d --name web -v ./nginx/:/usr/share/nginx/html/ nginx:latest
  2. 7559987e00f184fb96ce136149e864197bbbe5366930f93d85fad6222ba363ab

当在容器中的挂载的文件发生变化,宿主机中挂载的文件也将发生变化。

  1. root@hecs-213321:~/Docker/nginx# sudo docker exec -it web /bin/sh

修改容器中的文件内容

  1. # cd /usr/share/nginx/html
  2. # echo '66666'>index.html
  3. # cat index.html
  4. 66666

宿主机中的文件内容也将发生变化

  1. root@hecs-213321:~/Docker/nginx/nginx# cat index.html
  2. 66666

同样的,当在宿主机中的挂载的文件发生变化,容器中挂载的文件也将发生变化。

3.1.2 未创建本地目录

运行容器

  1. root@hecs-213321:~# docker run -d --name web1 -v ./web1root/:/usr/share/nginx/html/ nginx:latest

查看运行中的容器

  1. root@hecs-213321:~# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 6f631e440db1 nginx:latest "/docker-entrypoint.…" 31 seconds ago Up 30 seconds 80/tcp web1
  4. 7559987e00f1 nginx:latest "/docker-entrypoint.…" 34 minutes ago Up 34 minutes 80/tcp web

查看web1容器的IPAddress

  1. docker inspect web1

75d73d0f04e1bb73ba6c9c813622d557.png

访问,报403

  1. curl http://172.17.0.3

1a16cec65479f71b5c2918626bcf124e.png

原因是该目录下没有文件

  1. root@hecs-213321:~# ls
  2. Docker snap web1root
  3. root@hecs-213321:~# cd web1root/
  4. root@hecs-213321:~/web1root# ls

创建index.html文件,并且新加内容,再次访问即可访问成功

  1. root@hecs-213321:~/web1root# echo 'web1' > index.html
  2. root@hecs-213321:~/web1root# curl http://172.17.0.3
  3. web1

3.2 volumes

3.2.1 创建数据卷

  1. docker volume create nginx-volume

查看数据卷

  1. root@hecs-213321:~# docker volume ls
  2. DRIVER VOLUME NAME
  3. local 9b4315d9adb4ce6677921ea040e3f9180c325230aa8cd8cdfa8fac754318473f
  4. local nginx-volume

查看数据卷详情

  1. root@hecs-213321:~# docker inspect nginx-volume
  2. [
  3. {
  4. "CreatedAt": "2023-09-09T11:45:17+08:00",
  5. "Driver": "local",
  6. "Labels": null,
  7. "Mountpoint": "/var/lib/docker/volumes/nginx-volume/_data",
  8. "Name": "nginx-volume",
  9. "Options": null,
  10. "Scope": "local"
  11. }
  12. ]

3.2.2 使用数据卷

-- mount:指定使用自己创建的volume
src=nginx-volume:指定使用那个数据卷
dst:指定挂载到容器中的具体位置

  1. root@hecs-213321:~# docker run -d --name web3 --mount src=nginx-volume,dst=/usr/share/nginx/html/ nginx:latest
  2. 231aa656b24d2e189e0f340df7447fcc0db96cbdc530e060fa7bdd52799e1b50
  3. root@hecs-213321:~# ls

查看容器详细信息,并且访问

  1. root@hecs-213321:~# docker inspect web3

并没有报403
上面的操作中创建容器的时候使用 -v 会报403

4909b943034fb803c7c641ae0a2d5873.png

创建的数据卷,默认存储在/var/lib/docker/volumes/nginx-volume/_data目录下

发表评论

表情:
评论列表 (有 0 条评论,133人围观)

还没有评论,来说两句吧...

相关阅读