Docker存储卷

docker存储卷:

docker容器卷的使用方式:
1 Docker 管理卷:

docker run -it --name [名称] -v [docker内部的卷] [镜像名称]
具体使用:
docker run -it --name testvolume -d -v /data/mydata 75835a67d134
查看存储卷映射的目录:
命令:docker inspect f878a628f152

"Mounts": [
   {
    "Type": "volume",
    "Name": "dd91ef9ae17175499d490c36e70033e4701a2d66337f8e6435503bd9ddd1811b", --卷的uuid
    "Source": "/var/lib/docker/volumes/dd91ef9ae17175499d490c36e70033e4701a2d66337f8e6435503bd9ddd1811b/_data", --宿主机中的所在位置
    "Destination": "/data/mydata", --容器中的目录
    "Driver": "local",
    "Mode": "",
    "RW": true,
    "Propagation": ""
            }
测试验证是否关联:
在宿主机目录中创建测试文件:
[[email protected]:23:05_data]#pwd
/var/lib/docker/volumes/dd91ef9ae17175499d490c36e70033e4701a2d66337f8e6435503bd9ddd1811b/_data
[[email protected]:23:06_data]#echo "holle world" > test.html

在容器中相对应目录查询:
[[email protected] /]# cd data/mydata/
[[email protected] mydata]# ls
[[email protected] mydata]# ls
test.html

在容器中添加一些内容:
[[email protected] mydata]# echo hello yl >> test.html
[[email protected] mydata]# cat test.html
holle world
hello yl

在宿主机中查看:
[[email protected]:23:45_data]#cat test.html
holle world
hello yl

当使用--rm 一次性启动的时候退出时候,会一并删除宿主机目录中的数据
当使用 -d 做后台进入运行的时候,退出后删除容器不会 目录中数据不会丢失!

2 绑定挂载卷:
docker run -it -v [宿主机中目录]:[容器中目录] --name [名称] [镜像名称]
具体使用:
docker run -it -v /data/dockerdir:/data/mydata --name b2 75835a67d134
查看卷信息:
"Mounts": [
 {
     "Type": "bind",
     "Source": "/data/dockerdir", ---宿主机目录
     "Destination": "/data/mydata", --容器中目录
     "Mode": "",
     "RW": true,
     "Propagation": "rprivate"
  }

当容器删除后,数据依然存在:
[[email protected]:36:22dockerdir]#docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
d05a6a77992a        75835a67d134        "/bin/bash"         5 minutes ago       Exited (0) 22 seconds ago                       b2
[[email protected]:36:24dockerdir]#docker rm b2
b2
[[email protected]:36:30dockerdir]#docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[[email protected]:36:32dockerdir]#ls
test.html
[[email protected]:36:49dockerdir]#cat test.html
hello world
hello yl

再次启动时即是更换容器内部绑定目录也可以使用数据:
[[email protected]:36:51dockerdir]#docker run -it -v /data/dockerdir:/data/web --rm  --name b2 75835a67d134
[[email protected] /]# ls
anaconda-post.log  bin  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[[email protected] /]# cd data/
[[email protected] data]# ls
web
[[email protected] data]# cd web/
[[email protected] web]# ls
test.html
..................................................................

使用模板方式过滤信息:
docker inspect -f {{.Mounts}} [镜像名称]

.................................................
多个docker容器可以关联到一个宿主机目录!

测试:
启用两个容器:
docker run -it --name b1 -d -v /data/dockerdir:/data/web 75835a67d134

docker run -it --name b2 -d -v /data/dockerdir:/data/web 75835a67d134

[[email protected]:01:26~]#docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
84c3bd9718e0        75835a67d134        "/bin/bash"         5 seconds ago       Up 4 seconds                            b2
d8a8f4203f13        75835a67d134        "/bin/bash"         16 seconds ago      Up 15 seconds                           b1

进入目录后分别在两个目录中创建文件:
b1中创建文件:
[[email protected] web]# echo hello jim > test12.txt
[[email protected] web]# ls
index.html  test12.txt  test.html
[[email protected] web]# cat test12.txt
hello jim

b2中创建文件:
[[email protected] web]# echo hello test > index.html
[[email protected] web]# ls
index.html  test.html

宿主机目录中查看:
[[email protected]:01:28~]#cd /data/dockerdir/
[[email protected]:09:30dockerdir]#ls
index.html  test12.txt  test.html

删除docker后查看宿主机目录数据一样存在!

...............................................................
docker复制存储卷路径:

如何复制:具体使用
容器b1:
docker run -it --name b2 -d -v /data/dockerdir:/data/web 75835a67d134
不用启动,只需要存在即可!
容器b2:
docker run -it --name b2 --volumes-from b1 75835a67d134

在共享网络:
docker run --name t2 --network container:t1 -it --rm b2

原文地址:http://blog.51cto.com/13878078/2315223

时间: 2024-10-08 10:46:19

Docker存储卷的相关文章

Docker之七---Docker存储卷与容器卷详解

1.存储卷介绍 1.1 背景 (1)docker 的 AFUS 分层文件系统 docker镜像由多个只读层叠加而成,启动容器时,docker会加载只读镜像层并在镜像栈顶部加一个读写层: 如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即“写时复制(COW)”机制. 描述:如果一个文件在最底层是可见的,如果在layer1上标记为删除,最高的层是用户看到的Layer2的层,在layer0上的文件

docker存储卷篇

在之前的文章中,我们说过,容器的服务如果需要提供给外部访问,需要把端口映射出来.docker的数据存储卷也是一样的道理,我们在使用docker的时候,有些应用是需要保存数据的,这些需要保存数据的应用就可以把docker容器内的数据目录映射到宿主机上,如果没有指定,写入的数据会存储在docker的联合挂在存储系统上(性能低下),如果指定了挂载的目录(这里是/data),则可以绕过docker的文件系统,直接写在宿主机(或其他文件系统,如:nfs)上,如下图:上面的/data目录也又两种形式,一种是

Docker 存储卷

为何需要存储卷 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层.如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,这个就是写时复制(COW)机制. 数据存储的问题 Docker 容器数据的存储,存在以下问题: 存储于联合文件系统中,不易于宿主机访问 容器间数据共享不便 删除容器其数据会丢失 关闭并重启容器,容器的数据不受影响.但删

Docker第五回(Docker存储卷)

一.Docker底层存储机制介绍 对于Docker来讲,它作为容器运行的底层引擎,在组织和运行其容器时,每个容器内运行一个程序及子程序,容器启动时依赖于底层可能不止一层的只读镜像联合挂载启动而成.它底层能够存储此类分层构建并联合挂载镜像的文件系统包含AUFS.Overlayfs2.devmapper文件系统.最后一定要在最上层构建一个可写层.对于此可写层来说,所有在容器中所执行的写操作(对数据的修改.对内容的修改),都是保存在最上层的可写层.对下层内容的增删改操作我们需要使用“写时复制”(COW

基于Gluster分布式实现docker存储卷

1.安装配置glusterfs基础配置:centos7 关闭firewalld/selinux配置/etc/hosts和hostname 1 [[email protected] ~]# cat /etc/hosts 2 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 3 ::1 localhost localhost.localdomain localhost6 localhost6.lo

你必须知道的Docker数据卷(Volume)

本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.将Docker数据挂载到容器 在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中.目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中: (1)volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中:(最常用的方式

理解Docker(8):Docker 存储之卷(Volume)

(1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 (6)若干企业生产环境中的容器网络方案 (7)Docker 存储 - AUFS (8)Docker 存储 - Volume 1. Docker volume 的几种形态 有状态容器都有数据持久化需求.前一篇文章中提到过,Docker 采

Docker存储驱动之Device Mapper简介

Device Mapper是一个基于kernel的框架,它增强了很多Linux上的高级卷管理技术.Docker的devicemapper驱动在镜像和容器管理上,利用了该框架的超配和快照功能.为了区别,本文使用Device Mapper指驱动中的框架,而devicemapper指Docker的存储驱动. 注意:商业支持的Docker Engine(CS-Engine)建议在RHEL和CentOS上使用devicemapper存储驱动. AUFS之外的另一种选择 Docker最初运行在Ubuntu和

理解Docker(7):Docker 存储 - AUFS

(1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 (6)若干企业生产环境中的容器网络方案 (7)Docker 存储 - AUFS Docker 存储可以分为分层文件系统和卷,本文将介绍 AUFS 分层文件系统. 1. 基础知识 1.1 Linux 的 rootfs 和 bootfs 一