天天看点

Docker数据管理

Docker的数据卷是可以绕过文件系统的,而且数据卷是可以共享,可重用的

查看数据卷:

<code>[root@docker ~]</code><code># docker inspect -f ``.`Volumes` volume-test1</code>

<code>map[</code><code>/data</code><code>:</code><code>/var/lib/docker/volumes/9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5/_data</code><code>]</code>

<code>[root@docker ~]</code><code># cd /var/lib/docker/</code>

<code>[root@docker docker]</code><code># ls</code>

<code>containers  devicemapper  graph  init  linkgraph.db  repositories-devicemapper  tmp  trust  volumes</code>

<code>[root@docker docker]</code><code># cd volumes/</code>

<code>[root@docker volumes]</code><code># ls -lrt</code>

<code>total 8</code>

<code>drwxr-xr-x 3 root root 4096 Feb 24 09:29 63ccf5d524567c835c6d542cfc74d1a28d28fdf48a0bca0c517cb8dedf46b632</code>

<code>drwxr-xr-x 3 root root 4096 Feb 24 09:30 9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5</code>

<code>[root@docker volumes]</code><code># cd 9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5/</code>

<code>[root@docker 9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5]</code><code># </code>

<code>[root@docker ~]</code><code># docker run -it --name volume-test1 -h nginx -v /data centos</code>

<code>[root@nginx /]</code><code># ls /data</code>

测试:

1、系统随机生成的目录,进行挂载

<code>容器的宿主机:</code>

<code>[root@docker 9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5]</code><code># ls</code>

<code>_data</code>

<code>[root@docker 9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5]</code><code># cd _data/</code>

<code>[root@docker _data]</code><code># ls</code>

<code>passwd</code>

<code>[root@docker _data]</code><code># dd if=/dev/zero of=test.iso bs=1M count=10</code>

<code>10+0 records </code><code>in</code>

<code>10+0 records out</code>

<code>10485760 bytes (10 MB) copied, 0.00956288 s, 1.1 GB</code><code>/s</code>

<code>passwd</code>  <code>test</code><code>.iso</code>

<code>容器内:</code>

<code>[root@nginx /]</code><code># cd /data/</code>

<code>[root@nginx data]</code><code># ls</code>

<code>[root@nginx data]</code><code># cp /etc/passwd .</code>

<code>说明:容器的宿主机的目录已共享给容器使用(删除容器后,原有的数据卷目录中的文件仍旧是存在的)</code>

2、系统指定的目录,进行挂载

<code>宿主机的操作:</code>

<code>[root@docker ~]</code><code># mkdir -p /volume-test2-data</code>

<code>[root@docker ~]</code><code># docker run -it -d --name volume-test2 -h centos7 --restart=always -v /volume-test2-data:/centos-data centos</code>

<code>29e9a41e563d514c8b9f14d14a0426af955651b28109c4851cfec40a186244d0</code>

<code>[root@docker ~]</code><code># docker ps -l</code>

<code>CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES</code>

<code>29e9a41e563d        centos              </code><code>"/bin/bash"</code>         <code>7 seconds ago       Up 5 seconds                            volume-test2        </code>

<code>[root@docker ~]</code><code># cp -r /usr/share/doc/abrt-2.0.8/ /volume-test2-data/</code>

<code>[root@docker ~]</code><code># ls -l /volume-test2-data/</code>

<code>total 4</code>

<code>drwxr-xr-x 2 root root 4096 Feb 24 09:58 abrt-2.0.8</code>

<code>容器内的操作:</code>

<code>[root@docker ~]</code><code># ./in.sh 29e9a41e563d</code>

<code>[root@centos7 /]</code><code># df -h</code>

<code>Filesystem                                                                                       Size  Used Avail Use% Mounted on</code>

<code>/dev/mapper/docker-8</code><code>:3-8388750-29e9a41e563d514c8b9f14d14a0426af955651b28109c4851cfec40a186244d0  9.8G  230M  9.0G   3% /</code>

<code>tmpfs                                                                                            1.9G     0  1.9G   0% </code><code>/dev</code>

<code>shm                                                                                               64M     0   64M   0% </code><code>/dev/shm</code>

<code>/dev/sda3</code>                                                                                        <code>193G   11G  173G   6% </code><code>/etc/hosts</code>

<code>[root@centos7 /]</code><code># cd /centos-data/</code>

<code>[root@centos7 centos-data]</code><code># ls</code>

<code>abrt-2.0.8</code>

<code>[root@centos7 centos-data]</code><code># cp /etc/passwd .</code>

