【问题标题】:docker mysql-container volume mapped to folder in project - safe?docker mysql-container 卷映射到项目中的文件夹 - 安全吗?
【发布时间】:2019-10-19 06:13:30
【问题描述】:

我想从我现在发现 docker 几天开始。我已经设置了一个带有堆栈的 docker-compose.yml,我在本地机器上运行该堆栈进行开发。在我的 docker-compose.yml 中,我还创建了一个带有卷的 mysql 容器,该卷将我的项目中的一个文件夹连接到容器中的 mysql 文件夹。

项目结构:

Project
|-- project folder 1
|-- project folder 2
|-- project folder 3
|-- docker
|   `-- mysql
|-- file1
|-- file2
`-- docker-compose.yml

容器:

  mysql:
        image: mysql:5.7
        ports:
          - "3306:3306"
        restart: always
        environment:
          MYSQL_DATABASE: xxx
          MYSQL_USER: xxx
          MYSQL_PASSWORD: xxx
          MYSQL_ROOT_PASSWORD: xxx
        networks:
          - network-woo
        volumes:
          - ./docker/mysql:/var/lib/mysql

我将这个项目推送到 git。一个叫做“新手”的魔鬼在我肩上告诉我“太好了!这样你每次推送时都将数据库保存在 git repo 中”。虽然有一个叫“gutfeeling”的天使告诉我要小心!这可能会出错,但我不确定是什么。

我的问题是,这是否是一种安全的方法,以及是否有人可以预见到这种方法将来会出现任何问题。我知道,如果我将这个项目放在实时服务器上,并将 git repo 拉到该服务器上,它将用本地数据库中所做的更改覆盖数据库,仍然在为那个解决方案工作。

提前致谢,

布拉姆

【问题讨论】:

  • 我想知道完全相同的事情。显然最好的是保留文件夹结构但不保留数据

标签: mysql git docker docker-compose


【解决方案1】:

第一个也是推荐的方法是将docker/mysql 放入gitignore,这样您就不必担心实时和本地都将在本地备份中维护。

忽略文件

有时,您不希望 Git 签入某些文件 GitHub。有几种方法可以告诉 Git 忽略哪些文件。

创建本地.gitignore

如果您在存储库中创建一个名为 .gitignore 的文件,Git 会使用它 在创建之前确定要忽略的文件和目录 提交。

.gitignore 文件应按顺序提交到您的存储库中 与克隆该文件的​​任何其他用户共享忽略规则 存储库。

您可以尝试安装除./docker/mysql 之外的其他路径。 例如

/home/dev/docker/myslq/ 在开发机器中或在您的直播中/home/live/docker/mysql

最好使用第一种方法,不要乱用目录名称。

【讨论】:

    【解决方案2】:

    问题在于将你的 git repo 导出到实时服务器会删除数据库,这不太好。

    我不会将数据库放入 git。但只是结构。表创建/编辑(通常称为迁移)。

    Django 是一个 Python Web 框架,可以很好地处理这个问题。 并有助于在 git 中对正确的东西进行版本控制:

    • 数据库结构和更改(迁移)
    • 一些应始终存在的原始数据(夹具)。

    因此,例如,如果您建立一个商店,您将保存并放入 git:数据库结构和迁移(例如当您向表中添加新字段时)以及初始数据:类别、项目、交付模式等...但不是客户端用户帐户。

    https://docs.djangoproject.com/en/2.2/topics/migrations/

    https://docs.djangoproject.com/en/2.2/howto/initial-data/

    简单地说,你可以做的就是从 git 中删除你的 mysql 卷,而是将数据库创建脚本和版本一起放入。

    就像 v0.1 用于创建数据库,v0.2 是一个会改变某些字段的 sql 脚本等等......

    每个表都有一个脚本来插入初始数据,因此如果您由于某种原因丢失了服务器,您可以将初始数据导入新服务器。

    【讨论】:

      【解决方案3】:

      我想这取决于您的项目。我在 WordPress 世界中,所以我将以此为例。

      如果您正在开发一个多人使用的主题或插件,那么只将主题或插件置于版本控制中是有意义的。

      在这种情况下,我将使用 wp-env(一个启动几个 docker 容器的脚本,并为我设置标准的 WordPress 环境),并且只放置链接到的主题和/或插件文件夹版本控制中的容器。这里没有必要对生成的 WP 源或 DB 文件进行实际版本化,因为它们可以简单地再次使用 wp-env 命令重新生成。

      另一方面,如果您正在为客户开发一个完整的网站,这取决于插件和一些设置的组合,以及您构建的自定义主题,甚至可能是您为此专门开发的一两个插件客户,我了解到我想将我的整个开发环境放在一个 git repo 中,如下所示:

      -- docker-compose.yml(启动一个 wp 容器和一个 mysql 容器) -- 数据(映射到 mysql 容器的原始数据库文件) -- wordpress(WordPress 项目的 Web 根目录,映射到 wp 容器) -- .git

      我认为这是有道理的,因为我可以转到另一台计算机,拉取存储库,运行 docker-compose up,并且我的所有内容都完全处于我上次推送项目时离开时的状态我的另一台电脑。

      当然,如果您与其他人一起工作,这可能需要一些额外的协调。

      另外,正如一些人所指出的,你不能简单地去推动你的 git repo 生存。相反,您可以编写一个仅将相关文件推送到实时环境的脚本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-19
        • 2021-05-08
        • 2020-01-30
        • 1970-01-01
        相关资源
        最近更新 更多