该VOLUME指令在运行时在Docker容器中创建一个数据卷。作为参数提供VOLUME的目录是绕过Union File System的目录,主要用于持久性数据和共享数据。
如果运行docker inspect <your-container>,您将在该Mounts部分下看到,Source它代表主机上的目录位置,而Destination代表容器中已装载的目录位置。例如,
"Mounts": [
{
"Name": "fac362...80535",
"Source": "/var/lib/docker/volumes/fac362...80535/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
以下是3个用例docker run -v:
docker run -v /data:类似于VOLUME在Dockerfile中指定指令。
docker run -v $host_path:$container_path:这允许您在运行时$host_path从主机挂载到$container_path容器中。在开发中,这对于与容器共享主机上的源代码很有用。在生产中,这可以用于将主机的DNS信息(位于中/etc/resolv.conf)或机密信息装入容器。相反,您也可以使用此技术将容器的日志写入主机上的特定文件夹。双方$host_path并$container_path必须是绝对路径。
docker run -v my_volume:$container_path:这将在您的容器中创建一个数据卷$container_path并为其命名my_volume。它本质上与使用创建和命名卷相同docker volume create my_volume。使用诸如Flocker之类的多主机存储驱动程序,这样命名卷对于容器数据卷和共享存储卷很有用。
注意,将主机文件夹作为数据卷挂载的方法在Dockerfile中不可用。要引用Docker文档,
注意:由于Dockerfile的可移植性和共享目的,因此该文件不可用。由于主机目录从本质上说是与主机相关的,因此Dockerfile中指定的主机目录可能无法在所有主机上正常工作。
现在,如果要将文件复制到非开发环境中的容器中,则可以使用Dockerfile中的ADD或COPY说明。这些是我通常用于非开发部署的内容。
COPY到ADD。它们几乎相同,但ADD具有URL和存档文件的一些额外功能,这可能令人惊讶。