首页 > 编程知识 正文

docker数据持久化,hdfs冗余数据保存策略

时间:2023-05-06 07:02:40 阅读:139824 作者:3895

一、部署Docker数据卷为了实现必然性容器与主机之间、容器与容器之间的文件共享、容器内数据的永久化、容器内数据的备份、迁移、恢复等,Docker实现了对数据卷(vvvolume 简单地说,进行了文件夹的实时共享。 类似于局域网的文件共享。

二、Docker挂载容器的数据卷。 目前,Docker提供了三种从宿主机向容器装载数据的方法。 这是bind mounts、tmpfs mounts、Volumes三种方法。 实际上,tmpfs mounts并不装载在主机上。 以下有说明。

2.1、方式一:bind mounts

这意味着范围可以保存在主计算机系统的任意位置。

但是,绑定mount不能在不同的主机系统时移植。 例如,Windows和Linux的目录结构不同,bind mount指向的主机目录也不同。 所以,绑定mount不会出现在文档文件中。 因为这样就不能移植Dockerfile了。

2.3、方式三:volumes

默认情况下,Docker管理/var/lib/docker/volumes目录中的主机文件系统的一部分。最常用的方式

2.3、方式二:tmpfs mounts

其中tmpfs是基于内存的临时文件系统。 tmpfs mounts装载存储在宿主机系统的内存中,而不写入宿主机的文件系统。

用三种方法安装图解

三. bind mounts的基本使用是2.1、示例讲解

此处指定将主机上的/opt/wwwroot目录挂载到/usr/share/nginx/html

$ mkdir-p/opt/wwwroot $ docker run-itd-- name=nginx-v1-v/opt/ww root 3360/usr/share/nginx/html nginx

-v指定特定路径。 如果未指定,则会在/var/lib/docker/volumes/目录的默认路径下随机生成挂载目录

正如您所看到的,bind mounts的方式为隐藏掉被挂载目录里面的初始内容。 这里/usr/share/nginx/html目录下的内容被隐藏了,所以看不见。

随后创建新文件时,容器中将显示新创建的文件。

主机:

放入容器

2.2、查看容器详情,就可以看到我们绑定的路径

$ docker inspect nginx-v1

2.3、清理

$ dockerstopnginx-v1 $ dockerrmnginx-v1 #目录$ ll /opt/wwwroot/

如图所示,装载目录中的文件仍然存在,并且不会随着容器的退出而消失,从而实现了数据的持久化。

四. volumes的基本使用为4.1、管理卷

#创建自定义容器卷并在/var/lib/docker/volumes/目录中显示$ docker volume create nginx-vol1#所有容器卷$ docker volume

4.2、创建使用指定卷的容器

如果您有自定义容器卷,则可以创建使用此数据卷的容器。 这里,我们以nginx为例。

$ docker run-itd---name=nginx-v1-p 8080:80-vnginx-vol 1:/usr/share/nginx/html nginx其中-v是支座在此使用自定义

与bind mounts的不同之处在于,不必自己创建目录。 您只需创建卷即可。 卷其实也是目录。 另一个volumes是可以查看/usr/share/nginx/html的本机文件。

4.3、如果不加-v,则不会在默认路径下挂载目录

$ docker run-itd-- name=nginx-v2-p 8081336080 nginx $ ls-l/var/lib/docker/volumes /

4.3、如果加-v,但是不指定宿主机的挂载目录,则会自动创建一个随机的挂载目录,这种方式是bind mounts,也看不到默认文件

$ docker run-itd---name=nginx-v4-p 8084:80-v :/usr/share/nginx/html nginx

> 4.4、删除容器

$ docker stop nginx-v1$ docker rm nginx-v1


数据也不会因为容器被删除而删除,达到数据持久化的效果。

五、扩展(-volume)

高于17.06的docker可以将–mount用于为单一容器创建数据卷,两者的差别如下:

5.1、-v或是-volume包括三个区域,以分号分割

第一个区域用于定义卷的名称,如果不指定,表明使用匿名卷,实名卷的名称在一台主机上唯一第二个区域指定卷对应容器中的哪个文件第三个区域是可选的,是用逗号分割的选项列表

5.2、-mount使用键值对=,以逗号分割,对应的值如下

type:可以是bind、volume、tmpfs,创建数据卷使用volumesource:挂载点的名字,对于实名卷,为实名卷的名字,匿名卷不需要使用这个关键字destination:指定卷对应容器中的哪个文件readonly:指定数据卷只可读volume-opt:可以出现多次,其值为一个键值对(有什么用我还不知道)

-mount参数的值用单引号包含起来,将关键字对应值中出现的volume-opt用双引号括起来,如下:

$ docker service create --mount 'type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=local,volume-opt=type=nfs,volume-opt=device=<nfs-server>:<nfs-path>,"volume-opt=o=addr=<nfs-address>,vers=4,soft,timeo=180,bg,tcp,rw"' --name myservice <IMAGE>

5.2、-v与-mount的区别

-mount可以支持创建集群服务的数据卷,而-v不行,其余基本没差;怎么创建集群的话,会面写docker swarm会讲到。

5.3、创建、查看、删除数据卷:

# 创建实名数据卷$ docker volume create my-vol # 创建匿名卷$ docker volume create # 查看数据卷列表$ docker volume ls # 查看具体的数据卷$ docker volume inspect my-vol # 删除数据卷$ docker volume rm my-vol

5.4、示例,数据卷会自动创建
1)在创建容器时指定数据卷

