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,现在大公司主流的做法究竟是什么呢?我是前端,这块学的很吃力,希望能有大佬解答一下。。。

7028 次点击
所在节点    Docker
45 条回复
philsky28
2020-07-05 15:29:00 +08:00
滴滴滴有人吗
niubee1
2020-07-05 15:38:28 +08:00
数据库不要上 Docker
waising
2020-07-05 15:41:12 +08:00
本地 host 模式可以用吗 mac 下的 docker 网络这块好像有点坑
gigantic222
2020-07-05 16:01:44 +08:00
docker 版本多少?试试 host.docker.internal
bfme
2020-07-05 16:51:11 +08:00
@niubee1 老哥 问一下 mysql 为什么不能用 docker ? 有什么弊端吗?
niubee1
2020-07-05 17:00:56 +08:00
docker 的容器是要 stateless,本次存文件都不要。数据库是干嘛,数据持久化,完全是背离的东西,干嘛硬要搞到一块儿?
dagouziwangwang
2020-07-05 17:09:55 +08:00
@niubee1 docker volume 表示一脸懵逼
hakono
2020-07-05 17:14:17 +08:00
whileFalse
2020-07-05 17:15:28 +08:00
链接本机局域网 IP,或者用 host.docker.internal
whileFalse
2020-07-05 17:16:03 +08:00
本机环境或者公用测试环境,数据库用 Docker 问题不大
hakono
2020-07-05 17:16:08 +08:00
@niubee1 mount 下 volumn 就完结的事情。如果你说 mac 中的 docker 是跑在虚拟机上的,跑数据库会有那么点性能损失,所以不太推荐的话这里还还算靠谱那么点
napsterwu
2020-07-05 17:20:10 +08:00
k8s pvc 表示一脸懵逼,docker 当然可以持久化,不过个人认为不是需要横向扩容的支持集群的 db 也没有太大必要容器化
SevenJ
2020-07-05 17:24:58 +08:00
shiny
2020-07-05 17:30:19 +08:00
你这种情况,为了方便,完全可以把 MySQL 放容器里,不要太香。
哪怕是线上环境,多大的量级,就担心数据库放容器里有性能损失了?
gigantic222
2020-07-05 17:51:03 +08:00
tidb es 之类的分布式数据库表示 docker 真香
abowloflrf
2020-07-05 17:57:00 +08:00
只是本地开发测试的话,没有网络隔离的需求,启动容器的时候 network 用 host 模式就好了
niubee1
2020-07-05 18:40:43 +08:00
@dagouziwangwang
@hakono

你们没有 get 到点,没工夫长篇大论的说。Docker Volume 是什么,是属于实例的还是属于宿主?能做到和这么做好不好也是两码事


@napsterwu docker 当然可以持久化,但是 docker 的实例要不要有状态,有状态好还是无状态好。就跟讨论面向对象编程和函数式编程一样。

这种架构的事情,各有各的说法,我也就一说,不愿意深次思考的就继续 mb 吧,你们说得都对
newtype0092
2020-07-05 19:11:23 +08:00
@niubee1 我觉得是你没搞懂 Docker 怎么用
作为本机环境来说 Docker 就是个无状态的运行时容器,用来跑 MySQL 程序而已,文件和配置我想存在哪存在哪,想起几个起几个,完全不会干扰。
你本地安装才会有各种各样和具体机器相关的问题,每个机器上都不一样完全不方便重复部署。。。
newtype0092
2020-07-05 19:17:10 +08:00
用 Docker 起 MySQL,在 Dockerfile 里配置好映射的端口,这样宿主机就可以用 localhost+指定端口的形式访问,也可以把 sock 文件映射到宿主机直接用来访问。
你所有 Docker 内的环境应该都通过 Dockerfile 传进去,这样部署到哪里都不会变。
jason94
2020-07-05 19:54:52 +08:00
我写 nodejs 项目会创建 docker-compose.yml ,把 mysql 、 phpmyadmin 和 redis 写里面 ,然后一行命令就启动好开发环境了,特别是在协同开发的时候非常方便。

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

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

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

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

© 2021 V2EX