当然,在正式发布时,大多数团队通常都会采用 CI 系统构建出安全的包,以此规避。
然鹅,在平时开发中我们难免遇到临时验证问题的场景出现,在很多团队里,开发人员会在本地机器里直接构建之后将产物丢给测试验证,这个过程就容易因为环境因素而遗漏问题。
根本痛点:开发环境没有标准化
docker 在运维领域已经被广泛应用,很适合用于统一环境。而在本地开发里它出现得却很少。通常我们更倾向于用它负责构建与部署。本地使用 docker 最主要的障碍有两个:
如上面提到的,我们要解决的是环境标准化的问题,了解使用 docker 是一个解决过程,而不是方法。对于大多数人来说,他们的诉求只是一个容易用的标准环境,而不是多花时间去学一个新东西。
设计这个东西,目标有三个:
解决方法:
可能有人会问,docker 已经有了 Dockerfile 与 compose,为什么还要一个配置文件。他们的关系是这样的:
设计思路很简单粗暴,但效果看起来是不错的:
而你只需要配一个简单的 json 在你的仓库里:
{
"env": {
"name": "hello",
"image": "maven:slim"
}
}
这么做之后,你的团队只需要预先构建好一个 image,配进仓库,所有人就可以统一环境啦!
https://github.com/williamfzc/devcube
欢迎各位一起讨论 :) 欢迎进来写 features
1
devliu1 2020-08-07 16:08:47 +08:00
这个似乎直接预置 docker-compose 与用于启动的 makefile 就可以做到呀
|
2
xinta 2020-08-07 16:16:40 +08:00
我就觉得 debug 不方便
|
3
mmrx 2020-08-07 16:24:54 +08:00 via Android
在很多团队里,开发人员会在本地机器里直接构建之后将产物丢给测试验证,这个过程就容易因为环境因素而遗漏问题。
这应该是 CI 中单元测试环节没做到位的问题,交付测试前肯定是要远程部署并跑过单元测试的。 |
4
Jirajine 2020-08-07 16:27:26 +08:00 via Android
感觉你这种思路有点想 nix
|
5
williamfzc OP |
6
Alias4ck 2020-08-07 16:57:33 +08:00
你这个只能算个小工具 看了下代码 实现大部分还是拼接 docker command 的 而且功能也挺少的 比如不能设置 network 设置 Volumes 等
|
7
devliu1 2020-08-07 17:00:43 +08:00
@williamfzc 例子就是项目负责人创建 Dockerfile 和 docker-compose.yml 的同时,顺便写上“如何启动并进入容器的脚本或 makefile”。
|
8
xiangwan 2020-08-07 17:01:21 +08:00
在用 vsc remote container
https://code.visualstudio.com/docs/remote/containers |
9
williamfzc OP @Alias4ck 其他设置项堆进去就行了,不是大问题; linux 跟 macos 是用 dockerpty 做的,拼 command 只是为了兼容 windows
|
10
williamfzc OP @xiangwan 好东西.. 可以脱离 vscode 吗
|
11
williamfzc OP |
12
devliu1 2020-08-07 21:13:11 +08:00
@williamfzc 其实你这个思路挺好的,但是引入的复杂度(pip install ),似乎大于得到的收益。另外,还是要 IDE 支持才能正常使用,比如#2 提到的 debug 。
|
13
williamfzc OP @devliu1
谢谢,docker 官方 sdk 有 go 跟 python,本来打算用 go 写的就不会有这个引入成本,后来觉得先简单点用 python 写个出来看看; IDE 跟 debug 确实无解了,工作量过大,也没那么多时间 |
14
594duck 2020-08-08 08:59:05 +08:00 via iPhone
本地研发完后,先上 dev 开发环境自己集成了搞。然后再上 sit,再上 uat,preprod,prod
关于打包,全部是在 Jenkins 上打的,本地打什么包。生产参数不会本地配置吧。 不要什么都吹 docker 。纯敏捷开发是 sla 要求低于 95%的个人团队搞的。 稍好点都是敏捷加瀑布。一天天的吹吹吹。 |
15
dqh3000 2020-08-09 01:13:35 +08:00
@williamfzc 封装一个开发版本的 code-server,所有人远程开发
|
16
kingfalse 2020-08-09 03:25:54 +08:00 via Android
eclipse che 了解一下?
|
17
charlie21 2020-08-09 11:37:25 +08:00
为什么“本地开发中的环境问题”这个问题被解决了一遍又一遍? vagrant, docker 什么的。就是因为提问者的机子就是性能过剩
V2EX 就是提倡这种性能过剩的人的论坛,什么 1TB 硬盘 16G 内存。 而且不仅是机器性能过剩,人的精力也是性能过剩。 amazon 创立于 1995 年,web 2.0 时代的网站复杂度并不比今天高多少。20 年多前人们对这个问题的解决办法是:n 个人共用一台主机就 OK 了,直接连上去,大家都在这个环境里开发,谁也别瞎叫唤 |
18
Leigg 2020-08-09 12:27:17 +08:00 via Android
要是有个 gui 会不会更方便,在 gui 里面管理容器,不需要记命令
|
19
williamfzc OP @594duck
看了一下是运维同学,我理解你们的场景需要; 统一打包是最合理的,但是一线工作里总是存在一些 trade off ; 没有吹 docker,但它的确是目前容器化做得比较好的; 我没有鼓吹技术,仅提 idea,不知道你这些都是从哪里读出来的? |
20
williamfzc OP |
21
williamfzc OP @kingfalse 学习了
|
22
williamfzc OP @Leigg 按我想法 gui 不如简单的命令方便呢
|
23
firefox12 2020-08-09 19:39:20 +08:00
恩 我在公司做了一个类似的,利用 k8s, 一键帮你拉起环境,然后你把自己的开发机器加入集群。需要改本地的 dns 服务器,其他没要求。现在基本上每个开发组都用这套系统拉起环境做开发和测试。
|
24
594duck 2020-08-09 20:06:29 +08:00
@williamfzc @charlie21 的观点你真的理解了,还是我的理解 有偏差了。
|
25
xinta 2020-08-10 10:24:11 +08:00
@williamfzc 我觉得 @xiangwan 的非常不错,我会去尝试下
|
26
tfdetang 2020-08-10 15:10:24 +08:00
@williamfzc vsc remote container 确实很好用,我用了很久了; 你要是不喜欢 vscode JetBrains 家也有类似解决方案;
|
27
tfdetang 2020-08-10 15:14:54 +08:00
@charlie21 并不是所有情况下都可以大家一起连到一个环境里的。比如深度学习开发,只要一调试就要占用 tensorflow 的 session 和显存,别的开发者会受到影响。 所以环境肯定要隔离,但是又要确保最后的环境一致便于部署,那就需要利用 dockerfile 统一大家的环境。
|
28
woostundy 2020-08-10 16:25:04 +08:00
听着像 vagrant
|
29
jorneyr 2020-08-11 09:15:32 +08:00
Windows 的 Docker 很慢很慢
|
30
spider12 2020-08-14 10:34:37 +08:00
我干过这个事情,8G 内存的 Mac,内存分分钟爆掉
|