首页 文章 精选 留言 我的

精选列表

搜索[数据管理],共4007篇文章
优秀的个人博客,低调大师

Docker数据管理

Docker的数据卷是可以绕过文件系统的,而且数据卷是可以共享,可重用的 查看数据卷: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@docker~] #dockerinspect-f``.`Volumes`volume-test1 map[ /data : /var/lib/docker/volumes/9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5/_data ] [root@docker~] #cd/var/lib/docker/ [root@dockerdocker] #ls containersdevicemappergraphinitlinkgraph.dbrepositories-devicemappertmptrustvolumes [root@dockerdocker] #cdvolumes/ [root@dockervolumes] #ls-lrt total8 drwxr-xr-x3rootroot4096Feb2409:2963ccf5d524567c835c6d542cfc74d1a28d28fdf48a0bca0c517cb8dedf46b632 drwxr-xr-x3rootroot4096Feb2409:309f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5 [root@dockervolumes] #cd9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5/ [root@docker9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5] # [root@docker~] #dockerrun-it--namevolume-test1-hnginx-v/datacentos [root@nginx/] #ls/data 测试: 1、系统随机生成的目录,进行挂载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 容器的宿主机: [root@docker9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5] #ls _data [root@docker9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5] #cd_data/ [root@docker_data] #ls passwd [root@docker_data] #ddif=/dev/zeroof=test.isobs=1Mcount=10 10+0records in 10+0recordsout 10485760bytes(10MB)copied,0.00956288s,1.1GB /s [root@docker_data] #ls passwd test .iso 容器内: [root@nginx/] #cd/data/ [root@nginxdata] #ls [root@nginxdata] #cp/etc/passwd. [root@nginxdata] #ls passwd [root@nginxdata] #ls passwd test .iso 说明:容器的宿主机的目录已共享给容器使用(删除容器后,原有的数据卷目录中的文件仍旧是存在的) 2、系统指定的目录,进行挂载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 宿主机的操作: [root@docker~] #mkdir-p/volume-test2-data [root@docker~] #dockerrun-it-d--namevolume-test2-hcentos7--restart=always-v/volume-test2-data:/centos-datacentos 29e9a41e563d514c8b9f14d14a0426af955651b28109c4851cfec40a186244d0 [root@docker~] #dockerps-l CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 29e9a41e563dcentos "/bin/bash" 7secondsagoUp5secondsvolume-test2 [root@docker~] #cp-r/usr/share/doc/abrt-2.0.8//volume-test2-data/ [root@docker~] #ls-l/volume-test2-data/ total4 drwxr-xr-x2rootroot4096Feb2409:58abrt-2.0.8 容器内的操作: [root@docker~] #./in.sh29e9a41e563d [root@centos7/] #df-h FilesystemSizeUsedAvailUse%Mountedon /dev/mapper/docker-8 :3-8388750-29e9a41e563d514c8b9f14d14a0426af955651b28109c4851cfec40a186244d09.8G230M9.0G3%/ tmpfs1.9G01.9G0% /dev shm64M064M0% /dev/shm /dev/sda3 193G11G173G6% /etc/hosts [root@centos7/] #cd/centos-data/ [root@centos7centos-data] #ls abrt-2.0.8 [root@centos7centos-data] #cp/etc/passwd. [root@centos7centos-data] #ls abrt-2.0.8 passwd [root@docker_data] #ls/volume-test2-data/ abrt-2.0.8 passwd 3、系统指定的目录,进行挂载(可挂载多个,并设置权限,默认为rw权限) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 宿主机的操作: 先删除原有的容器 [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 29e9a41e563dcentos "/bin/bash" 11minutesagoUp11minutesvolume-test2 8884fc392971nginx"nginx-g'daemonof13hoursagoUp51minutes80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 46hoursagoUp51minutes0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 47hoursagoUp51minutescentos_aways 删除正在允许的容器时,会有报错信息: [root@docker~] #dockerrm29e9a41e563d-f Errorresponsefromdaemon:Cannotdestroycontainer29e9a41e563d:Conflict,Youcannotremovearunningcontainer.Stopthecontainerbeforeattemptingremovaloruse-f Errorresponsefromdaemon:nosuch id :-f Error:failedtoremovecontainers:[29e9a41e563d-f] [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 29e9a41e563dcentos "/bin/bash" 11minutesagoUp11minutesvolume-test2 8884fc392971nginx"nginx-g'daemonof13hoursagoUp52minutes80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 46hoursagoUp52minutes0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 47hoursagoUp52minutescentos_aways 先停止容器,然后再进行删除: [root@docker~] #dockerstop29e9a41e563d 29e9a41e563d [root@docker~] #dockerrm29e9a41e563d 29e9a41e563d [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 8884fc392971nginx"nginx-g'daemonof13hoursagoUp52minutes80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 46hoursagoUp52minutes0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 47hoursagoUp52minutescentos_aways 运行一个基于centos镜像的容器,容器名称为volume-test2,并设置容器中的主机名为centos7(仅对容器有效),挂载本地的 /volume-test2-data 以及 /opt 目录,并且指定 /opt 目录对容器是只读的 [root@docker~] #dockerrun-it-d--namevolume-test2-hcentos7--restart=always-v/volume-test2-data:/centos-data-v/opt:/opt:rocentos 37652d4601948fe8421c0371278e9bee8c5cbb35f16c7bf755764d56ddafa304 [root@docker~] #dockerps-l CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 37652d460194centos "/bin/bash" 16secondsagoUp15secondsvolume-test2 [root@docker~] #./in.sh37652d460194 容器内的操作: [root@centos7/] #cd/opt/ [root@centos7opt] #ls rh [root@centos7opt] #ls opt.isorh [root@centos7opt] #touch123.txt touch :cannot touch ‘123.txt’:Read-only file system --volume-from: 继承容器数据卷的操作: [root@docker~] #dockerrun-it-d--restart=always--namevolume-test04--volumes-fromvolume-test2centos 94ea720a2c418286d26068d126df35523742e2f910685863f876c3ba9c09638c [root@docker~] #dockerps-l CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 94ea720a2c41centos "/bin/bash" 6secondsagoUp4secondsvolume-test04 [root@docker~] #./in.sh94ea720a2c41 [root@94ea720a2c41/] #ls/ anaconda-post.logcentos-dataetcliblost+foundmntprocrunsrvtmpvar bindevhomelib64mediaoptrootsbinsysusr [root@94ea720a2c41/] #cd/opt/ [root@94ea720a2c41opt] #ls opt.isorh [root@94ea720a2c41opt] #cd/centos-data/ [root@94ea720a2c41centos-data] #ls abrt-2.0.8 passwd [root@94ea720a2c41centos-data] #touch12345.txt [root@94ea720a2c41centos-data] #cd/opt [root@94ea720a2c41opt] #ls opt.isorh [root@94ea720a2c41opt] #touch111 touch :cannot touch ‘111’:Read-only file system 拥有volume-test2的容器的操作: [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 94ea720a2c41centos "/bin/bash" 45secondsagoUp43secondsvolume-test04 37652d460194centos "/bin/bash" AboutanhouragoUpAboutanhourvolume-test2 8884fc392971nginx"nginx-g'daemonof14hoursagoUpAboutanhour80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 47hoursagoUpAboutanhour0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 2daysagoUpAboutanhourcentos_aways [root@docker~] #./in.sh37652d460194 [root@centos7/] #ls anaconda-post.logcentos-dataetcliblost+foundmntprocrunsrvtmpvar bindevhomelib64mediaoptrootsbinsysusr [root@centos7/] #cd/centos-data/ [root@centos7centos-data] #ls abrt-2.0.8 passwd [root@centos7centos-data] #ls 12345.txtabrt-2.0.8 passwd 进一步进行测试: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [root@docker~] #dockerrun-it-d--restart=always--namevolume-test04--volumes-fromvolume-test2centos 94ea720a2c418286d26068d126df35523742e2f910685863f876c3ba9c09638c 宿主机上的操作: [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 94ea720a2c41centos "/bin/bash" 14minutesagoUp14minutesvolume-test04 37652d460194centos "/bin/bash" AboutanhouragoUpAboutanhourvolume-test2 8884fc392971nginx"nginx-g'daemonof14hoursagoUp2hours80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 47hoursagoUp2hours0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 2daysagoUp2hours [root@docker~] #dockerstop37652d460194 37652d460194 [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 94ea720a2c41centos "/bin/bash" 14minutesagoUp14minutesvolume-test04 8884fc392971nginx"nginx-g'daemonof14hoursagoUp2hours80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 47hoursagoUp2hours0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 2daysagoUp2hourscentos_aways [root@docker_data] #cd/volume-test2-data [root@dockervolume-test2-data] #ls 12345.txtabrt-2.0.8 passwd [root@dockervolume-test2-data] #ls-lrt total8 drwxr-xr-x2rootroot4096Feb2409:58abrt-2.0.8 -rw-r--r--1rootroot692Feb2410:01 passwd -rw-r--r--1rootroot0Feb2411:1612345.txt 容器内的操作: [root@94ea720a2c41opt] #cd/centos-data/ [root@94ea720a2c41centos-data] #ls-lrt total8 drwxr-xr-x2rootroot4096Feb2401:58abrt-2.0.8 -rw-r--r--1rootroot692Feb2402:01 passwd -rw-r--r--1rootroot0Feb2403:1612345.txt [root@94ea720a2c41centos-data] # 说明: 1、验证后可以发现,ro权限是正常的 2、这种映射在Dockerfile里面是没法使用的 3、这里我们不管volume-test2 所属的容器是否正在允许,在新主机中均能够继承 本文转自 冰冻vs西瓜 51CTO博客,原文链接:http://blog.51cto.com/molewan/1744570,如需转载请自行联系原作者