<code>abrt-2.0.8  </code><code>passwd</code>

<code>[root@docker _data]</code><code># ls /volume-test2-data/</code>

3、系统指定的目录,进行挂载(可挂载多个,并设置权限,默认为rw权限)

<code>先删除原有的容器</code>

<code>[root@docker ~]</code><code># docker ps</code>

<code>CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES</code>

<code>29e9a41e563d        centos              </code><code>"/bin/bash"</code>            <code>11 minutes ago      Up 11 minutes                                volume-test2        </code>

<code>8884fc392971        nginx               "nginx -g 'daemon of   13 hours ago        Up 51 minutes       80</code><code>/tcp</code><code>, 443</code><code>/tcp</code>          <code>nginxdocker         </code>

<code>14caa9ab03a9        dockerui</code><code>/dockerui</code>   <code>"/dockerui"</code>            <code>46 hours ago        Up 51 minutes       0.0.0.0:9000-&gt;9000</code><code>/tcp</code>   <code>dockerui_qinwen     </code>

<code>e278cabec91e        centos              </code><code>"/bin/bash"</code>            <code>47 hours ago        Up 51 minutes                                centos_aways     </code>

<code>删除正在允许的容器时,会有报错信息:</code>

<code>   </code> 

<code>[root@docker ~]</code><code># docker rm 29e9a41e563d -f</code>

<code>Error response from daemon: Cannot destroy container 29e9a41e563d: Conflict, You cannot remove a running container. Stop the container before attempting removal or use -f</code>

<code>Error response from daemon: no such </code><code>id</code><code>: -f</code>

<code>Error: failed to remove containers: [29e9a41e563d -f]</code>

<code>8884fc392971        nginx               "nginx -g 'daemon of   13 hours ago        Up 52 minutes       80</code><code>/tcp</code><code>, 443</code><code>/tcp</code>          <code>nginxdocker         </code>

<code>14caa9ab03a9        dockerui</code><code>/dockerui</code>   <code>"/dockerui"</code>            <code>46 hours ago        Up 52 minutes       0.0.0.0:9000-&gt;9000</code><code>/tcp</code>   <code>dockerui_qinwen     </code>

<code>e278cabec91e        centos              </code><code>"/bin/bash"</code>            <code>47 hours ago        Up 52 minutes                                centos_aways      </code>

<code>先停止容器,然后再进行删除:  </code>

<code>[root@docker ~]</code><code># docker stop 29e9a41e563d</code>

<code>29e9a41e563d</code>

<code>[root@docker ~]</code><code># docker rm 29e9a41e563d</code>

<code>[root@docker ~]</code><code># docker ps </code>

<code>e278cabec91e        centos              </code><code>"/bin/bash"</code>            <code>47 hours ago        Up 52 minutes                                centos_aways </code>

<code>运行一个基于centos镜像的容器,容器名称为volume-test2,并设置容器中的主机名为centos7(仅对容器有效),挂载本地的</code><code>/volume-test2-data</code><code>以及</code><code>/opt</code><code>目录,并且指定</code><code>/opt</code><code>目录对容器是只读的</code>

<code>[root@docker ~]</code><code># docker run -it -d --name volume-test2 -h centos7 --restart=always -v /volume-test2-data:/centos-data -v /opt:/opt:ro centos</code>

<code>37652d4601948fe8421c0371278e9bee8c5cbb35f16c7bf755764d56ddafa304</code>

<code>37652d460194        centos              </code><code>"/bin/bash"</code>         <code>16 seconds ago      Up 15 seconds                           volume-test2        </code>

<code>[root@docker ~]</code><code># ./in.sh 37652d460194</code>

<code>[root@centos7 /]</code><code># cd /opt/</code>

<code>[root@centos7 opt]</code><code># ls</code>

<code>rh</code>

<code>opt.iso  rh</code>

<code>[root@centos7 opt]</code><code># touch 123.txt</code>

<code>touch</code><code>: cannot </code><code>touch</code> <code>‘123.txt’: Read-only </code><code>file</code> <code>system</code>

<code>--volume-from:</code>

<code>继承容器数据卷的操作:</code>

<code>[root@docker ~]</code><code># docker run -it -d --restart=always --name volume-test04 --volumes-from volume-test2 centos</code>

<code>94ea720a2c418286d26068d126df35523742e2f910685863f876c3ba9c09638c</code>

<code>94ea720a2c41        centos              </code><code>"/bin/bash"</code>         <code>6 seconds ago       Up 4 seconds                            volume-test04       </code>

