在dockerfile中创建一个没有Kubernetes中的持久卷(声明)的卷?

时间:2019-07-11 13:56:49

标签: docker kubernetes

我有一个要转换为docker容器的应用程序。

我将针对持久性存储和非持久性存储为应用程序测试一些不同的配置。

例如在一种情况下,我将创建一个持久卷并将一些数据装入该卷。

在另一种情况下,我要测试是否具有任何持久卷(并接受容器运行时生成的任何日期在其停止/重新启动时都消失了)。

关于可以正常工作的第一种情况。但是,当我测试第二种情况时-没有持久存储-我不太确定在docker端该做什么。

当我不打算在kubernetes中保留任何持久卷时,基本上在Dockerfile中定义一个卷有意义吗?

例如这是我的Dockerfile

的结尾
...
ENTRYPOINT ["./bin/run.sh"]
VOLUME /opt/application-x/data

那么当我不创建和kubernetes卷时,拥有最后一行完全有意义吗?

或者换句话说,即使没有创建相应的持久卷,在某些情况下仍可以在dockerfile中创建卷吗?

1 个答案:

答案 0 :(得分:2)

在Dockerfile中定义VOLUME通常没有意义。

您可以在容器文件系统空间中的任何目录上使用docker run -v选项或Kubernetes的容器卷挂载设置,无论其映像最初是否将其声明为VOLUME。相反,VOLUME可以按迭代开发顺序泄漏匿名卷,并稍后在Dockerfile中破坏RUN命令。

在您描述的场景中,如果没有VOLUME,那么一切都非常简单:如果在普通Docker或Kubernetes上的路径上安装某些内容,则存储将使用已安装的卷,否则,数据将保留在容器文件系统中,并在容器退出时丢失(所需)。我认为如果您确实有VOLUME,那么容器运行时将自动为您创建一个匿名卷。总体行为将是相似的(其他容器很难找到/使用匿名卷),但是在普通Docker中,至少您需要记住对其进行清理。