凌鲨开发容器架构

news2024/10/5 14:39:09

开发容器是基于docker的快速开发搭建方案,在开发容器里面集成了asdf包管理系统和code server ide服务。
这个项目是开源的。

开发容器启动流程

运行容器
docker未启动
docker已启动
镜像不存在
镜像存在
容器不存在
容器存在
通过asdf安装软件包
安装vscode插件
启动code server
检查docker是否启动
检查镜像是否存在
构建镜像
查找容器
创建容器
打开浏览器
启动失败
启动成功

构建镜像

FROM codercom/code-server
USER root

COPY sources.list /etc/apt/sources.list
RUN apt update

RUN curl -o /tmp/asdf.tgz https://file.linksaas.pro/release/asdf.tgz
RUN tar -xf /tmp/asdf.tgz -C /root/
RUN rm /tmp/asdf.tgz

COPY run.sh /usr/bin/run.sh
COPY profile.sh /etc/profile.d/asdf.sh

EXPOSE 8080
ENTRYPOINT ["/bin/bash","/usr/bin/run.sh"]

由于安装asdf和插件大多依赖github,为了防止网络问题,我们把所有的asdf插件打包并放在https://file.linksaas.pro/release/asdf.tgz上。

run.sh

这个是docker镜像容器入口,用于安装asdf包,vscode插件和启动code server。

#!/bin/bash

source /root/.asdf/asdf.sh

for pkg in $@
do
	readarray -d @ -t arr <<< $pkg
	asdf plugin add ${arr[0]} ${arr[2]}
	asdf install ${arr[0]} ${arr[1]}
	asdf global ${arr[0]} ${arr[1]}
done

IFS=';' read -ra extList <<< "${EXTENSION_LIST}"

for ext in ${extList[@]}
do
  /usr/bin/code-server --install-extension ${ext}
done

/usr/bin/code-server --auth none --bind-addr 0.0.0.0:8080 /workspace

profile.sh

我们的软件包通过asdf安装后,运行对应的命令需要asdf环境。我们把相关环境写道全局profile中。

source /root/.asdf/asdf.sh

查找容器

我们通过docker的label元数据来匹配容器,label元数据包括

属性说明
repoId=项目名称
provider=linksaas开发容器标识
serverPort服务端口
devCfg开发配置路径
repoPath本地仓库路径

创建容器

  1. 根据 devCfg 设置端口转发参数
  2. 根据 devCfg 设置环境变量
  3. 把 本地仓库路径 映射到容器的 /workspace 路径

启动容器

  1. 安装asdf软件包
  2. 安装vscode插件
  3. 启动code server服务

devCfg配置

devCfg在凌鲨配置开发环境的时候会在项目根目录下写入.simple_dev.json文件。
配置文件包含:

  • 软件包信息
  • vscode插件信息
  • 端口转发信息
  • 环境变量信息
{
  "pkg_version_list": [
    {
      "package": "golang",
      "version": "1.21.3",
      "pluginUrl": "https://github.com/asdf-community/asdf-golang.git"
    }
  ],
  "forward_port_list": [],
  "env_list": [],
  "extension_list": [
    {
      "id": "MS-CEINTL.vscode-language-pack-zh-hans",
      "display_name": "Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code",
      "desc": "Language pack extension for Chinese (Simplified)",
      "logo_url": "https://ms-ceintl.gallerycdn.azure.cn/extensions/ms-ceintl/vscode-language-pack-zh-hans/1.85.2023121309/1702459005242/Microsoft.VisualStudio.Services.Icons.Small"
    },
    {
      "id": "golang.Go",
      "display_name": "Go",
      "desc": "Rich Go language support for Visual Studio Code",
      "logo_url": "https://golang.gallerycdn.azure.cn/extensions/golang/go/0.40.0/1700159878183/Microsoft.VisualStudio.Services.Icons.Small"
    }
  ]
}

配置开发环境

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1507552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java之mybatis

准备工作 上面4步骤 XML映射文件 动态SQL

git分布式管理-头歌实验冲突处理、忽略文件

一、解决冲突 任务描述 在团队协作开发过程中&#xff0c;可能你和团队中的其他成员&#xff0c;都修改了某个文件的某一部分内容&#xff0c;且其他成员已将该修改推送到了远程仓库。这样当你需要合并他的代码的时候&#xff0c;可能就会在内容上出现冲突&#xff0c;这个时候…

vue之性能优化

1.路由懒加载 所谓路由懒加载&#xff0c;其实就是路由通过import动态引入&#xff0c;而不是在文件最上面一个个全部引入&#xff0c;因为JS执行的时候会优先执行引入的文件&#xff0c;如果一次性引入过多&#xff0c;则会增加处理时长。 2.图片懒加载 图片在网页加载过程…

【CSS】简单的抽屉面板展开收起自然过渡效果的css

目录 效果展示css固定梯形按钮至抽屉面板中间梯形按钮css过渡动画 效果展示 1.收起时点击蓝色梯形按钮展开 2. 展开时点击蓝色按钮收起 3.展开收起时需要过渡自然&#xff0c;有抽屉推拉效果 css 固定梯形按钮至抽屉面板中间 .toggle{ position: absolute;left:-21px;top…

okcc呼叫中心的客服代表应该具备哪些条件?

对每个企业管理者来说&#xff0c;选择最高效和最理想的呼叫中心提供商来简化他们的客户服务操作是一项关键工作内容。除了要确保提供商拥有处理这一重要任务所需的技术和资源之外&#xff0c;确定他们是否具备最高质量的合适人员来执行这项任务同样很重要。 客户服务代表是每…

