如何在工作站主机上使用自定义 Eclipse Che 堆栈?

2024-02-01

我想知道在工作站上运行 Che 时使用自定义 Eclipse Che 堆栈的便捷方法是什么。

我非常喜欢 Eclipse Che 的概念:为不同的开发环境提供单独的 Che 工作区(Docker 容器),并安装相应的工具。工作区是从 Che 堆栈初始化的。堆栈可以定义为 Docker 映像,也可以使用 Dockerfile 或 Docker Composer 文件动态创建。

我想实现什么目标:

  • [done]我的工作站上安装了 Eclipse Che
  • [done]能够使用 Dockerfile 语法或本地 Docker 映像创建我自己的自定义堆栈(映像位于我的工作站上,而不是在 Docker 存储库中)
  • [done]能够轻松地重新启动/关闭我的工作站
  • [done]有合理的工作区启动时间

我已经尝试过:

1.通过配方定义堆栈(Dockerfile)

  1. 我出于测试目的编写了自定义 Dockerfile:

    FROM eclipse/stack-base:ubuntu
    
    RUN sudo apt-get update
    RUN sudo apt-get install -y apt-transport-https
    
    RUN sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
    RUN echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
    
    RUN curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
    
    RUN sudo apt-get install -y nodejs build-essential mongodb-org
    
    RUN sudo apt-get clean
    RUN sudo apt-get -y autoremove
    RUN sudo apt-get -y clean
    RUN sudo rm -rf /var/lib/apt/lists/*
    

    它基于eclipse/stack-base:ubuntu图像中建议的那样docs https://www.eclipse.org/che/docs/devops/runtime-recipes/index.html#inherit-from-an-eclipse-che-base-image

  2. 然后我使用创建了 Che 堆栈从配方构建堆栈.

  3. 之后我基于这个堆栈创建了一个工作区,它运行正常。

这种方法有一个显着的缺点:重新启动我的工作站后,Che 从 Dockerfile 重建工作区!只要 Dockerfile 包含安装命令,该过程就会花费大量时间,并且显然需要互联网连接。

2.基于本地Docker镜像的堆栈

  1. 我使用自定义 Dockerfile 在本地构建 docker 映像:

    sudo docker build -f custom.dockerfile -t my-custom-image .

  2. 然后我创建了两个具有以下配置的 Che 堆栈:

    {
      "scope": "general",
      "description": "Custom1",
      "tags": [],
      "workspaceConfig": {
        "environments": {
          "default": {
            "recipe": {
              "contentType": "text/x-dockerfile",
              "type": "dockerfile",
              "content": "FROM my-custom-image\n"
            },
            "machines": {
              "dev-machine": {
                "servers": {},
                "agents": [
                  "org.eclipse.che.ws-agent",
                  "org.eclipse.che.ssh",
                  "org.eclipse.che.terminal",
                  "org.eclipse.che.exec"
                ],
                "attributes": {
                  "memoryLimitBytes": "2147483648"
                }
              }
            }
          }
        },
        "defaultEnv": "default",
        "commands": [],
        "projects": [],
        "name": "default",
        "links": []
      },
      "components": [],
      "creator": "che",
      "name": "my-custom-1",
      "id": "stackx6hs410a9awhu299"
    }
    
    {
      "scope": "general",
      "description": "Custom2",
      "tags": [],
      "workspaceConfig": {
        "environments": {
          "default": {
            "recipe": {
              "contentType": "application/x-yaml",
              "type": "compose",
              "content": "services:\n dev-machine:\n  image: my-custom-image\n"
            },
            "machines": {
              "dev-machine": {
                "servers": {},
                "agents": [
                  "org.eclipse.che.exec",
                  "org.eclipse.che.terminal",
                  "org.eclipse.che.ws-agent",
                  "org.eclipse.che.ssh"
                ],
                "attributes": {
                  "memoryLimitBytes": "2147483648"
                }
              }
            }
          }
        },
        "defaultEnv": "default",
        "commands": [],
        "projects": [],
        "name": "custom",
        "links": []
      },
      "components": [],
      "creator": "che",
      "name": "my-custom-2",
      "id": "stack55s3tso56cljsf30"
    }
    
  3. 基于这些堆栈的工作空间无法创建,并出现错误:

    Could not start workspace my-custom-1. Reason: Start of environment 'default' failed. Error: Docker image build failed. Image id not found in build output.

    Could not start workspace my-custom-2. Reason: Start of environment 'default' failed. Error: Can't create machine from image. Cause: Error response from docker API, status: 404, message: repository my-node-mongo not found: does not exist or no pull access

Che 似乎在我的工作站上看不到 Docker 镜像。

所以问题是:有什么办法可以和Che一起实现我的目标吗?或者 Che 不是适合我的工具?

Update 1

3.设置本地docker注册表(https://docs.docker.com/registry/ https://docs.docker.com/registry/)

  1. 设置本地 docker 注册表:https://docs.docker.com/registry/deploying/ https://docs.docker.com/registry/deploying/

  2. 使用 Dockerfile 构建自定义镜像

    sudo docker build -f custom.dockerfile -t my-custom-image .

  3. 标记它并将其推送到本地注册表

    sudo docker tag my-custom-image localhost:5000/my-custom-image
    sudo docker push localhost:5000/my-custom-image
    
  4. 使用图像创建自定义堆栈localhost:5000/my-custom-image

这种方法有效,但有一定的局限性缺点:需要维护docker注册表.

无论如何,它有效,我可以在我的愿望清单中勾选两个复选框。


如果要使用本地镜像,请设置CHE_DOCKER_ALWAYS__PULL__IMAGE=false在你的 che.env 中并重新启动 Che。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在工作站主机上使用自定义 Eclipse Che 堆栈? 的相关文章

  • 通过 XSD 限制基于另一个元素的 XML 元素

    我相信这与keyref但我不确定 我真的不确定它是否可以做到 例如 假设我有 myElement1 和 myElement2 如果 XML 文件中没有 myElement2 则 myElement1 必须存在 否则是可选的 有没有办法在我的
  • 使所选项目适合一行,而不是两行

    我有一个非常简单的选择 当我单击菜单时 它会显示 3 个选项 每个选项都在一行上 但是 当我选择一个项目时 它会显示为 2 行 第一行用于文本 另一行用于图标 我该如何使它成为一根线 import styles css import Edi
  • 使用 SqlCommand.Parameters.AddWithValue 时是否应该包含 @?

    在使用 AddWithValue 时 我总是在参数名称中包含 at 符号 但我只是注意到其他人编写的一些代码没有使用它 一种方法比另一种方法更正确吗 cmd Parameters AddWithValue ixCustomer ixCust
  • 在 Snow Leopard 上运行 iPhone 5 模拟器

    我正在我的 mac 上运行 iOS6 SDK 在 Snow Leopard 上运行 Xcode 4 2 使用以下步骤堆栈溢出帖子 https stackoverflow com questions 9613565 is it possibl
  • LINQ 到 XYZ 多态性?

    我遇到过这样的情况 客户要求我们实现数据访问代码 以根据运行时配置设置使用 Oracle 或 SQL Server 数据库 生产环境使用 Oracle 但开发和 QA 都针对 SQL Server 实例运行 我对此没有任何控制权 也没有任何
  • 如何使用Java 8流遍历多个列表?

    我有三份清单 List
  • 如何开始学习android框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 QtCreator 中分​​析 PySide2 + QML?

    我有一个 PySide2 应用程序 它使用 QML 来显示用户界面 该应用程序通过命令行运行 我还可以启动它并在 QtCreator 中调试它 但是 当我尝试运行 QmlProfiler 时 我看到以下错误 1 error home use
  • 从使用中的相机拍照

    如何从正在使用的前置摄像头拍照而不在屏幕上显示摄像头 我有服务舱 public class PhotoTakingService extends Service Camera variables a surface holder priva
  • 如何修改 TDataSetProvider.OnUpdateData 中的字段值

    阅读有关 TDataSetProvider OnUpdateData 的 Delphi 帮助文件后 事件说明 检查数据 例如 不允许的值或数据更改 并引发异常 在更新发生之前取消应用 在将数据发送到源数据集或数据库服务器之前更改数据 例如加
  • 更改 Material UI 中的 TextField 字体颜色?

    我目前正在使用材质用户界面 https mui com 我在尝试更改多行的字体颜色时遇到问题TextField
  • 如何在 iOS 设备上运行 .app [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有应用程序的 app 文件 我有 mac 和 iPhone 但没有安装 Xcode 如何在没有 Xcode 的情况下在 iPhone 上
  • 无法安装 SQL Server (setup.exe)

    我在笔记本电脑上使用了 SQL Server 2019 Express 版本 但我卸载了 现在我尝试安装 SQL Server 2019 Developer Edition 但出现错误 退出代码 十进制 2068119551 退出消息 找不
  • 使用 PostGIS 围绕线串创建多边形

    我是 PostGIS 新手 需要在这里寻求一些帮助 我有一条来自谷歌地图的折线 代表行程 需要在其周围构建一个具有特定距离 以米或公里为单位 的多边形 缓冲区 对于输入 我有纬度 经度点列表和所需的缓冲距离 任何人都可以帮助我构建查询 以便
  • 在我的网站中使用 PHPBB2 登录凭据

    我目前正在使用 PHPBB2 论坛作为我网站之一的一部分 并且我想扩展该网站 添加新页面 脚本等 我想将对这些页面的访问限制为已登录 PHPBB2 论坛的用户 事实上 如果只有某个 MemberGroup 的成员可以访问这些页面 那就太好了
  • 是否可以检测弹窗中的用户点击事件?

    如果当前 url 和弹出 url 位于同一域中 我可以使用以下代码检测弹出窗口中的用户单击事件 var myWindow window open abc html MsgWindow width 500 height 600 myWindo
  • 在 BST 中寻找 k 个后继者的时间复杂度

    给定高度的二叉搜索树 BST h 需要O k h 时间来应用BST InOrder Successor 算法 https stackoverflow com a 5471990 5459839 k连续多次 从任何节点开始 将每个下一个调用应
  • Python创建字典键路径类似于mkdir -p

    假设我们有一个从 json 解析出来的字典 并且我们以键路径的形式从键中读取值path to my keys my dict path to my keys 在文件系统中我们有mkdir p如果不存在则创建这样的路径 在Python中 我们
  • 来自 iCal Feed URL 的活动在 Google 日历中显示为“忙碌”

    我正在尝试在 Google 日历中查看我的系统生成的 ical 格式的日历源 我通过 Google 日历 其他日历 下拉菜单中的 按 URL 添加 功能来执行此操作 并将 URL 提供给动态生成的 ics ical 文件 Google 日历

随机推荐