(五)容器数据卷

itmahy
itmahy
发布于 2024-01-18 / 29 阅读
0
0

(五)容器数据卷

容器数据卷

数据卷是Docker中用于持久化存储数据的一种机制。它是一个可供容器使用的特殊目录,可以在容器和主机之间共享和持久化数据。

数据卷的主要特点包括:

  1. 数据卷可以在容器创建时被指定,并且可以在多个容器之间共享使用。这意味着多个容器可以访问和修改同一个数据卷中的数据。

  2. 数据卷可以在容器之间传递数据,即使容器已经停止或删除。这使得数据卷成为在容器之间共享数据的有效方式。

  3. 数据卷可以与主机文件系统进行映射,从而实现数据在容器和主机之间的持久化存储。这意味着即使容器被删除,数据仍然可以在主机上保留。

  4. 数据卷可以被其他容器挂载,从而实现容器之间的数据共享和通信。

使用数据卷的好处包括:

  1. 数据持久化:通过使用数据卷,容器中的数据可以在容器重启、删除或迁移时得到保留,确保数据的持久性。

  2. 数据共享:多个容器可以共享同一个数据卷,实现数据的共享和协作。

  3. 数据备份和恢复:通过备份和恢复数据卷,可以方便地进行数据的备份和恢复操作。

  4. 数据迁移:通过将数据卷从一个容器挂载到另一个容器,可以实现容器之间数据的迁移。

总之,数据卷是Docker中非常有用的功能,可以实现数据的持久化存储、共享和迁移。它为容器提供了更灵活和可靠的数据管理方式。

容器数据卷使用

  1. 创建容器卷:

docker volume create <volume_name>

通过上述命令可以创建一个新的容器卷,<volume_name>是卷的名称,可以根据需要自定义。

  1. 查看容器卷列表:

docker volume ls

使用上述命令可以列出当前系统中所有的容器卷。

  1. 启动容器时挂载容器卷:

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,我不想看这个,就忽略了。

  1. 查看容器卷的详细信息:

docker volume inspect <volume_name>

使用上述命令可以查看指定容器卷的详细信息。

  1. 删除容器卷:

docker volume rm <volume_name>
  1. --privileged=true 作用

--privileged=true的作用是: 一般情况下,容器中的 root只是宿主机上的一个普通用户权限,当添加了 --privileged=true 这个参数之后,容器中的 root用户就会拥有真正的 root权限,即宿主机的root权限。

  • 问题

    如果Docker挂载主机目录访问如果出现 cannot open directory .: Permission denied

  • 解决方法

    在挂载目录后加--privileged=true参数

  1. 数据卷的继承

使用 --volumes-from [容器id] 参数表示继承 这个容器挂载的卷

docker run -it --privileged=true --volumes-from [容器1] --name u2 ubuntu

  1. 案例

新建 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
  1. 读写规则

  • 读写(默认) 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


评论