文章目录
一、docker数据卷管理
数据卷简单来讲就是一个目录,它是直接挂载到容器中,因此数据卷不属于联合文件系统,数据卷里边的内容也不会因为容器的删除而丢失;所以数据卷的作用是做容器数据持久化,也可以用作容器之间的数据交换,也可以用作容器与外部机器的简介通信
bind mount是将主机上的目录或者文件挂载到容器中去,虽然它使用起来直观高效易于理解,但是有的时候进行删除操作时会删除掉原来本机中的数据而不仅仅是数据卷中的数据,因此这种方式还是存在一定的缺陷
docker managed volume这种方式就会比上边那种方式好很多
而且这种方式创建的数据卷目录很清晰明了
[root@docker1 ~]# docker volume create vol1
vol1
[root@docker1 ~]# docker volume ls
DRIVER VOLUME NAME
local vol1
[root@docker1 ~]# docker volume inspect vol1
[
{
"CreatedAt": "2022-11-11T10:48:14+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/vol1/_data",
"Name": "vol1",
"Options": {},
"Scope": "local"
}
]
将数据卷制定挂载到发布页目录 如果挂载时指向容器内已有的目录,原有数据会被复制到volume中
docker managed volume 不需要指定mount源,docker自动为容器创建数
据卷目录。
[root@docker1 ~]# docker run -d --name web1 -v vol1:/usr/share/nginx/html nginx
12ca12255edb909c03449b7a77bb147fcc161e41cbb20cd21edc6ddee0fb522f
[root@docker1 _data]# echo www.westos.org > index.html
[root@docker1 _data]# curl 172.17.0.2
www.westos.org
docker create不同于docker run它只会创建容器而不会直接运行,
[root@docker1 ~]# docker create --name voldata -v /mnt/data1:/data1:rw -v /mnt/data2:/data2:ro busybox
2b8ea700eeb38dbf468ad07f677acdc1f6bd209497dd22a7f5e62d4e6d541d96
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b8ea700eeb3 busybox "sh" 10 seconds ago Created voldata
指定当前这个容器从上边这个容器的容器数据卷中读取
[root@docker1 ~]# docker run -it --rm --volumes-from voldata busybox
/ # ls
bin data1 data2 dev etc home proc root sys tmp usr var
/ # cd /data1/
/data1 # ls
/data1 # touch file1
/data1 # cd /data2/
/data2 # touch file2
touch: file2: Read-only file system
两种方式的对比和区别
二、卷插件介绍
当我们将卷插件以nfs的方式来运行的是时候,就可以做到在两个容器上同时运行容器,数据目录中的数据是同步的,即使其中一个主机上容器down了,但是迁移到另一台主机还是可以正常使用
[root@docker1 ~]# tar zxf convoy-v0.5.2.tar.gz
[root@docker1 ~]# cd convoy/
[root@docker1 convoy]# ls
convoy convoy-pdata_tools SHA1SUMS
[root@docker1 convoy]# mv convoy* /usr/local/bin/
[root@docker1 convoy]# cd
[root@docker1 ~]# mkdir -p /etc/docker/plugins/
[root@docker1 ~]# cd /etc/docker/
[root@docker1 docker]# ls
certs.d daemon.json key.json plugins
[root@docker1 docker]# echo "unix:///var/run/convoy/convoy.sock" >
-bash: syntax error near unexpected token `newline'
[root@docker1 docker]# echo "unix:///var/run/convoy/convoy.sock" >
-bash: syntax error near unexpected token `newline'
[root@docker1 docker]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
[root@docker1 docker]# cat /etc/docker/plugins/convoy.spec
unix:///var/run/convoy/convoy.sock
[root@docker1 docker]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &
[1] 9474
[root@docker1 docker]# DEBU[0000] Creating config at /var/lib/rancher/convoy pkg=daemon
DEBU[0000] driver=vfs driver_opts=map[vfs.path:/mnt/nfs] event=init pkg=daemon reason=prepare root=/var/lib/rancher/convoy
DEBU[0000] driver=vfs event=init pkg=daemon reason=complete
DEBU[0000] Registering GET, /info pkg=daemon
DEBU[0000] Registering GET, /volumes/list pkg=daemon
DEBU[0000] Registering GET, /volumes/ pkg=daemon
DEBU[0000] Registering GET, /snapshots/ pkg=daemon
DEBU[0000] Registering GET, /backups/list pkg=daemon
DEBU[0000] Registering GET, /backups/inspect pkg=daemon
DEBU[0000] Registering POST, /volumes/create pkg=daemon
DEBU[0000] Registering POST, /volumes/mount pkg=daemon
DEBU[0000] Registering POST, /volumes/umount pkg=daemon
DEBU[0000] Registering POST, /snapshots/create pkg=daemon
DEBU[0000] Registering POST, /backups/create pkg=daemon
DEBU[0000] Registering DELETE, /volumes/ pkg=daemon
DEBU[0000] Registering DELETE, /snapshots/ pkg=daemon
DEBU[0000] Registering DELETE, /backups pkg=daemon
DEBU[0000] Registering plugin handler POST, /Plugin.Activate pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Create pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Unmount pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Path pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Get pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Capabilities pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Remove pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Mount pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.List pkg=daemon
[root@docker1 docker]# ll /var/run/convoy/convoy.sock
srwxr-xr-x 1 root root 0 Nov 11 12:26 /var/run/convoy/convoy.sock