gpt4 book ai didi

mysql - 删除容器时 docker 卷会发生什么

转载 作者:IT老高 更新时间:2023-10-28 21:22:22 31 4
gpt4 key购买 nike

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

VOLUME ["/etc/mysql", "/var/lib/mysql"]

现在它在生产中运行良好。

然后我对 mysql 镜像进行了一些更改,我想将其部署到生产环境中。

如果我错了,请纠正我

  1. 我必须从更新的 mysql 镜像构建新容器
  2. 我需要删除旧的容器,所以我会停止并删除它。
  3. 然后我需要创建一个新的同名mysql容器,以便其他使用数据库的web服务器可以使用它。

现在我的问题是,一旦我删除容器,docker 是否会删除所有 mysql 数据。

最佳答案

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

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

容器只是正在运行的进程,它们始终基于镜像。请注意,容器永远不能更改图像(除非您提交)。 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.

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

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

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

资源:

关于mysql - 删除容器时 docker 卷会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27977001/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com