优秀的个人博客,低调大师

5 docker数据管理

容器中管理数据主要有两种方式 1、数据卷 2、数据卷容器 一、数据卷 1、基于training/webapp镜像创建一个容器,并在容器内创建一个数据卷 使用training/webapp镜像创建一个web容器,并创建一个数据卷挂载到容器的/webapp目录 root@docker-test:~# root@docker-test:/# docker run -idt -P --name web -v /tantianran training/webapp python run.py 4c5baed6426181815ddd9f0884855bd9e22a27b460eb1c77b5a97a07ecbbd813 提示: -P 发布所有暴露的端口到随机端口 创建的数据卷/tantianran ,挂载给名字为web的容器时,会在容器内部的根目录下自动创建一个名为tantianran的目录 2、查看运行的容器 root@docker-test:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8bf5a39b85f0 training/webapp:latest "python app.py" 6 minutes ago Up 6 minutes 0.0.0.0:32772->5000/tcp web 提示:0.0.0.0:32772->5000/tcp 表示访问172.17.42.1:32772端口都会重定向到容器侦听的5000端口(flask web程序) 3、进入这个容器后查看IP地址 docker exec -ti 078519be8a26 /bin/bash #进入容器 root@8bf5a39b85f0:/opt/webapp# ifconfig #查看IP地址 eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:16 inet addr:172.17.0.22 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe11:16/64 Scope:Link UP BROADCAST RUNNING MTU:1500 Metric:1 RX packets:39 errors:0 dropped:0 overruns:0 frame:0 TX packets:39 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2868 (2.8 KB) TX bytes:3034 (3.0 KB) 4、在本地主机查看IP地址 root@docker-test:~# ifconfig docker0 Link encap:Ethernet HWaddr 56:84:7a:fe:97:99 inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::5484:7aff:fefe:9799/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:288 errors:0 dropped:0 overruns:0 frame:0 TX packets:181 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:19306 (19.3 KB) TX bytes:15494 (15.4 KB) 提示:那么,通过查看本地主机的IP地址,和进入容器后查看IP地址,就一目了然了,docker会在本地主机虚拟出一块网卡 作为docker容器网络连接的网关,以及给docker容器分配IP地址 5、挂载一个主机目录作为数据卷 (在做这个操作之前,之前的容器需停止掉,或者删除掉,或者将创建此容器时命名为别的名字,不然会存在冲突) 在本地主机根目录下创建目录:local_mydata/ #其实不用创建也行,docker会自动创建 并创建几个文件:touch my_test.py my_config.py root@docker-test:~# docker run -d -P --name testweb -v /local_mydata:/mydata training/webapp python run.py #加载本地主机的/local_mydata目录到容器的/mydata目录 9fa32094da848d2b5817edc49b9971ffdb72319589a10334b442174dd0061c81 注意,容器中的/mydata目录会自动创建,另外,本地主机的目录的路径必须是绝对路径,如果目录不存在,docker会自动创建 6、挂载一个本地主机作为数据卷 二、数据卷容器 1、基于ubuntu镜像创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata root@docker-test:~# docker run -idt -v /dbdata/ --name dbdata ubuntu 2、基于ubuntu镜像创建db1和db2两个容器,并从dbdata容器挂载数据卷 root@docker-test:~# docker run -idt --volumes-from dbdata --name db1 ubuntu #创建db1容器 593de70961a07bc1af5d12591833a62d691d594f302f92ee96c3587d87ae6aa6 root@docker-test:~# docker run -idt --volumes-from dbdata --name db2 ubuntu #创建db2容器 39d71abc194d66f53211893efcdcd1cdff6cc5b52c0365a03d2a1e55aa225216 root@docker-test:~# docker ps -a #查看容器信息 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 39d71abc194d ubuntu:latest "/bin/bash" 5 seconds ago Up 4 seconds db2 593de70961a0 ubuntu:latest "/bin/bash" 12 seconds ago Up 11 seconds db1 a6a32f7838ee ubuntu:latest "/bin/bash" 4 minutes ago Up 4 minutes dbdata 此时,容器db1和db2都同时挂载同一个数据卷到相同的/dbdata目录,任何一方在该目录下写入数据,其它容器都能看到 3、进入dbdata容器中创建一些文件 root@docker-test:~# docker exec -ti dbdata /bin/bash #进入容器 4、分别进入db1和db2查看 root@docker-test:~# docker exec -ti db1 /bin/bash root@docker-test:~# docker exec -ti db2 /bin/bash 本文转自 TtrToby 51CTO博客,原文链接:http://blog.51cto.com/freshair/1958348

