Docker三 | 数据卷

目录

Docker数据卷简介

添加数据卷的命令

容器数据卷的继承


Docker数据卷简介

Docker容器产生的数据,如果不备份,当容器实例删除后,容器中的数据也会消失,为了保存数据可以在Docker中使用数据卷。Docker数据卷是宿主机的一个可以供一个或多个容器使用的特殊目录,它可以在容器之间共享和重用,使得本地与容器间传递数据更高效。对数据卷的修改会立马生效,在容器内部与本地目录均可对数据卷进行修改。

添加数据卷的命令

bash 复制代码
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
bash 复制代码
[root@localhost ~]# docker run -it --privileged=true -v /tmp/hostData:/tmp/dockerData1 ubuntu /bin/bash
root@0a8bed347ffc:/# 

发现宿主机之前不存在的目录,现在已经自动创建了

bash 复制代码
root@0a8bed347ffc:/# exit
exit
[root@localhost hostData]# cd /tmp/hostData
[root@localhost hostData]# ll
总用量 0

在宿主机对应的目录下创建文件

bash 复制代码
[root@localhost hostData]# touch hello.txt
[root@localhost hostData]# ls
hello.txt

在容器目录中查看

bash 复制代码
root@0a8bed347ffc:/# ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr
root@0a8bed347ffc:/# cd /tmp/dockerData1
root@0a8bed347ffc:/tmp/dockerData1# ls
hello.txt

在容器中再创建一个文件

bash 复制代码
root@0a8bed347ffc:/tmp/dockerData1# touch hi.txt

回到宿主机中查看

bash 复制代码
root@0a8bed347ffc:/# read escape sequence
[root@localhost hostData]# ll
总用量 0
-rw-r--r-- 1 root root 0 12月  9 15:11 hello.txt
-rw-r--r-- 1 root root 0 12月  9 15:22 hi.txt

发现已经同步

把容器停止后再次在宿主机对应的目录里再次创建文件

bash 复制代码
[root@localhost hostData]# docker stop 0a8bed347ffc
0a8bed347ffc
[root@localhost hostData]# touch a.java
[root@localhost hostData]# ll
总用量 0
-rw-r--r-- 1 root root 0 12月  9 15:27 a.java
-rw-r--r-- 1 root root 0 12月  9 15:11 hello.txt
-rw-r--r-- 1 root root 0 12月  9 15:22 hi.txt

再次启动容器进入对应目录查看

bash 复制代码
[root@localhost hostData]# docker exec -it 0a8bed347ffc /bin/bash
root@0a8bed347ffc:/# cd /tmp/dockerData1
root@0a8bed347ffc:/tmp/dockerData1# ls
a.java  hello.txt  hi.txt

即使容器停止了再次启动容器后,文件仍然可以同步

进行查看数据卷的挂载

bash 复制代码
[root@localhost /]# docker inspect 0a8bed347ffc

上面的挂载默认在容器的内部都可以进行读写操作,如果只想在容器内部进行读操作,需要加上:ro标识

bash 复制代码
docker run -it --privileged=true -v /tmp/hostData:/tmp/dockerData1:ro ubuntu /bin/bash

发现创建文件失败

bash 复制代码
root@096812c74cfd:/# cd /tmp/dockerData1
root@096812c74cfd:/tmp/dockerData1# touch b.txt
touch: cannot touch 'b.txt': Read-only file system

如果宿主机写入内容,容器可以读到

容器数据卷的继承

先启动一个ubuntu容器1

bash 复制代码
[root@localhost /]# docker run -it --privileged=true -v /tmp/hostData:/tmp/data --name=u1 ubuntu /bin/bash

再启动容器1继承容器2的卷规则

bash 复制代码
docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
bash 复制代码
[root@localhost /]# docker run -it --privileged=true --volumes-from u1 --name=u2 ubuntu /bin/bash

在容器1中创建文件

bash 复制代码
[root@localhost /]# docker exec -it b3f94425fa58 /bin/bash
root@b3f94425fa58:/# cd /tmp/data
root@b3f94425fa58:/tmp/data# touch abc.java
root@b3f94425fa58:/tmp/data# ls
a.java  abc.java  hello.txt  hi.txt

在容器2中查看

bash 复制代码
[root@localhost /]# docker exec -it ddd332ab820c /bin/bash
root@ddd332ab820c:/# cd /tmp/data
root@ddd332ab820c:/tmp/data# ls
a.java  abc.java  hello.txt  hi.txt

发现容器2中也存在了abc.java文件,这样就实现了不同容器之间的数据共享

相关推荐
武子康17 小时前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
程序员老赵4 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
杨浦老苏4 天前
轻量级Docker仪表板Servedash
运维·docker·监控·群晖·仪表板
正经教主4 天前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
kiros_wang4 天前
Docker 使用完整指南
运维·docker·容器
正经教主4 天前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器
CodeStats4 天前
【虚拟机】 从 CPU 指令到虚拟机隔离:虚拟机就是一个“模拟了完整硬件的普通进程”
java·docker
ai产品老杨4 天前
突破安防碎片化:基于 Docker 与边缘计算的 AI 视频智能化中台,如何通过 GB28181/RTSP 统一接入与全套源码交付实现二次开发自由?
人工智能·docker·边缘计算
正经教主4 天前
【docker基础】第十三周:学习总结与进阶方向【完结】
运维·docker·容器