如果我要像这样运行nginx:
docker run -i -t -p 80:80 \ -v /docker/dev:/dev \ -v /docker/var/www:/var/www \ -v /docker/var/log/nginx:/var/log/nginx \ -v /docker/etc/nginx:/etc/nginx \ --name clmnginxbash quasaur/nginximage /bin/bash
…我正在使用Docker HOST的文件系统来存储nginx的configuration和网站本身,我不应该为这些共享包含一个VOLUME语句,或者我应该?
VOLUME ["/etc/nginx", "/var/www","/var/log/nginx"]
事实上,我不应该能够从Dockerfile中的图像中删除这些目录,因为它们不会被使用?
RUN rm -rf /usr/share/nginx/www /etc/nginx /var/log/nginx
感谢您的反馈意见!
在运行时指定-v或在VOLUME指令中指定卷都装入一个绕过UFS的卷来存储持久数据。 请参阅https://docs.docker.com/terms/layer/#ufs-def 。 这是在容器中的实际安装:
$ docker run --rm ubuntu mount | grep mnt
没有装在容器里 让我们再次尝试使用-v /mnt :
$ docker run --name mount -v /mnt ubuntu mount | grep mnt /dev/sda1 on /mnt type ext4 (rw,relatime,data=ordered)
很酷,我们有一个持久的安装。 但是我们没有在主机上指定一个地方来存储它,它实际上居住在哪里?
$ docker inspect --format '{{ .Volumes }}' mount map[/mnt:/mnt/sda1/var/lib/docker/vfs/dir/3d0eff68f9db4821821812f9e363c1e6058105de8a7a04ecfda113e8def9848a]
正如您已经指出的那样,您可以通过在主机上添加一些东西来映射这个挂载到主机上的一个目录:
$ docker run --rm -v /folder/on/host:/mnt
所以,要回答你的两个问题,不需要, Dockerfile中的VOLUME指令是不需要的。 你应该删除它们吗? 我猜,假设你永远不会有容器中的持久数据没有指定-v 。