微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql – 删除容器时docker volume会发生什么

假设我的MysqL Docker容器中有这些卷

VOLUME [“/ etc / mysql”,“/ var / lib / MysqL”]

现在生产运行良好.

然后我在MysqL映像中做了一些更改,我想在生产中部署它.

如果我错了,请纠正我

>我必须从更新的MysqL映像构建新容器
>我需要删除旧的conatiner所以我将停止并删除它.
>然后我需要创建具有相同名称的新MysqL容器,以便使用该数据库的其他Web服务器可以使用它.

现在我的问题是,一旦删除了conatiner,docker就不会删除所有的MysqL数据.

解决方法:

在我们继续之前,我认为有两个概念需要解释. Docker镜像和docker容器.容器是由docker管理的基于docker镜像的运行进程.有两种方法可以创建图像:

>您指定具有所有依赖项的Dockerfile,并使用docker build构建它.然后它保存在您的本地注册表中(或者您可以将其推送到中心位置)
>您可以基于图像启动容器,在该容器中进行修改,然后提交更改.

容器只是正在运行的进程,它们始终基于映像.请注意,容器永远不能更改图像(除非您提交). IMO的Dockerfile方法远非优越.

所以,回到最初的问题. Dockerfile中的VOLUME指令只是为容器创建一个挂载点,它实际上并没有从主机文件系统到容器文件系统的任何东西.为了从主机实际挂载文件夹,运行容器时必须提供-v标志.

docker run -v /host/path:/container/path ...

这将在主机和容器之间创建一个共享文件夹,即使在容器被停止,删除或崩溃后,数据仍然存在.

  1. I have to build the new container from the updated MysqL image

是的,如果您在Dockerfile中更新了某些内容,则必须构建新映像(而不是容器)并将映像部署到生产环境中.然后,您可以使用基于新构建的图像的docker run启动容器.

  1. I need to delete the old conatiner so i will stop that and delete it.

是的,您必须停止旧容器,然后将其删除.之后,您可以使用相同的名称启动新容器,但这次它基于新图像.删除容器是必需的,因为它是一个命名容器,如果你启动一个具有相同名称的新容器,你将会遇到名称冲突(即容器以docker run的–name选项启动).如果尚未命名容器,则可能已跳过删除旧容器.

  1. Then i need to create the new MysqL container with same name so that other webserver using the database can use it.

是的,因为您可能正在使用容器链接来实现此目的.

资源:

> Docker Volume
> Managing Data in Containers
> Excellent article about volumes

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