我想从现在开始发现docker几天开始。我已经设置了一个docker-compose.yml,并在我的本地计算机上运行该堆栈进行开发。在我的docker-compose.yml中,我还创建了一个mysql-container,该卷具有将项目中的文件夹连接到容器中的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放到该服务器上,它将使用本地数据库中所做的更改覆盖数据库,仍然可以为该数据库解决方案。
预先感谢
布拉姆
答案 0 :(得分:0)
第一种推荐的方法是将docker/mysql
放在gitignore中,这样您就不必担心实时备份和本地备份都将保留在本地备份上了。
忽略文件
有时您不希望Git签入文件 GitHub。有几种方法可以告诉Git忽略哪些文件。
创建本地.gitignore
如果您在存储库中创建一个名为.gitignore的文件,则Git会使用该文件 确定在进行操作之前要忽略哪些文件和目录 提交。
.gitignore文件应按顺序提交到存储库中 与其他克隆该用户的用户共享忽略规则 存储库。
第二件事,您可以尝试挂载./docker/mysql
以外的其他路径。
例如
/home/dev/docker/myslq/
在开发机或您的实时/home/live/docker/mysql
中。
最好采用第一种方法,并且不要弄乱目录名称。
答案 1 :(得分:0)
确切的问题是,将您的git repo导出到实时服务器会删除不太好的数据库。
我不会将数据库放入git。但只是结构。表创建/版本(通常称为迁移)。
Django是Python网络框架,可以很好地处理这一问题。 并有助于在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脚本等...
每个表有一个脚本来插入初始数据,这样,如果由于某种原因而丢失服务器,则只需将该初始数据导入新服务器即可。
答案 2 :(得分:0)
我想这取决于您的项目。我在WordPress世界中,所以我将以它为例。
如果您正在开发将由多个人使用的主题或插件,则仅将主题或插件放入版本控制中是很有意义的。
在这种情况下,我将使用wp-env(一个脚本,它旋转几个docker容器,并为我设置标准的WordPress环境),并且仅放置链接到该主题的主题和/或插件文件夹版本中的容器。这里没有必要实际版本化生成的WP源文件或DB文件,因为它们可以再次使用wp-env命令重新生成。
另一方面,如果您要为客户开发完整的网站,则取决于插件和某些设置的组合,以及所构建的自定义主题,甚至可能为此专门开发一个或两个插件客户,我得知我想将整个开发环境放在这样的git存储库中:
-docker-compose.yml(启动wp容器和mysql容器) -数据(原始数据库文件映射到mysql容器) -wordpress(WordPress项目的网络根目录,映射到wp容器) -.git
我认为这是有道理的,原因是我可以转到另一台计算机,拉出存储库,运行docker-compose,并且所有东西都完全处于我上次推送项目时离开它的状态我的另一台计算机。
当然,如果您正在与其他人一起工作,这可能需要一些额外的协调。
而且,正如某些人指出的那样,您不能简单地将git repo推入生活。相反,您可以编写只将相关文件推送到实时环境的脚本。