<code>[root@docker ~]</code><code># ./in.sh 94ea720a2c41</code>

<code>[root@94ea720a2c41 /]</code><code># ls /</code>

<code>anaconda-post.log  centos-data  etc   lib    lost+found  mnt  proc  run   srv  tmp  var</code>

<code>bin                dev          home  lib64  media       opt  root  sbin  sys  usr</code>

<code>[root@94ea720a2c41 /]</code><code># cd /opt/</code>

<code>[root@94ea720a2c41 opt]</code><code># ls</code>

<code>[root@94ea720a2c41 opt]</code><code># cd /centos-data/</code>

<code>[root@94ea720a2c41 centos-data]</code><code># ls</code>

<code>[root@94ea720a2c41 centos-data]</code><code># touch 12345.txt</code>

<code>[root@94ea720a2c41 centos-data]</code><code># cd /opt</code>

<code>[root@94ea720a2c41 opt]</code><code># touch 111</code>

<code>touch</code><code>: cannot </code><code>touch</code> <code>‘111’: Read-only </code><code>file</code> <code>system</code>

<code>拥有volume-test2的容器的操作:</code>

<code>94ea720a2c41        centos              </code><code>"/bin/bash"</code>            <code>45 seconds ago      Up 43 seconds                                volume-test04       </code>

<code>37652d460194        centos              </code><code>"/bin/bash"</code>            <code>About an hour ago   Up About an hour                             volume-test2        </code>

<code>8884fc392971        nginx               "nginx -g 'daemon of   14 hours ago        Up About an hour    80</code><code>/tcp</code><code>, 443</code><code>/tcp</code>          <code>nginxdocker         </code>

<code>14caa9ab03a9        dockerui</code><code>/dockerui</code>   <code>"/dockerui"</code>            <code>47 hours ago        Up About an hour    0.0.0.0:9000-&gt;9000</code><code>/tcp</code>   <code>dockerui_qinwen     </code>

<code>e278cabec91e        centos              </code><code>"/bin/bash"</code>            <code>2 days ago          Up About an hour                             centos_aways        </code>

<code>[root@centos7 /]</code><code># ls</code>

<code>12345.txt  abrt-2.0.8  </code><code>passwd</code>

进一步进行测试:

<code>宿主机上的操作:</code>

<code>94ea720a2c41        centos              </code><code>"/bin/bash"</code>            <code>14 minutes ago      Up 14 minutes                                volume-test04       </code>

<code>8884fc392971        nginx               "nginx -g 'daemon of   14 hours ago        Up 2 hours          80</code><code>/tcp</code><code>, 443</code><code>/tcp</code>          <code>nginxdocker         </code>

<code>14caa9ab03a9        dockerui</code><code>/dockerui</code>   <code>"/dockerui"</code>            <code>47 hours ago        Up 2 hours          0.0.0.0:9000-&gt;9000</code><code>/tcp</code>   <code>dockerui_qinwen     </code>

<code>e278cabec91e        centos              </code><code>"/bin/bash"</code>            <code>2 days ago          Up 2 hours    </code>

<code>[root@docker ~]</code><code># docker stop 37652d460194</code>

<code>37652d460194     </code>

<code>e278cabec91e        centos              </code><code>"/bin/bash"</code>            <code>2 days ago          Up 2 hours                                   centos_aways        </code>

<code>[root@docker _data]</code><code># cd /volume-test2-data</code>

<code>[root@docker volume-test2-data]</code><code># ls</code>

<code>[root@docker volume-test2-data]</code><code># ls -lrt</code>

<code>-rw-r--r-- 1 root root  692 Feb 24 10:01 </code><code>passwd</code>

<code>-rw-r--r-- 1 root root    0 Feb 24 11:16 12345.txt</code>

<code>[root@94ea720a2c41 centos-data]</code><code># ls -lrt</code>

<code>drwxr-xr-x 2 root root 4096 Feb 24 01:58 abrt-2.0.8</code>

<code>-rw-r--r-- 1 root root  692 Feb 24 02:01 </code><code>passwd</code>

<code>-rw-r--r-- 1 root root    0 Feb 24 03:16 12345.txt</code>

<code>[root@94ea720a2c41 centos-data]</code><code>#</code>

说明:

1、验证后可以发现,ro权限是正常的

2、这种映射在Dockerfile里面是没法使用的

3、这里我们不管volume-test2 所属的容器是否正在允许,在新主机中均能够继承

本文转自 冰冻vs西瓜 51CTO博客,原文链接:http://blog.51cto.com/molewan/1744570,如需转载请自行联系原作者