优秀的个人博客,低调大师

DataHub —— 元数据管理平台

DataHub 是用于处理元数据的管理平台,它可充当数据发现工具(即数据目录),来找出公司中存在哪些数据集,以及如何使用这些数据集进行测试。 特性 支持在数据库、数据湖、BI 平台、ML特征存储、工作流协调等领域搜索数据 通过追踪平台、数据集、管道、图表和仪表盘之间的关系,轻松了解数据的端到端历程 浏览脉络图时,可快速获得相关实体的背景信息 确保数据集准确性和相关性

优秀的个人博客,低调大师

Docker 容器的数据管理

文章首发于公众号《程序员果果》地址:https://mp.weixin.qq.com/s/qg8eXHobNxzfPAaHB3U9cw 一、容器的数据卷 1. 什么是数据卷? docker的理念之一就是将应用和运行的环境打包,因此docker容器的生存周期通常都是与在容器中运行的程序相同的,而我们对数据的要求是持久化,docker容器之间也需要一个共享数据的渠道。这些需求就催生了docker数据卷的诞生。 docker数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。 数据卷设计的目的,在于数据的永久化,它完全独立于容器的生命周期。因此,docker不会在容器删除时删除其挂在的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据进行处理 2. 数据卷的特点 docker数据卷独立于docker存在,与docker容器的生存周期分离。 存在于宿主机(docker host)中。 docker数据卷,可以是目录,也可以是文件。 docker容器可以利用数据卷技术与宿主机进行数据共享。 3. 数据卷的特点 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。 数据卷可以在容器之间共享和重用。 可以对数据卷里的内容直接进行修。 数据卷的变化不会影响镜像的更新。 即使挂载数据卷的容器已经被删除,卷也会一直存在。 4. 数据卷的使用方法 #为容器添加数据卷使用-v选项 docker run -v ~/container_data:/data -it IMAGE /bin/bash 容器中 root@311b7376b879:/# ls bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@311b7376b879:/# cd data/ root@311b7376b879:/data# echo "hi , what's up man ?" > hi.txt 宿主机 huanchu-mbp:~ huanchu$ docker run -it -d -v ~/Documents/ttt:/data --name test1 nginx /bin/bash huanchu-mbp:~ huanchu$ cat Documents/ttt/hi.txt hi , what's up man ? 5. 数据卷添加访问权限 挂载的数据默认为可读写权限。但也可以根据自己的需求,将容器里挂载共享的数据设置为只读,这样数据修改就只能在宿主机上操作,用法如下: #ro:指定为只读。 docker run -it -v ~/datavolume:/data:ro ubuntu /bin/bash 6. 使用Dockerfile创建包含数据卷的镜像 Dockerfile指令: ​ VOLUME [ "/data"] 在Dockerfile中 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的 Dockerfile # Version: 0.0.1 FROM ubuntu:latest VOLUME ["/data/volume1","/data/volume2"] RUN apt-get update RUN apt-get install -y nginx RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html EXPOSE 80 构建镜像 docker build -t="mynginx2" . 启动容器 docker run -it --name mynginx_test mynginx2 查看数据卷 root@e22ae166d8fa:/# ls bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@e22ae166d8fa:/# cd data/ root@e22ae166d8fa:/data# ls volume1 volume2 root@e22ae166d8fa:/data# 查看主机挂载点 我们通过docker inspect 查看通过该dockerfile创建的镜像生成的容器,可以看到如下信息: 可以看到两个挂载点的信息。 "Mounts": [ { "Type": "volume", "Name": "596925f444bbcb7d3b75c3b844700ce8f43bd5fc8b18bb97f323e2825a1df13e", "Source": "/var/lib/docker/volumes/596925f444bbcb7d3b75c3b844700ce8f43bd5fc8b18bb97f323e2825a1df13e/_data", "Destination": "/data/volume1", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }, { "Type": "volume", "Name": "0a28aed7c33a588dd74ce008d78670a5ff01dbea17e659597ebd5506bf8824cb", "Source": "/var/lib/docker/volumes/0a28aed7c33a588dd74ce008d78670a5ff01dbea17e659597ebd5506bf8824cb/_data", "Destination": "/data/volume2", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } 二、数据卷容器 1. 什么是数据卷容器? 命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器。 2. 构建一个数据卷容器 huanchu-mbp:Documents huanchu$ docker run -it -v ~/Documents/ttt:/data --name container_data ubuntu root@832301c940b6:/# ls bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@832301c940b6:/# cd data/ root@832301c940b6:/data# ls Dockerfile com hi.txt root@832301c940b6:/data# echo Dockerfile com/ hi.txt root@832301c940b6:/data# echo Dockerfile com/ hi.txt root@832301c940b6:/data# echo "ha ha ha !" > ha.txt root@832301c940b6:/data# ls Dockerfile com ha.txt hi.txt 3. 挂载数据卷容器的方法 docker run --volumes-from [container name] 创建一个新的容器,并挂载刚才创建的数据卷容器 container_data huanchu-mbp:Documents huanchu$ docker run -it --name ubuntu_test --volumes-from container_data ubuntu /bin/bash root@1d6b918c00e5:/# ls bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@1d6b918c00e5:/# cd data/ root@1d6b918c00e5:/data# ls Dockerfile com ha.txt hi.txt root@1d6b918c00e5:/data# cat ha.txt ha ha ha ! root@1d6b918c00e5:/data# 使用inspect命令查看挂载细节 "Mounts": [ { "Type": "bind", "Source": "/Users/huanchu/Documents/ttt", "Destination": "/data", "Mode": "", "RW": true, "Propagation": "rprivate" } ] 三、数据卷的备份和还原 数据卷数据备份 方法 docker run --volumes-from [container name] -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar 例如 docker run --volumes-from container_data -v ~/Documents/ttt:/backup --name ubuntu_test1 ubuntu tar cvf /backup/ubuntu_test1.tar /data 在宿主机上可以查看到备份的数据 huanchu-mbp:ttt huanchu$ ls -l total 1272 -rw-r--r-- 1 huanchu staff 191 12 24 15:48 Dockerfile drwxr-xr-x 3 huanchu staff 96 12 12 14:45 com -rw-r--r-- 1 huanchu staff 11 12 24 17:04 ha.txt -rw-r--r-- 1 huanchu staff 21 12 24 14:26 hi.txt -rw-r--r-- 1 huanchu staff 593920 12 24 18:09 ubuntu_test1.tar 数据卷数据还原 方法 docker run --volumes-from [container name] -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar 例如 #第一步 docker run -v ~/Documents/ttt:/data --name ubuntu_test2 ubuntu tar xvf /data/ubuntu_test1.tar #第二步 docker run -it --volumes-from ubuntu_test2 --name ubuntu_test3 ubuntu /bin/bash

