求教脚本更新 docker 中的应用的方法

2018-10-17 17:21:53 +08:00
 daijinming

之前我写过一个 API 服务,代码托管在 github 上,让后写了个 Dockerfile,用来构建镜像

FROM microsoft/dotnet MAINTAINER DAIJINMING@LIVE.CN RUN apt-get update && apt-get install -y
git RUN git clone -q https://github.com/dockersample/webapi.git WORKDIR webapi/ RUN dotnet restore EXPOSE 5000

CMD ["dotnet","run"]

[更多详情参看: https://www.jianshu.com/p/13c7f5cfc4a1 ] 现在我考虑能不能采用简单的脚本方式更新 Docker 中的应用,比如我修改代码,然后提交到 github 上,这时再运行这个脚本,重新构建镜像,更新之前的镜像,重新启动新的镜像容器,完成更新.

网上很多资料用 gitlab,jenkin 的方式感觉有点复杂,所以寻求一个简单的方式处理

2820 次点击
所在节点    程序员
9 条回复
sarices
2018-10-17 17:33:34 +08:00
github 提供了 webhook 啊,自己写一个服务在服务器上面响应这个 webhook 就好了
sarices
2018-10-17 17:34:38 +08:00
github-webhook-handler 了解一下
daijinming
2018-10-17 17:42:03 +08:00
@sarices 哥们你说的这个有道理,我考虑是这样的一个是您说的这个方式,另外一个就是我手动运行脚本。这里我也是想大家征集下这个服务中执行的脚本该如何处理?
alixali
2018-10-17 18:00:46 +08:00
这样可能需要重新编写 docker-compose 文件,,在启动空 docker 镜像的时候执行 sh 脚本,去拉去代码并编译,然后生成新镜像。个人感觉可行,这样的话就给自己生成一大堆的中间版本镜像。
gaius
2018-10-17 18:02:50 +08:00
git pull 打包 关服务器 删应用 复制 启动服务器
cy97cool
2018-10-17 19:03:52 +08:00
提个小建议 真的有必要更新容器镜像嘛?容器挂载主机的代码目录,主机收到通知 pull 代码后直接重启容器即可
如果代码支持热重载(比如 uwsgi 的应用) 主机 docker exec 让容器重新加载即可 对业务造成的影响更小了
没必要每次都浪费时间和 CPU 去 build
daijinming
2018-10-18 10:19:36 +08:00
@cy97cool 您的这个思路我非常暂停,我也在探索如何处理处理这个问题,在 docker 这方面我还是新接触,具体如何处理还是比较费劲,如果容器仅恢复环境,代码存储在外部磁盘,比如在.net 环境下我改如何构建那?在使用 Dockerfile 创建镜像的时候,如果没有代码该如何处理,需要借助中间件吗?
daijinming
2018-10-18 17:23:56 +08:00
@cy97cool 根据您的意见我写个博文,有空看看,提点建议 https://www.jianshu.com/p/49be41782408
shylockhg
2018-10-18 17:50:29 +08:00
travis-ci

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

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

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

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

© 2021 V2EX