管理 PostgreSQL 中配置参数的各种方法

管理 PostgreSQL 中配置参数的各种方法 1. 概述 PostgreSQL提供了一个配置文件 postgresql.conf 让用户自定义参数。您可能需要更改一些参数来调整性能或在工作环境中部署 PostgreSQL 服务器。在这篇博文中&#xff0c;我们将探索管理这些参数的不同方法。 2. 以不同方式管理…

mysql的索引、事务、分库分表问题

1.了解MySQL的索引吗&#xff1f;它为什么使用Btree作为底层&#xff0c;而不是其他呢&#xff1f; 这里我们要谈的是其他数据结构的缺点&#xff0c;然后说说Btree的优点&#xff0c;也就看你对MySQL的Btree与其他数据结构熟不熟悉。 Hash &#xff08;1&#xff09;Hash 索引…

Django高级之-缓存

Django高级之-缓存 一 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务…

解决QT cc1plus.exe: error: out of memory allocating

QT中增加资源文件过大时&#xff0c;会编译不过&#xff0c;报错&#xff1a; cc1plus.exe: out of memory allocating 1073745919 bytes 使用qrc资源文件&#xff0c;也就是在QT的工程中添加资源文件&#xff0c;就是添加的资源文件&#xff08;如qrc.cpp&#xff09;会直接被…

MySQl基础入门⑦

上一章知识内容 分析数据且区分数据类型 看下表分析数据的特征&#xff0c;根据其特征确定相应的数据类型。 分析以上表格特征&#xff0c;确定数据类型&#xff0c;并对数据进行分类。分析数据后按固定长度字符串、可变长度字符串、整数、固定精度小数和日期时间数据类型对数…

Find My游戏机|苹果Find My技术与游戏机结合,智能防丢,全球定位

游戏机&#xff0c;又名电子游乐器是使用游戏软件进行玩乐的机器。依照进行游戏的方式的不同&#xff0c;又分为家用游戏机及掌上游戏机。游戏机也可以说是属于电脑的一种&#xff0c;电子游戏机针对影像、音效与操作机能进行特别的强化&#xff0c;也有各种的软件和硬件可供安…

第108讲:Mycat实践指南:枚举分片下的水平分表详解

文章目录 1.枚举分片的概念2.水平分表枚举分片案例2.1.准备测试的表结构2.2.配置Mycat实现枚举分片的水平分表2.2.1.配置Schema配置文件2.2.2.配置Rule分片规则配置文件2.2.3.配置Server配置文件2.2.4.重启Mycat 2.3.写入数据观察水平分表效果 1.枚举分片的概念 枚举分片是根据…

物联网智慧大屏

随着物联网技术的飞速发展&#xff0c;物联网智慧大屏已经成为企业数字化转型的关键组件。那么&#xff0c;什么是物联网智慧大屏&#xff1f;它为企业带来了哪些价值&#xff1f;让我们一起来探索。 一、什么是物联网智慧大屏&#xff1f; 物联网智慧大屏&#xff0c;作为物联…

css flex 布局换行

默认使用display: flex;是不换行的&#xff0c;只需要加上flex-wrap: wrap;就行了&#xff0c;效果图 .app-center {display: flex;flex-wrap: wrap;justify-content:flex-start; } 通过上面我们发现虽然时间换行了&#xff0c;但是每行的边距不一样 加上这个就行了&#xff…

国创证券今日投资参考:金价持续走高 半导体迎新一轮上升周期

上周五&#xff0c;两市股指早盘止跌回升&#xff0c;午后强势上扬&#xff0c;深成指、创业板指、科创50指数盘中均涨超1%&#xff1b;截至收盘&#xff0c;沪指涨0.62%报3046.02点&#xff0c;深成指涨1.1%报9369.05点&#xff0c;创业板指涨0.97%报1807.29点&#xff0c;科创…

【牛客】VL68 同步FIFO

描述 请设计带有空满信号的同步FIFO&#xff0c;FIFO的深度和宽度可配置。双口RAM的参考代码和接口信号已给出&#xff0c;请在答案中添加并例化此部分代码。 电路的接口如下图所示。端口说明如下表。 接口电路图如下&#xff1a; 双口RAM端口说明&#xff1a; 端口名I/O描述…

使用IDEA远程Debug调试

文章目录 背景配置IDEA设置启动脚本改造 细节细节1&#xff1a;停在本地断点&#xff0c;关闭程序后会继续执行吗?细节2&#xff1a;jar包代码和本地不一致会怎么样&#xff1f;细节3&#xff1a;日志打印在哪里&#xff1f;细节4&#xff1a;调试时其他人会不会卡住&#xff…

【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别

文章目录 0. 前言1. 级联神经网络介绍2. MTCNN介绍2.1 MTCNN提出背景2.2 MTCNN结构 3. MTCNN PyTorch实战3.1 facenet_pytorch库中的MTCNN3.2 识别图像数据3.3 人脸识别3.4 关键点定位 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff…

Android将自己写的maven库上传至jitpack(2024靠谱版)

浏览了一堆陈年旧贴&#xff0c;终于实验成功了 第一步 将自建空项目同步至github并保证能正常运行第二步新增一个library类型的modul第三步 在新建的library里面写一些测试用的代码第四步在library的gradle文件增加插件和发布脚本第五步新建一个配置文件第六步 把所有更改push…