卷(Volume)
众所周知卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享。通过卷,我们可以可以使修改数据直接生效,而不必重新构建镜像。
一、数据卷
数据卷是一个可以绕过联合文件系统的,专门指定的可在一或多个容器间共享目录。卷为提供为持久化或共享数据提供了一些有用的特性。
数据卷设计的初哀是提供持久化数据,而与容器的生命周期无关。因此,在删除容器时,Docker不会自动删除卷,直到没有容器再引用。
1.1 添加数据卷
可以在
docker create和
docker create命令创建容器时,通过-v参数为容器添加数据卷。-v参数参数可以多次使用,以添加多个数据卷。如,可以像下面这样为容器添加一个卷:
$ sudo docker run -t -i -v /home/test --name test itbilu/test /bin/bash这样就会在容器内/webapp位置创建一个卷。
除了在创建容器时添加数据卷外,还可以通过Dockerfile文件中通过Volume指令添加,Volume可以多次使用以添加多个数据卷。
说明:本文中使用的示例镜像(itbilu/test)通过以下Dockerfile文件创建:
# Version: 0.0.3
FROM ubuntu:16.04
MAINTAINER 何民三 "cn.liuht@gmail.com"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hello World, 我是个容器'
> /var/www/html/index.html
RUN mkdir /home/itbilu/
ENV ITBILU_PATH /home/itbilu/
VOLUME [$ITBILU_PATH]EXPOSE 801.2 卷位置
添加卷后,可以通过
docker inspect来查看数据卷在容器中的位置:
$ sudo docker inspect test
docker inspect可以用来查看容器或镜像的详细配置信息。可以在容器的Mounts节点下,查看容器的卷信息:
...
"Mounts": [{
"Type": "volume",
"Name": "5f869c580c06e6079b0de2c5ce682c1c9467286c76b506703d87bf11d1271c24",
"Source": "/var/lib/docker/volumes/5f869c580c06e6079b0de2c5ce682c1c9467286c76b506703d87bf11d1271c24/_data",
"Destination": "/home/test",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "e4fd6c3a91ba2e03b14cf174c2023f366abbe9f2f73ca07e6bac223f68e47773",
"Source": "/var/lib/docker/volumes/e4fd6c3a91ba2e03b14cf174c2023f366abbe9f2f73ca07e6bac223f68e47773/_data",
"Destination": "[/home/itbilu/]",










