mac 中的 docker 如何连接本机的 mysql ,数据库应该用 docker 吗?

2020-07-05 15:22:29 +08:00
 philsky28

首先描述下我现在本地的是一个 node 项目(nest.js),在连接 mysql 数据库的配置文件里(用的 typeorm )数据库链接地址写了 localhost 发现连接不上去,搜索了一下知道 docker 中的 localhost 不是本机 localhost,要把 localhost 换成 docker0 的 ip 地址才行,但是这时候我有了两个问题: 1,我本地是 mac,mac 中没有 docker0 网卡 2,docker 上传到 vps 生产环境后,他的 ip 地址会变化吗?如果变化的话际开发中如何保证在本地 ok 上生产后那些环境变量也能保证没问题呢?

网上搜的很多教程是把 mysql 也做成了 docker 镜像,但是好像也有很多人说数据库不应该使用 docker,现在大公司主流的做法究竟是什么呢?我是前端,这块学的很吃力,希望能有大佬解答一下。。。

6979 次点击
所在节点    Docker
45 条回复
janxin
2020-07-06 11:40:42 +08:00
开发测试环境哪那么多要求,无所谓的

IP 会变化的,但是 docker 为什么要传到生产环境?这是什么操作
philsky28
2020-07-06 15:57:31 +08:00
@kchum docker compase 应该是用的 docker 中的 mysql 吧,应为我看别人说数据库放 docker 里不好所以 docker-compase.yml 里只写了 nodejs 的配置
philsky28
2020-07-06 16:04:52 +08:00
@LichMscy 非常感谢!我回去多试试。其实我是挺想做全栈软件研发的,所以想学一下最主流正规的做法
philsky28
2020-07-06 16:29:35 +08:00
@LichMscy 所以我想的是最好本地写 compose 直接用 mysql 镜像,上了生产就变成连接宿主机的 mysql
byzf
2020-07-06 19:27:55 +08:00
没有很看懂你配置的环境, 如果你是用 docker 启动 nodejs 项目和 mysql 的话, 可以建一个 docker 网络, 然后在 docker run 里指定这个网络, 然后它们的 localhost 就是通的. 不管开发环境还是线上环境都是这样配置的, 为的就是大家都走 localhost, 方便.

你把数据库配在另一个网络里, 有点脱裤子那啥.

mysql 和 PostgreSQL 团队里有专门的测试 docker 性能的文章,cpu 、内存和硬盘 io 都是接近 0 损耗, 但是网络用默认模式每秒处理的请求数会下降的很快, 15%-30%.

k8s 的默认网络模式用的不是 docker 的 bridge 网络, 一个是靠 kubelet 自己管理 host 文件, 另一个是所有流量都走 kubelet 代理, 前者应该比 bridge 性能好一点, 后者应该差不多. 其它还有几个模式. 这个我没研究过.

说点生产环境的事, 一个稍微成型的项目用到 3-4 个进程+2-3 个数据库很正常, 每个进程有不一样的环境和配置文件, 每个数据库有不一样的地址, 把这些配置和网络集中到一个 yaml 里, 一键启动一键 debug, 省几个小时何乐不为.

运维人员的工时和经验才是最贵的, 性能有损失加钱加配置就行了, 少请一个运维才是最省钱的. 生产环境不用 k8s 部署 mysql 不是为了性能, 是为了数据安全, 一般都用托管的. 不过自己系统稳定的话, k8s 上跑数据库的多了去了, 用不用都行.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/687308

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX