容器数据卷
数据卷是Docker中用于持久化存储数据的一种机制。它是一个可供容器使用的特殊目录,可以在容器和主机之间共享和持久化数据。
数据卷的主要特点包括:
数据卷可以在容器创建时被指定,并且可以在多个容器之间共享使用。这意味着多个容器可以访问和修改同一个数据卷中的数据。
数据卷可以在容器之间传递数据,即使容器已经停止或删除。这使得数据卷成为在容器之间共享数据的有效方式。
数据卷可以与主机文件系统进行映射,从而实现数据在容器和主机之间的持久化存储。这意味着即使容器被删除,数据仍然可以在主机上保留。
数据卷可以被其他容器挂载,从而实现容器之间的数据共享和通信。
使用数据卷的好处包括:
数据持久化:通过使用数据卷,容器中的数据可以在容器重启、删除或迁移时得到保留,确保数据的持久性。
数据共享:多个容器可以共享同一个数据卷,实现数据的共享和协作。
数据备份和恢复:通过备份和恢复数据卷,可以方便地进行数据的备份和恢复操作。
数据迁移:通过将数据卷从一个容器挂载到另一个容器,可以实现容器之间数据的迁移。
总之,数据卷是Docker中非常有用的功能,可以实现数据的持久化存储、共享和迁移。它为容器提供了更灵活和可靠的数据管理方式。
容器数据卷使用
创建容器卷:
docker volume create <volume_name>
通过上述命令可以创建一个新的容器卷,<volume_name>
是卷的名称,可以根据需要自定义。
查看容器卷列表:
docker volume ls
使用上述命令可以列出当前系统中所有的容器卷。
启动容器时挂载容器卷:
docker run -v <volume_name>:<container_path> <image_name>
使用上述命令可以在启动容器时将容器卷挂载到指定的容器路径上,<volume_name>
是卷的名称,<container_path>
是容器内的路径,<image_name>
是容器所使用的镜像名称。当然,<volume_name>
也可以是本地的目录,这是指定的目录,如果使用<volume_name>
,它的目录默认是/var/lib/docker/volumes/<volume_name>/_data
。也可以使用 -–mount
参数替代-v
,我不想看这个,就忽略了。
查看容器卷的详细信息:
docker volume inspect <volume_name>
使用上述命令可以查看指定容器卷的详细信息。
删除容器卷:
docker volume rm <volume_name>
--privileged=true 作用
--privileged=true
的作用是: 一般情况下,容器中的 root
只是宿主机上的一个普通用户权限,当添加了 --privileged=true
这个参数之后,容器中的 root
用户就会拥有真正的 root
权限,即宿主机的root权限。
问题
如果Docker挂载主机目录访问如果出现
cannot open directory .: Permission denied
解决方法
在挂载目录后加
--privileged=true
参数
数据卷的继承
使用 --volumes-from [容器id]
参数表示继承 这个容器挂载的卷
docker run -it --privileged=true --volumes-from [容器1] --name u2 ubuntu
案例
新建 Ubuntu 容器,并挂载数据卷
/data/docker/ubuntu/
是宿主机目录,当时写的时候把 docker 拼写错了 这边就不改了
/tmp/ubuntu
是容器内的目录
docker run -it --name ubuntu-01 --privileged=true -v /data/docker/ubuntu/:/tmp/ubuntu ubuntu /bin/bash
验证:
使用
scp
从windows11 电脑上传文件到宿主机的/data/docker/ubuntu/
目录,
scp -r gitbook/ itmahy:/data/docker/ubuntu/
登录宿主机,在宿主机的
/data/docker/ubuntu/
目录中查看是否上传成功
$ ssh itmahy
Last login: Thu Sep 7 01:38:41 2023 from 192.168.137.1
[root@localhost ~]# cd /data/dokcer/ubuntu/
[root@localhost ubuntu]# ls
gitbook
[root@localhost ubuntu]#
进入容器查看
/tmp/ubuntu
目录中是否有数据
[root@localhost ubuntu]# docker exec -it ubuntu-01 /bin/bash
root@34ece883d654:/# cd /tmp/
root@34ece883d654:/tmp# ls
ubuntu
root@34ece883d654:/tmp# cd ubuntu/
root@34ece883d654:/tmp/ubuntu# ls
gitbook
读写规则
读写(默认)
rw = read + write
-v /data/docker/ubuntu/:/tmp/ubuntu
或者
-v /data/docker/ubuntu/:/tmp/ubuntu:rw
只读
ro = read only
容器自己只能读取不能写
-v /data/docker/ubuntu/:/tmp/ubuntu:ro