分享一下自己将容器作为开发环境的方案

2022-06-27 22:46:44 +08:00
 huntzhan

在过去几年中我需要在不同的机器上开发 Python 项目、训练模型(主要基于 torch cuda ),为了解决环境、依赖、工具差异,提升干活效率,于是自己封一个专门用于 Python 开发的 docker 镜像。在此分享给大家

典型的使用场景:

传送门: https://github.com/vkit-x/wden

5070 次点击
所在节点    分享创造
22 条回复
liushuigs
2022-06-27 22:53:57 +08:00
要是能支持 web 端编程就牛逼了。可以了解下这个: https://github.com/pyscript/pyscript
huntzhan
2022-06-27 22:55:15 +08:00
@liushuigs 绝大部分的配置是与 Python 无关的,完全可以装上 web 端编程的工具链与插件
yazoox
2022-06-27 23:44:29 +08:00
“容器内部已经装好常见 python 插件”什么意思?这个插件是 vscode 的? vscode 不是远程 ssh 进入的么?
moeik
2022-06-28 00:01:12 +08:00
huntzhan
2022-06-28 00:02:22 +08:00
@yazoox 指 vscode 插件,vscode ssh 登陆后会检测远端机器的 code-server 有没有装,如果没有装会自动装上,然后才能在远端装 vscode 插件。先装好,这样就不用每次都从头开始,毕竟 code server + vscode python 插件加起来 500 多 M 。见 https://github.com/vkit-x/wden/blob/ac6a2d0af78e03bcc16ae5aaed942b699639453c/build/install_openssh_server.sh#L21-L39
junnplus
2022-06-28 00:12:44 +08:00
https://github.com/tensorchord/envd 和这个项目好像有点类似
huntzhan
2022-06-28 00:58:34 +08:00
@junnplus 这个项目之前看过,当时试了一下解决不了我的问题,所以才选择自己封装

其一,envd 的 build 对于我来说没什么用,因为依赖管理我是基于 python package 机制做的(这也是最佳工程实践),不需要 envd 来接管

其二是 envd 作为一个 DSL 灵活程度有限,比如就解决不了我想要自动常驻一个 screen daemon session 的需求,而写 Bash 也不是那么难的事情(确实需要多试错)

其三,上生产环境离不开手写 Dockerfile ,所以干脆一并弄了
gaocegege
2022-06-28 13:02:20 +08:00
@huntzhan 你好,想问问什么是 python package 机制?指的是用 conda env.yaml 或者 python requirements.txt 这样的方式么?
huntzhan
2022-06-28 13:18:38 +08:00
ruanimal
2022-06-29 09:59:11 +08:00
hunt 哥还是这么顶
yucongo
2022-06-30 09:21:09 +08:00
试试 okteto ,可能正是你想要的
molezznet
2022-06-30 12:58:28 +08:00
这类用 lxd 构建管理是不是比 docker 有点优势?
huntzhan
2022-06-30 23:47:29 +08:00
@yucongo 感谢,我研究一下
huntzhan
2022-06-30 23:47:36 +08:00
@molezz765 感谢,我研究一下
codehz
2022-07-02 18:46:39 +08:00
说起来 vscode 不是有原生容器连接支持?可能不需要 ssh 来一下)
huntzhan
2022-07-03 18:12:21 +08:00
@codehz 你指的应该是 `[Visual Studio Code Remote - Containers]( https://code.visualstudio.com/docs/remote/create-dev-container)` 吧?还是要的,有跑在远程机器上的场景
codehz
2022-07-03 18:18:10 +08:00
huntzhan
2022-07-03 18:54:45 +08:00
@codehz 嗯,不冲突

你刚刚发的这个链接( https://code.visualstudio.com/docs/containers/ssh ),主要讲的是如何在 client side 配置 ssh ,我做的实际上更多的是整体体验,比如保证 container ssh host key 的不变性( https://github.com/vkit-x/wden/blob/f6b8b07961a97371fad4f291e5b75fd7ae28e3f9/build/install_openssh_server.sh#L10 )这样每次 login 不需要手动 trust host (加入 ~/.ssh/known_hosts )。

解决一个问题的方法多种多样,我只是分享了我的解决方案,只能说这种方案比较符合我的习惯,并不一定适合所有人
codehz
2022-07-03 19:03:00 +08:00
@huntzhan 主要是,如果不在容器内安装 ssh ,即直接在远程主机上,就消除了 host key 可变的可能性(
不过确实,容器内还有其他开发环境需要配置(比如远程 vscode 的安装),我只是提供了一个解决 ssh 问题的另一个方向(
huntzhan
2022-07-03 20:10:40 +08:00
@codehz 即使是 vscode dev container ,我猜测内部应该也是装了 openssh server 的, 只不过安装、配置、client 的连接是 vscode 常见帮你处理好了。vscode 对于我并不是强绑定,对于我个人大多数的使用场景是 ssh remote 去远端 gpu 机器执行长耗时任务,有时才是 vscode ssh remote 过去改配置、代码

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

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

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

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

© 2021 V2EX