Moh*_*din 34 docker dockerfile
有人可以帮我理解之间的区别:
VOLUME命令Dockerfile(图像构建层)
和
-v发出docker run-v/xyz/bla命令(容器构建层)时的参数.
-v参数对我来说很清楚,它只是将一个目录从主机暴露给容器,反之亦然,但是它VOLUME的Dockerfile行为方式有何不同?
Car*_*rez 27
该-v参数和VOLUME关键字几乎是相同的.您可以使用-v具有相同的行为VOLUME.
docker run -v /data
Run Code Online (Sandbox Code Playgroud)
与...一样
VOLUME /data
Run Code Online (Sandbox Code Playgroud)
但是-v还有更多的用途,其中一个是映射到卷:
docker run -v data:/data # Named volumes
docker run -v /var/data:/data # Host mounted volumes, this is what you refer to -v use, but as you can see there are more uses,
Run Code Online (Sandbox Code Playgroud)
所以问题是:VOLUME在一个用途中有Dockerfile什么用?
容器文件系统由层组成,因此在那里写入,比普通文件系统更慢且有限(因为固定的层数).
您VOLUME在声明中声明Dockerfile容器将写入应用程序数据的位置.例如,一个数据库容器,无论你放入什么内容,它的数据都会进入卷docker run.
如果您为JBoss创建一个docker容器,并且您希望使用快速文件系统访问,则libaio需要将数据目录声明为a VOLUME或JBoss将在启动时崩溃.
VOLUME无论你做什么,总结都会声明一个卷docker run.事实上,docker run你无法撤消VOLUME所作的声明Dockerfile.
问候
ste*_*epf 12
VOLUME [PATH]Dockerfile中的指令相当于
$ docker run -v $(docker volume create):[PATH] [IMAGE_NAME]
Run Code Online (Sandbox Code Playgroud)
容器文件系统由层组成,因此在那里写入比普通文件系统更慢且有限(因为固定的层数).
在Docker中使用卷主要不是速度问题,而是与容器生命周期中独立的数据持久性有关.从较快的磁盘安装卷显然会提高性能,但Docker的默认行为VOLUME是在主机系统上创建命名卷,与容器的可写层相比,几乎没有速度改进.
-v参数对我来说很清楚,它只是将一个目录从主机暴露给容器,反之亦然
虽然这部分属实,-v但也可用于将命名卷装入Docker容器而不是目录.这个小细节很重要,以便了解VOLUME它的作用.一个例子:
$ docker volume create my_volume
$ docker run -v my_volume:[PATH] [IMAGE_NAME]
Run Code Online (Sandbox Code Playgroud)
这里my_volume创建了一个名为volume的卷.它的行为与"正常"安装的预期相同.[PATH]容器内的任何更改都将保留在此卷中.不同之处在于Docker管理卷的位置,因此您无需担心(/var/lib/docker/volumes/my_volume/_data以防万一您感兴趣).你为什么要这个?你可以有一个测试数据库.虽然您不需要直接访问文件,但您可能希望保存当前状态以将其安装到其他数据库容器中.
该VOLUME [PATH]指令基本上将上述指令保存到图像的元信息中.因此,每当您从此映像启动容器时,Docker都知道您希望保留[PATH]卷并处理该卷.
| 归档时间: |
|
| 查看次数: |
12157 次 |
| 最近记录: |