如果我有一个应用是由三个容器构成的,这个应用要交给客户部署的。这种场景对外发布应用的话就是直接把镜像交给客户吗?后期应用升级该怎么做呢,发布新的镜像吗?不知道业界的主流实践是什么样的。
本人刚接触微服务的概念,说的不对的请指教哈。要是推荐一些入门的书就更好了。🙏
1
timethinker 2021-05-10 18:47:47 +08:00 1
你这个问题其实这个跟微服务没啥关系,跟容器也没有太大的关系,想想没有容器之前我们是怎么交付软件的?有了容器之后区别在哪里?
1 、当你发布的新的镜像,里面包含了最新的代码,那么客户升级的时候必然会拉取这个镜像并启动该镜像的容器。 2 、启动容器的时候,以前的容器如果同时运行,此时适当的切换流量至最新的容器内,如果没有问题,旧容器就可以停止了。 3 、如果不允许同时启动两个不同版本的容器,那么必然要停掉之前的,再启动新的(例如版本迁移,数据结构更改)。 所以这里没有什么神奇的地方,对于不兼容的升级,该停机还是得停机,否则迁移成本太高(你得同时维护新老版本的数据兼容、API 变更等等)。 |
2
wheeler OP |
3
timethinker 2021-05-10 19:22:32 +08:00
这个需求可不简单了,毕竟涉及到的东西比较多,可能你需要透过容器调用 Docker 引擎的 API 来实现,这样做就跟你的部署配置耦合了,意味着你需要管理 Docker 的镜像以及容器。
Docker 引擎 API 文档: https://docs.docker.com/engine/api/v1.41/ 可以使用 alpine/socat 这个容器将 Docker 的 unix socket 映射为一个可以请求的端口地址 ,加入到跟应用同一个 docker 网络中进行调用,这样你的服务就可以通过一个 HTTP 客户端来请求 Docker 引擎了。 |
4
wheeler OP @qwe520liao 是的。总感觉明明都用 docker 了,结果升级安装的时候还想隐藏细节的想法很怪异。
|