# 创建容器$ docker run -d --name devtest --mount source=myvol1,target=/usr/share/nginx/html nginx:latest

2)使用只读数据卷

#ro表示只读(readonly),-v==--mount$ docker run -d --name=nginxtest -v nginx-vol:/usr/share/nginx/html:ro nginx:latest# 等价于下面命令$ docker run -d --name=nginxtest2 --mount source=nginx-vol2,destination=/usr/share/nginx/html,readonly nginx:latest

5.5、删除数据卷

$ docker volume ls$ docker volume rm nginx-vol1$ docker volume ls# 删除所有卷,慎用$ docker volume prune

注意:docker规定,没有容器正在使用数据卷后才允许删除该数据卷

六、tmpfs mounts的基本使用(很少用,稍微了解就行)

如果在 Linux 上运行 Docker,那么还有第三种选择:tmpfs 挂载不会持久化到宿主机目的是为了避免写入数据到容器存储层还有一个方案

与卷和绑定挂载不同,tmpfs 挂载是临时的,只存留在主机内存中。当容器停止时,tmpfs 挂载将被删除,在那里写入的文件不会被持久化

6.1、tmpfs 挂载的局限性

不同于卷和绑定挂载,不能在容器之间共享 tmpfs 挂载。这个功能只有在 Linux 上运行 Docker 时才可用。

6.2、–tmpfs 和 --mount 行为之间的差异

–tmpfs 标记不允许指定任何可配置选项。–tmpfs 标记不能用于集群服务。对于集群服务,您必须使用 --mount。

6.3、在容器中使用 tmpfs 挂载

要在容器中使用 tmpfs 挂载, 请使用 --tmpfs 标记, 或者使用带有 type=tmpfs 和 destination 选项的 --mount 标记。没有用于 tmpfs 挂载的源(source)。

示例1:(–mount),在 Nginx 容器中的 /usr/share/nginx/html 创建一个 tmpfs 挂载

$ docker run -d -it --name tmptest --mount type=tmpfs,destination=/usr/share/nginx/html nginx:latest$ docker exec -it tmptest /bin/bash$ df -h

示例2:(–tmpfs)

$ docker run -d -it --name tmptest2 --tmpfs /usr/share/nginx/html nginx:latest

通过运行 docker inspect tmptest 来验证挂载是否是 tmpfs 挂载,查看 Mounts 部分:

$ docker inspect tmptest|grep -i -C3 Tmpfs


6.4、指定 tmpfs 选项

tmpfs 挂载允许两个配置选项,两个选项都不是必需的。 如果需要指定这些选项,则必须使用 --mount 标记,因为 --tmpfs 标记不支持。

tmpfs-sizetmpfs 挂载的大小(以字节为单位)。默认无限制。tmpfs-modetmpfs 的八进制文件模式。例如,700 或 0770。默认为 1777 或全局可写。

示例:下面的示例将 tmpfs-mode 设置为 1770,因此在容器中它不是全局可读的。

$ docker run -d -it --name tmptest3 --mount type=tmpfs,destination=/usr/share/nginx/html,tmpfs-mode=1770 nginx:latest

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。