起因
笔者早已对能够实现开箱即用、体验与本地开发并无多大区别的web IDE 好奇不已,想要自己搭建一个快速切换开发环境的应用。一开始的想法是通过切换云服务器的镜像来实现,但此方法过于繁琐,每次切换都需要消耗大量的时间,且实际上并不需要更换操作系统,不够优雅,遂放弃。最近开始使用vs code + remote ssh 进行远程开发,remote ssh 的效果相当不错,而快速切换开发环境可以通过不同的docker 镜像来实现。但我云服务器的使用时间已经所剩无几,且服务器包年对于学生来说,花销着实不小。在了解到eci之后,想要尝试通过vs code 远程连接eci 来实现远程开发。
经过
创建 eci 容器及容器组
使用eci 的第一步即为创建 eci 容器及容器组,容器组包含一个或多个容器,创建 eci 时只能以容器组为单位。实际上一个容器组是由一个特定规格的 ecs 来作为宿主机的,因此容器的总资源规格只能小于等于容器组选定的ecs资源。具体操作步骤如官方教程所示,值得注意的是 eci 具有生命周期的概念,一旦运行状态变为 succeed ,容器占有的资源将会被释放,无法重新启动该容器。
挂载OSS
在创建 eci 容器时有通过 oss 持久化存储的选项,但在实际操作过程中,发现即便创建了具有所需的权限的角色,在网页上创建 eci 时仍然无法刷新出该角色,怀疑只能通过 open API 进行 k8s 设置时才能成功。 使用已有ip时也存在类似的问题,即便已经存在ip,也无法在页面刷新出该选项。
连接容器
对我来说最关键的一步就在此处,仅能通过 workbench 远程连接进入容器(如果能够ssh连接到宿主机那就是另外的价了,哈哈哈)。由于 容器 本身只有一个进程的限制,无法在进入容器后开启 sshd 建立 ssh 连接,且无法将 sshd 直接设为启动命令,这将导致 容器 无法正常运行,进入终止状态。
后续仔细思考后得出结论,ssh 首先需要通过 ip 与宿主机建立连接,但显然阿里云不可能提供ssh连接到宿主机的方式,那相当于 ecs 了。而且宿主机到容器之间存在端口映射,不可能直接通过 ssh 连接容器。
结论
在颇费一番周折后,发现 vs code 远程开发的前提条件 ssh 连接都无法实现,本方案从一开始就注定失败,容器服务虽然能够实现随心所欲变换开发环境,但无法提供 ssh 连接,无法实现远程开发,而ecs 虽然能够实现远程开发,但价格较贵且无法快速切换开发环境,ecs 开启容器服务虽然能够实现目的,但还是得借助价格不菲的 ecs …… 希望有一天介于 eci 和 ecs 的中间产物能够出现。
补充
之前被vs code 影响了思绪,实际上,不一定非要通过 vs code ssh 连接容器。可以考虑在容器中部署 code server ,直接在浏览器中访问,也能实现相同的效果!!!我觉得值得一试。