Docker:如何在容器之间传输和共享数据

Docker:如何在容器之间传输和共享数据

我目前有一个新的服务器设置,其中运行着 Docker。我使用 Gitlab CI 创建和推送新镜像。我只是无法确定如何部署/设置我的项目文件和 Docker 镜像。

为了理解我的情况,假设有一个 PHP 项目具有以下文件夹结构

  • 系统
  • 源码
  • 民众
  • 用户
  • 上传

这是一个虚构的结构,但确实反映了除上传文件夹之外的所有内容都包含 PHP 脚本的情况。

我现在可以分离nginx 和 php 镜像来运行此项目,或者使用单身的包含这两种服务的图像。

然而,我的疑问就在这里。我应该采取什么方法?因为:

  1. 创建 nginx 和 php 镜像会将我的项目文件复制到两个镜像上,从而生成 2x100mb 镜像。旁注:上传将从主机系统挂载。
  2. 使用两种服务创建单个图像应该可以消除上述问题,但会带来其他问题,例如日志记录和服务管理。
  3. 创建数据容器也可以解决 2 个图像尺寸问题并消除第 2 点中的问题,但这被认为是不好的做法。
  4. 根据文档,我应该使用主机上的数据卷在容器之间共享数据。这将消除数据容器,但我必须让我的构建过程也将项目文件部署到共享数据卷,我认为这不太现实,因为这有点违背了拥有容器的目的。
  5. 我也不明白上一点(准确地说是第 4 点)应该如何工作/设置。我是否可以在 Gitlab 中创建一个构建步骤,创建一个卷并将所有项目文件复制到该卷,以便稍后将其安装到 php 和 nginx 容器中?

另外,我只在我的服务器上运行 docker,因为我不需要 Kubernetes 或 Rancher 这样的解决方案。

答案1

要管理由 N 服务组成的应用程序,我建议您看一下 docker-compose,它易于安装,它只使用依赖项等一些功能为您管理 docker 应用程序。

在容器卷之间共享数据是最好的解决方案,如果其中一个容器只需要读取数据,则可以将卷安装为只读,该卷是主机可访问的和持久的(直到您删除它们),因此您不必在构建过程中创建它。我在一个以 nginx 为前端的 django 项目中使用它,静态文件由 nginx 从 django 容器写入它们的 docker 卷中提供。您可以在启动容器之前通过运行创建卷docker volume create 卷名称使用 docker run 或 docker-compose 手动填充项目文件并启动容器

参考: https://docs.docker.com/compose/

相关内容