该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和存档文件的一些额外功能,这可能令人惊讶。