脚本宝典收集整理的这篇文章主要介绍了Docker之数据卷,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
分层结构使镜像和容器的创建、共享以及分发变得非常高效,而这些都要归功于Docker storage driver。Docker支持多种storage driver,有AUFS、Device MapPEr、btrfs、OverlayFS、VFS和ZFS。没有哪个driver能够适应所有的场景,最佳实践是优先使用Linux发行版默认的storage driver。Docker安装时会根据当前系统的配置选择默认的driver。默认driver具有最好的稳定性,因为默认driver在发行版上经过了严格的测试。
1. 着重查看 Storage Driver: overlay2信息
$ docker info
Client:
Debug Mode: false
Server:
Containers: 3
Running: 3
Paused: 0
Stopped: 0
Images: 109
Server Version: 19.03.9
Storage Driver: overlay2
Backing FileSystem: xfs
Supports d_type: true
Native Overlay Diff: true
LOGging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
InIT Binary: docker-init
containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc version: dc9208a3303feef5b3839f4323d9beb36DF0a9dd
init version: fec3683
Security Options:
seccomp
PRofile: default
Kernel Version: 4.4.227-1.el7.elrepo.x86_64
operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 2
total Memory: 3.842GiB
Name: jannal.docker.COM
ID: XKUN:GE65:TC7N:YAEW:VWVN:247J:EQ24:HZ2S:YSFG:ZL7P:IBUK:RN2L
Docker Root Dir: /VAR/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://7m2taepc.mirror.aliyuncs.com/
Live ReStore Enabled: false
Data Volume本质上是Docker Host文件系统中的目录或文件,能够直接被mount到容器的文件系统中
bind mount:将host上已存在的目录或文件mount到容器。默认是可读可写
-v的格式为 <host path>:<container path>
设置只读权限-v /root:/root:ro
指定一个文件-v /root/a.txt:/root/a_new.txt
。使用单一文件需要注意,host中的源文件必须要存在,不然会当作一个新目录bind mount给容器。
指定一个目录-v /root/install/:/root:install/:rw
docker managed volume:
mount point
-v
示例
通过-v告诉docker需要一个data volume,并将其mount到/root/a.txt
$ docker run -it --name data-busybox -v "/root/a.txt" busybox
查看data volume 具体的位置
$ docker inspect c94fb9f45eea
...省略...
"Mounts": [
{
"Type": "volume",
"Name": "6504feb75a4eafeb3b9049da2bacc6d37a20b046f23e752d1e48774510a18bd7",
"Source": "/var/lib/docker/volumes/6504feb75a4eafeb3b9049da2bacc6d37a20b046f23e752d1e48774510a18bd7/_data",
"Destination": "/root/a.txt",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
...省略...
$ docker volume ls
DRIVER VOLUME NAME
local 3232b71e69b26e362ac8032577982d7a85847537d4eb4aa2CF54270419988621
local 6504feb75a4eafeb3b9049da2bacc6d37a20b046f23e752d1e48774510a18bd7
docker volume只能查看docker managed volume,还看不到bind mount;
同时也无法知道volume对应的容器,这些信息还得靠docker inspect。
$ docker volume inspect 6504feb75a4eafeb3b9049da2bacc6d37a20b046f23e752d1e48774510a18bd7
[
{
"CreatedAt": "2021-09-17T10:27:17+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/6504feb75a4eafeb3b9049da2bacc6d37a20b046f23e752d1e48774510a18bd7/_data",
"Name": "6504feb75a4eafeb3b9049da2bacc6d37a20b046f23e752d1e48774510a18bd7",
"Options": null,
"Scope": "local"
}
]
每当容器申请mount docker manged volume时,docker都会在 /var/lib/docker/volumes
下生成一个目录,这个目录就是mount源。由于volume位于host中的目录,是在容器启动时才生成,所以需要将共享数据复制到volume中
docker cp
可以在容器与Host之间复制数据。也可以直接通过Linux的cp命令复制到 /var/lib/docker/volumes/xxx
共享数据方式
创建数据卷容器
1. 数据卷的作用只是提供数据,它本身不需要处于运行状态
$ docker create --name vc_my
-v /root/a.txt
-v /root/b.txt:/root/bb.txt
busybox
ea764715a12d9073d2722ac07fd54a819996F1d3fa8c46252d9728ffb23a0b2d
查看卷容器
$ docker inspect vc_my
--volumes-From使用数据卷容器
$ docker run -it --name data0-busybox -volumes-from=vc_my busybox
删除孤儿volume
$ docker volume rm $(docker volume ls -q)
以上是脚本宝典为你收集整理的Docker之数据卷全部内容,希望文章能够帮你解决Docker之数据卷所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。