V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
huntzhan
V2EX  ›  分享创造

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

  •  
  •   huntzhan ·
    huntzhan · 2022-06-27 22:46:44 +08:00 · 5414 次点击
    这是一个创建于 889 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    典型的使用场景:

    • 本地 docker run 跑起来一个独立容器环境,自动帮我配好 bash ,处理好挂载文件路径权限,处理好好 SSH agent forwarding 等常见开发问题。然后命令行测试
    • 本地 /远端跑起来一个容器,然后 ssh 过去执行一些耗时较长的任务(比如训练模型)。ssh 过去后会自动进入 sreen session (这样不需要考虑什么 nohup &),且 bash 也已经配好
    • 本地 /远端跑起来一个容器,然后 vscode ssh remote 过去,容器内部已经装好常见 Python 插件,且 bash 也已配好

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

    第 1 条附言  ·  2022-06-29 00:37:38 +08:00

    感觉昨天的简介有些意思没有表达清楚,刚刚更新了一下简介

    Goals

    • Attempt to provide an out-of-the-box experience to use docker container as the development environment, especially for Python developer, ML/DL engineer & researcher.
    • Setup a project boilerplate that is easy to understand. User with bash scripting and docker experience should be able to modify or extend the current codebase within 10 mins. While this project ships with the Python toolchain, most of the setup is not bound to Python, but instead is related to development experience (see the Usage session). Hence this project could be extend to support variant scope development.
    22 条回复    2022-07-03 20:27:11 +08:00
    liushuigs
        1
    liushuigs  
       2022-06-27 22:53:57 +08:00
    要是能支持 web 端编程就牛逼了。可以了解下这个: https://github.com/pyscript/pyscript
    huntzhan
        2
    huntzhan  
    OP
       2022-06-27 22:55:15 +08:00
    @liushuigs 绝大部分的配置是与 Python 无关的,完全可以装上 web 端编程的工具链与插件
    yazoox
        3
    yazoox  
       2022-06-27 23:44:29 +08:00 via Android
    “容器内部已经装好常见 python 插件”什么意思?这个插件是 vscode 的? vscode 不是远程 ssh 进入的么?
    moeik
        4
    moeik  
       2022-06-28 00:01:12 +08:00
    huntzhan
        5
    huntzhan  
    OP
       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
        6
    junnplus  
       2022-06-28 00:12:44 +08:00
    https://github.com/tensorchord/envd 和这个项目好像有点类似
    huntzhan
        7
    huntzhan  
    OP
       2022-06-28 00:58:34 +08:00
    @junnplus 这个项目之前看过,当时试了一下解决不了我的问题,所以才选择自己封装

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

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

    其三,上生产环境离不开手写 Dockerfile ,所以干脆一并弄了
    gaocegege
        8
    gaocegege  
       2022-06-28 13:02:20 +08:00
    @huntzhan 你好,想问问什么是 python package 机制?指的是用 conda env.yaml 或者 python requirements.txt 这样的方式么?
    ruanimal
        10
    ruanimal  
       2022-06-29 09:59:11 +08:00
    hunt 哥还是这么顶
    yucongo
        11
    yucongo  
       2022-06-30 09:21:09 +08:00 via Android
    试试 okteto ,可能正是你想要的
    molezznet
        12
    molezznet  
       2022-06-30 12:58:28 +08:00
    这类用 lxd 构建管理是不是比 docker 有点优势?
    huntzhan
        13
    huntzhan  
    OP
       2022-06-30 23:47:29 +08:00
    @yucongo 感谢,我研究一下
    huntzhan
        14
    huntzhan  
    OP
       2022-06-30 23:47:36 +08:00
    @molezz765 感谢,我研究一下
    codehz
        15
    codehz  
       2022-07-02 18:46:39 +08:00 via iPhone
    说起来 vscode 不是有原生容器连接支持?可能不需要 ssh 来一下)
    huntzhan
        16
    huntzhan  
    OP
       2022-07-03 18:12:21 +08:00
    @codehz 你指的应该是 `[Visual Studio Code Remote - Containers]( https://code.visualstudio.com/docs/remote/create-dev-container)` 吧?还是要的,有跑在远程机器上的场景
    codehz
        17
    codehz  
       2022-07-03 18:18:10 +08:00 via iPhone
    huntzhan
        18
    huntzhan  
    OP
       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
        19
    codehz  
       2022-07-03 19:03:00 +08:00
    @huntzhan 主要是,如果不在容器内安装 ssh ,即直接在远程主机上,就消除了 host key 可变的可能性(
    不过确实,容器内还有其他开发环境需要配置(比如远程 vscode 的安装),我只是提供了一个解决 ssh 问题的另一个方向(
    huntzhan
        20
    huntzhan  
    OP
       2022-07-03 20:10:40 +08:00
    @codehz 即使是 vscode dev container ,我猜测内部应该也是装了 openssh server 的, 只不过安装、配置、client 的连接是 vscode 常见帮你处理好了。vscode 对于我并不是强绑定,对于我个人大多数的使用场景是 ssh remote 去远端 gpu 机器执行长耗时任务,有时才是 vscode ssh remote 过去改配置、代码
    codehz
        21
    codehz  
       2022-07-03 20:16:15 +08:00
    @huntzhan (没有的,走的是 docker 内置的通讯方式((开一个 unix socket 挂载共享进去(
    huntzhan
        22
    huntzhan  
    OP
       2022-07-03 20:27:11 +08:00
    @codehz 有趣,有空研究一下。不过如果是 docker context ,感觉不太合适,毕竟每一台新机器都要配一次,不如直接 ssh 过去
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4718 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 01:05 · PVG 09:05 · LAX 17:05 · JFK 20:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.