为什么用容器卷
正常情况下容器内的数据和容器是共生共存的,当容器被删除时数据也会丢失。容器卷就是将容器内部的指定路径和宿主机上的指定路径进行映射。达到数据共享的目的。
怎么用容器卷
docker run -it -v 宿主机目录:/容器目录 - - privileaged=true 镜像名
特点
- 可以在容器之间共享或者重用数据;
- 卷中的更改可以直接实时生效;
- 数据卷中的更改不会包含在镜像的更新中;
- 数据卷的生命周期一直持续到没有容器使用其为止。
实操
docker操作
➜ ~ docker run -it -v /Users/huzd/Desktop/aaa:/aaa --name="u1" ubuntu # 启动docker并且做文件映射
root@fecc8941c253:/# ls
aaa bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@fecc8941c253:/# cd /aaa/ # 验证aaa目录是否存在
root@fecc8941c253:/aaa# ls
root@fecc8941c253:/aaa# touch dockerin.txt # 创建dockerin.txt 文件夹
root@fecc8941c253:/aaa# ll # 查看宿主机创建的dockerout.txe文件夹
total 4
drwxr-xr-x 4 root root 128 Jun 22 00:47 ./
drwxr-xr-x 1 root root 4096 Jun 22 00:47 ../
-rw-r--r-- 1 root root 0 Jun 22 00:47 dockerin.txt
-rw-r--r-- 1 root root 0 Jun 22 00:47 dockerout.txt
root@fecc8941c253:/aaa# ls
a.txt dockerin.txt dockerout.txt
root@fecc8941c253:/aaa# more a.txt
hello docker !
root@fecc8941c253:/aaa# echo 'hello host!' >> a.txt
root@fecc8941c253:/aaa# more a.txt
hello docker !
hello host!
root@fecc8941c253:/aaa#
宿主机操作
➜ Desktop cd aaa
➜ aaa touch dockerout.txt
➜ aaa ls
dockerin.txt dockerout.txt
➜ aaa echo 'hello docker !' > a.txt
➜ aaa cat a.txt
hello docker !
➜ aaa
➜ aaa cat a.txt
hello docker !
hello host!
➜ aaa
查看挂载情况
docker inspect 容器ID
docker inspect fecc8941c253
"Mounts": [
{
"Type": "bind",
"Source": "/Users/huzd/Desktop/aaa",
"Destination": "/aaa",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
只读不能写
命令: docker run -it -v /Users/huzd/Desktop/aaa:/ccc**:ro** --name=u2 ubuntu
ro read-only 只读
rw read-write 读写
此时宿主机的任何改动容器里面会实时同步,但是容器无法写挂在的数据卷。
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
➜ ~ docker run -it -v /Users/huzd/Desktop/aaa:/ccc:ro --name=u2 ubuntu #按照只读方式挂载一个容器卷
root@6985bfbf7b48:/# ls
bin boot ccc dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@6985bfbf7b48:/# cd ccc/
root@6985bfbf7b48:/ccc# touch test.txt #操作只读容器卷
touch: cannot touch 'test.txt': Read-only file system
root@6985bfbf7b48:/ccc#
容器卷继承
命令:docker run -it --privileged=true --volumes-from 父类容器ID --name='Container2' 镜像名字或容器ID:版本号
➜ aaa docker run -it --volumes-from 6985bfbf7b48 --name u3 ubuntu
root@a124153c09b2:/# ls
bin boot ccc dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@a124153c09b2:/# cd /ccc/
root@a124153c09b2:/ccc# ls
a.txt dockerin.txt dockerout.txt test.json
root@a124153c09b2:/ccc# touch aa.json # 集成了父容器数据卷可读的属性
touch: cannot touch 'aa.json': Read-only file system
root@a124153c09b2:/ccc# ls
a.txt ccc.json dockerin.txt dockerout.txt test.json
本文由 huzd 创作,采用 知识共享署名4.0 国际许可协议进行许可本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名最后编辑时间
为:
2022/06/30 22:32