优秀的个人博客,低调大师

Tablestore入门手册-数据管理-GetRow

GetRow接口概述 GetRow接口用于读取一行数据,是Tablestore最基础的API之一。官方提供了Java、Go、Node.js、Python、PHP、C#、C++ SDK。本文以Java代码为例,对GetRow接口进行详细说明。 基本使用说明 参数说明 参数名称 是否必填 参数说明 PrimaryKey 是 主键,所有主键都需要填写 ColumnsToGet 否 需要读取的列的集合,若不设置则读取所有列 MaxVersions MaxVersions 与 TimeRange 至少设置一个 最多读取多少个版本 TimeRange MaxVersions 与 TimeRange 至少设置一个 要读取的版本范围 Filter 否 过滤器,在服务端对读取结果进行过滤 Java代码示例 public void getRow() { //构造主键,主键列必须全部指定 PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn(PK1, PrimaryKeyValue.fromLong(1L)); primaryKeyBuilder.addPrimaryKeyColumn(PK2, PrimaryKeyValue.fromString("string")); PrimaryKey primaryKey = primaryKeyBuilder.build(); SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); //设置读取的版本数为1,即读取最新版本 criteria.setMaxVersions(1); GetRowRequest getRowRequest = new GetRowRequest(criteria); GetRowResponse getRowResponse = syncClient.getRow(getRowRequest); Row row = getRowResponse.getRow(); System.out.println("读取行完毕, 结果为: "); System.out.println(row); } 多版本数据读取 表格存储支持多版本数据存储,具体参考开发指南。 1.MaxVersions 指定maxVersions,返回最新的几个版本。例如:某一行的某一列有20个历史版本,设置maxVersions为10,返回的是最新的10个版本。 SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); // 设置读取最新版本 criteria.setMaxVersions(10); 2.TimeRange 每一个版本都有一个对应的版本号,这个版本号默认是一个毫秒级的时间戳,用户也可以自己指定版本号,读取出来的时候可以按时间范围取值,返回范围内的版本列。 SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); TimeRange timeRange = new TimeRange(1418380771, 1418390771); criteria.setTimeRange(timeRange); 宽行读取 有很多数据列的行,我们称为宽行。因为数据列非常多,受网络带宽、延迟等因素的影响,我们无法一次性读出来,这里介绍几种宽行的读取方法。 1.使用ColumsToGet读取指定列 ColumsToGet参数,允许用户指定需要读取的列。 SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); // 设置读取某些列 criteria.addColumnsToGet(new String[] {"Col1","Col2","Col3"}); 2.使用startColumn,endColumn读取一定范围的属性列 通过startColumn和endColumn指定宽行中某个范围内的列,按照字典序对列进行排序比较。 SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); criteria.setStartColumn("col0"); criteria.setEndColumn("col3"); 3.使用ColumnPaginationFilter配合startColumn翻页读取 ColumnPaginationFilter有两个参数,limit和offset,使用ColumnPaginationFilter读取时,会跳过offset个属性列,然后读取limit个属性列。配合startColumn使用时,会从startColumn开始,跳过offset个属性列,读取limit个属性列。这种方式适合分页读取属性列的场景。 SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); // 设置从Column0开始读 criteria.setStartColumn("Column0"); // 使用ColumnPaginationFilter设置一次要读取的列数, limit=10, offset=0 criteria.setFilter(new ColumnPaginationFilter(10, 0)); 使用过滤器 表格存储过滤器的过滤条件支持算术运算(=、!=、>、>=、<、<=)和逻辑运算(NOT、AND、OR),支持最多 10 个条件的组合。过滤器的具体使用说明请参考:过滤器使用说明。 1.单条件过滤器:SingleColumnValueFilter 表格存储中的数据是稀疏矩阵形式的,每一行的列可能都不一样,对于不存在某一列的行,可以使用PassIfMissing参数来设置期望的过滤形式。passIfMissing为True代表如果这一列不存在也返回,为false代表这一列不存在就不返回。 // 设置过滤器, 当 Col0 的值为 0 时返回该行。 SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0", SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0)); // 如果不存在 Col0 这一列, 也不返回。 singleColumnValueFilter.setPassIfMissing(false); 2.多条件过滤:CompositeColumnValueFilter 多条件过滤器,可以通过组合多个算术运算符号达到多条件组合过滤的效果。 // composite1 条件为 (Col0 == 0) AND (Col1 > 100) CompositeColumnValueFilter composite1 = new CompositeColumnValueFilter(CompositeColumnValueFilter.LogicOperator.AND); SingleColumnValueFilter single1 = new SingleColumnValueFilter("Col0", SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0)); SingleColumnValueFilter single2 = new SingleColumnValueFilter("Col1", SingleColumnValueFilter.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)); composite1.addFilter(single1); composite1.addFilter(single2); // composite2 条件为 ( (Col0 == 0) AND (Col1 > 100) ) OR (Col2 <= 10) CompositeColumnValueFilter composite2 = new CompositeColumnValueFilter(CompositeColumnValueFilter.LogicOperator.OR); SingleColumnValueFilter single3 = new SingleColumnValueFilter("Col2", SingleColumnValueFilter.CompareOperator.LESS_EQUAL, ColumnValue.fromLong(10)); composite2.addFilter(composite1); composite2.addFilter(single3);

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册