卷是为Docker容器保留数据的首选方法。
在本文中,将展示如何创建和使用卷来实现持久性,以及如何使用tmpfs来实现临时存储。
最简单的说,创建和安装由本地目录支持的卷如下所示:
# make host directory
mkdir -p /data# create docker volume from host directory
sudo docker volume create --driver local --opt type=none --opt device=/data --opt o=bind --name=test# mount volume within container
sudo docker run -it --mount source=test,target=/mymount alpine:latest /bin/df -h /mymount
卷安装
现在,让我们看一个具体的示例,其中有一个运行Apache2的容器,该容器从其Web根传递内容。
在github上创建了一个名为fabianlee / alpine-voltest的项目,并将其推送到docker hub。
该Dockerfile很小,仅扩展了alpine-apache映像,然后通过在从容器提供Web内容的目录中添加一个卷,将其进一步扩展了。
FROM fabianlee/alpine-apache:2.4.41-r0
...
VOLUME "/var/www/localhost/htdocs/"
让已打包好的状态运行容器,不装入任何卷。
sudo docker run -d --rm --name alpine-voltest -p 8080:80 fabianlee/alpine-voltest:1.0.0
打开本地Docker主机上的浏览器端口8080。
返回的内容是放置在“ / var / www / localhost / htdocs”目录中的容器上的默认index.html。
继续并立即停止容器。
sudo docker stop alpine-voltest
但是,如果将本地卷安装到该容器目录,则可以控制该卷从该Web服务器传递的内容。
# create local host content
sudo mkdir -p /data/test
echo "<h1>This is mounted on the docker host at /data/test/index.html</h1>" | sudo tee /data/test/index.html# create docker volume from host directory
sudo docker volume create --driver local --opt type=none --opt device=/data/test --opt o=bind --name=test# volume details
sudo docker volume inspect test# create container that uses test volume, mounts at web root
sudo docker run -d --rm --name alpine-voltest -p 8080:80 --mount source=test,target=/var/www/localhost/htdocs fabianlee/alpine-voltest:1.0.0
现在,浏览器将返回以下内容,即我们放入本地docker主机文件“ /data/test/index.html”中的内容。
再次停止容器。
sudo docker stop alpine-voltest# list volumes
sudo docker volume ls
即使容器停止后,这些文件仍保留在主机上,以后的容器实例也可以重新挂载该卷。
初始数量人口
如果使用不存在的卷名启动容器,则将创建一个新的卷。此外,如果主机目录完全为空,则容器的内容将填充(复制到)本地主机卷目录中。
# start container, allow it to create volume and populate
sudo docker run -d --rm --name alpine-voltest -p 8080:80 --mount source=newtest,target=/var/www/localhost/htdocs fabianlee/alpine-voltest:1.0.0# volume details
sudo docker inspect newtest | grep -i Mountpoint# get list of files in new volume (should now contain index.html)
sudo ls -l /<dockerhome/volumes/newtest/_data# stop container
sudo docker stop alpine-voltest# data still persists, but can be deleted
sudo docker system prune
sudo docker volume prune
临时文件系统
对于只能由单个容器使用的小型临时存储空间,有tmpfs文件系统。它仅由主机系统上的RAM存储支持。
创建安装在/ tempdisk的2Mb临时磁盘空间
创建安装在/ tempdisk的4Mb tmpfs空间,然后将文件写入: