非持久数据

每个容器都分配了本地存储。非持久数据属于容器的一部分,并且与容器的生命周期一致。

在Linux系统中,存储目录位于/var/lib/docker/<storage-driver>/下;

在Windows系统中,位于c:\ProgramData\Docker\windowsfilter\目录下。

持久化数据

总体来说,用户创建卷,然后创建容器,接着把卷挂载到容器上。卷挂载到容器文件系统的某个目录之下。任何写到该目录下的内容都会写到卷中。即使容器删除,卷与其中的数据仍然存在。

创建和管理卷

$ docker volume create myvol
#创建了一个myvol卷

默认情况下,Docker创建新卷时采用内置的local驱动。本地卷智能被所在节点的容器使用。-d参数可以指定不同的驱动。

第三方驱动可以通过插件方式接入。这些驱动提供了高级存储特性,并为Docker集成了外部存储系统。

查看卷信息

$ docker volume ls
#查看卷列表

$ docker volume inspect <volume name>
#查看卷详情

inspect命令的输出内容

$ docker volume inspect myvol
 [
     {
        "CreatedAt": "2018- 01- 12T12: 12: 10Z", 
        #卷创建时间
        
        "Driver": "local", 
        #卷驱动,使用local驱动创建的卷位于/var/lib/docker/volume目录下。
        
        "Labels": {}, 
        #卷标签
        
        "Mountpoint": "/var/ lib/ docker/ volumes/ myvol/_ data",
        #容器内的挂载点
        
        "Name": "myvol",
        #卷名称
        
        "Options": {}, 
        "Scope": "local"
     }
 ]

删除卷

$ docker volume prune
#谨慎使用!删除未装入容器或服务的所有卷

$ docker volume rm <volume name>
#删除指定卷

在Dockerfile中部署卷

VOLUME <container-mount-point>

在Dockerfile中无法指定主机目录。这是因为主机目录通常情况下是相对主机的一个目录,意味着这个目录在不同主机间会变化,并且可能导致构建失败。如果通过Dockerfile指定,那么每次部署时都需要指定主机目录。

实际应用

运行容器并挂载卷

$ docker container run -d -p 80:80 --name nginx --mount  source=nginx_wwwroot,target=/usr/share/nginx/html nginx
如果指定的卷不存在,Docker会自动创建一个卷。

尝试向卷内写入数据

$ docker container exec -it nginx sh
$ echo "the 1st web page" > /usr/share/nginx/html/index.html
#进入容器内,向nginx网站目录写入内容。

访问nginx服务

使用浏览器访问nginx服务。可以看到网页内容。

在Docker主机中修改卷内容

默认的卷位置在/var/lib/docker/volume/<volume name>/_data中。

修改此目录中的文件,容器中的文件相应发生改变。

标签: none

添加新评论