用 Docker 部署私有镜像太复杂了,大家看看怎么简化这个流程

2019-03-06 16:54:46 +08:00
 daijinming

修改一段代码到部署到服务器上,需要 5 步走( 1、编写代码 2、制作镜像 3、推送镜像到私有镜像库 4、更新本地镜像 5、重启容器 ),是不是有点太麻烦量?我在考虑怎么简化,需要开发自动化部署工具?,或有没有现成的方式?

10236 次点击
所在节点    程序员
57 条回复
darrenfang
2019-03-06 17:22:51 +08:00
@daijinming CI 可以完成你操作步骤中的 2、3 ( 4、5 应该也可以,没尝试过)。

GitHub CI 可以选择 travis / circleci,推荐 circleci,可以添加私有项目,每月 1000 分钟免费构建时间。

本地 git 服务器可以使用 jenkins。
CivAx
2019-03-06 17:31:02 +08:00
通常情况是这样:
代码提交到 Git

Git 在相关项目的 Integrations 中设置 Webhook ( URL 从 Jenkins 获取

Jenkins 根据 Git 触发的 Webhook 进行自动构建代码并打成镜像

Jenkins 执行对应 shell 命令(通常是 docker push

Jenkins ssh 到目标服务器,执行 docker run 完成更新

这是一套完整的基于容器服务的 CI/CD 流程
godjob
2019-03-06 17:32:03 +08:00
docker 开启 tcp 远程控制,直接远程在部署服务器上构建镜像和启动
daijinming
2019-03-06 17:35:10 +08:00
@CivAx 行家一出手就知有没有
daijinming
2019-03-06 17:35:38 +08:00
@godjob 有点 hack
vissssa
2019-03-06 17:49:45 +08:00
gitlabci runner
编译镜像就在 docker 中进行
更新镜像就在本地 runner 进行,打一个 tags 即可
memorycancel
2019-03-06 18:08:18 +08:00
这个工具挺好用,https://github.com/joewalnes/websocketd,直接在远程执行 shell 脚本,在浏览器可以看见输出。
xlui
2019-03-06 18:19:12 +08:00
@CivAx
@daijinming
现在 GitHub actions 就可以完成前几步了:

push 到 GitHub ;
GitHub Actions 自动触发,执行自己定义的测试、构建、发布等;
GitHub Actions 触发 webhook,Jenkins 执行后续部署。

不过 Actions 还在 beta 测试阶段,可以看 https://xlui.me/t/github-actions-beta
k9990009
2019-03-06 19:36:13 +08:00
用 jenkines 就行啦,gitlab 拉代码打包,maven 有 docker 插件,打包的时候可以触发制作镜像上传 habor,再写个部署脚本,更新镜像,重启。
eloah
2019-03-06 19:38:59 +08:00
问题是,这有什么复杂的
SorcererXW
2019-03-06 20:16:46 +08:00
在 CI 上 build 镜像,推到 Registy,然后 SSH 到服务器上执行服务器的部署脚本
服务器上的部署脚本差不多就是停掉现有的容器,拉取 latest 镜像,然后重启部署
6diyipi
2019-03-06 21:19:40 +08:00
gitlab ci
gowinder
2019-03-06 21:42:39 +08:00
然而并不复杂啊。
metrue
2019-03-06 21:52:30 +08:00
@godjob 有 hijacked 风险。
rayingecho
2019-03-06 22:24:19 +08:00
都 2019 年了... 也该上 k8s 或者 OpenShift 了
myljs
2019-03-06 22:48:03 +08:00
[drone]( https://github.com/drone/drone) 用来做 CD 更好用更简单,因为本身就是 Docker based,但实际打包对机器性能有要求,0.5 内存的基本会构建内存不够用卡死了。此外阿里云的私有 Docker Registry 免费速度又快,免去自己搭建和管理服务了。
hilbertz
2019-03-06 22:52:01 +08:00
所以 serverless 会是以后的主流
mattx
2019-03-07 00:45:20 +08:00
把代码分开管理, 用卷挂载到 docker 里面, 就不要每次重新部署了
zjb861107
2019-03-07 02:07:39 +08:00
如果是单机部署,docker-compose + docker machine 也可以的,也就是说开发过程直接在服务器上构建镜像~
theks
2019-03-07 03:43:58 +08:00
如果只是拉代码部署更新,就不需要自己写 shell 脚本了吧,给镜像添加配置文件可以解决不少问题

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

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

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

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

© 2021 V2EX