10.云原生之在线开发调试

云原生专栏大纲

文章目录

  • vscode-server介绍
  • VSCode Server 和云开发结合
  • vscode-server安装
  • code-server安装插件
    • 在线安装插件
    • 离线安装插件
    • 安装中文插件
  • 配置开发环境
    • 在容器中安装开放环境
    • Dockerfile制作镜像
  • git拉取项目

vscode-server介绍

VSCode Server(Visual Studio Code Server)是一个基于 Visual Studio Code 的远程开发解决方案。它允许你在远程服务器或容器中运行 VSCode,并通过浏览器或本地的 VSCode 客户端与之进行交互。简单总结是web版本VSCode。
VSCode Server 的工作原理是将 VSCode 的核心功能作为一个服务运行在远程环境中,而不是在本地机器上。通过与远程服务器建立连接,你可以在本地机器上的浏览器中打开 VSCode 界面,并像在本地运行 VSCode 一样进行代码编辑、调试和扩展安装等操作。
使用 VSCode Server 的好处包括:

  1. 资源隔离:你可以在远程服务器或容器中运行 VSCode,从而将开发环境与本地机器分离。这对于资源有限或需要特定环境的开发任务非常有用。
  2. 协作与共享:多个开发者可以同时连接到同一个远程 VSCode 实例,实现协同编辑和调试。这对于团队协作和知识共享非常有帮助。
  3. 跨平台支持:由于 VSCode Server 是通过浏览器访问的,因此可以在不同的操作系统上使用,包括 Windows、macOS 和 Linux。
  4. 扩展支持:VSCode Server 支持大多数 VSCode 扩展,你可以在远程环境中安装和使用你喜欢的扩展,以提供更丰富的开发体验。

要使用 VSCode Server,你需要在远程服务器或容器中安装并运行 VSCode Server,并通过浏览器访问它。可以使用 VSCode 客户端或者使用 VSCode 的 Remote Development 扩展来连接到远程 VSCode Server。
总而言之,VSCode Server 提供了一种灵活的远程开发解决方案,让你可以在远程环境中使用 VSCode 的强大功能,提高开发效率和协作能力。

VSCode Server 和云开发结合

VSCode Server 和云开发结合使用可以带来许多好处,下面是一些主要的好处:

  1. 灵活的开发环境: 云开发提供了弹性和可扩展的计算资源,使你能够根据需要创建和管理开发环境。通过在云上运行 VSCode Server,你可以随时随地使用浏览器访问你的开发环境,无需依赖特定的本地机器或配置。
  2. 资源隔离和共享: 在云上运行 VSCode Server 可以将开发环境与本地机器分离,这意味着你可以利用云提供的强大计算资源,而不会受限于本地机器的性能或存储容量。此外,多个开发者可以同时连接到同一个云上的 VSCode Server 实例,实现协同编辑和调试,促进团队协作和知识共享。
  3. 跨平台支持: 云开发平台通常支持多种操作系统,包括 Windows、macOS 和 Linux。这意味着你可以在不同的操作系统上使用浏览器访问云上的 VSCode Server,无需担心本地机器的兼容性问题。
  4. 数据安全和持久性: 在云上运行 VSCode Server 可以确保你的代码和开发环境的数据得到安全保护和持久化存储。云提供了备份、灾难恢复和数据安全性的机制,可以保障你的开发环境和数据的安全。
  5. 强大的扩展支持: VSCode Server 支持大多数 VSCode 扩展,你可以在云上的开发环境中安装和使用你喜欢的扩展,以提供更丰富的开发体验。这使得你可以根据项目需求自定义你的开发环境,并使用适合你的工作流程的工具和扩展。

总的来说,将 VSCode Server 和云开发结合使用可以提供灵活、可扩展和安全的开发环境,使你能够随时随地进行开发,并与团队成员共享和协作。这种组合可以提高开发效率、降低开发成本,并为你的项目提供更好的可管理性和可靠性。

vscode-server安装

linuxserver/code-server

version: "2.1"
services:code-server:image: lscr.io/linuxserver/code-server:latestcontainer_name: code-serverenvironment:- PUID=1000- PGID=1000- TZ=Etc/UTC- PASSWORD=password #optional- HASHED_PASSWORD= #optional- SUDO_PASSWORD=password #optional- SUDO_PASSWORD_HASH= #optional- PROXY_DOMAIN=code-server.my.domain #optional- DEFAULT_WORKSPACE=/config/workspace #optionalvolumes:- /path/to/appdata/config:/configports:- 8443:8443- 30000-39000:30000-39000restart: unless-stopped

建议此处预制一些端口,开发中可能会用到,如开发java项目远程debug等

参数功能
-p 8443Web 图形用户界面
-e PUID=1000对于用户 ID - 请参阅下面的说明
-e PGID=1000对于 GroupID - 请参阅下面的说明
-e TZ=Etc/UTC指定要使用的时区,请参阅此列表
-e PASSWORD=password可选的 web gui 密码,如果提供或未提供,则不会进行身份验证。PASSWORDHASHED_PASSWORD
-e HASHED_PASSWORD=可选的 web gui 密码、覆盖、有关如何创建它的说明如下。PASSWORD
-e SUDO_PASSWORD=password如果设置了此可选变量,则用户将具有使用指定密码在代码服务器终端中具有 sudo 访问权限。
-e SUDO_PASSWORD_HASH=(可选)通过哈希设置 sudo 密码(优先于 var)。格式为 .SUDO_PASSWORD t y p e type typesalt$hashed
-e PROXY_DOMAIN=code-server.my.domain如果设置了此可选变量,则将代理此域以进行子域代理。查看文档
-e DEFAULT_WORKSPACE=/config/workspace如果设置了此可选变量,则 code-server 将默认打开此目录
-v /config包含所有相关的配置文件。插件在config\extensions下

浏览器方式 http://ip:8443
image.png

code-server安装插件

在线安装插件

点击左侧菜单扩展->搜索插件名称->点击安装
image.png

离线安装插件

若是遇到在线安装插件失败的情况(网络原因),需要离线安装

  1. 确定安装的vscode-server版本

image.png

  1. 插件市场下载对应版本插件,插件市场:Visual Studio Marketplace
  2. 如搜索chinese安装中文插件

image.png

  1. 选择插件版本下载

image.png

  1. 点击拓展按钮➡点击右上角三个点···➡点击install from vsix

image.png
点击后展示如下,其中搜索框为容器中的文件系统路径
image.png

  1. 通过Xftp工具将下载插件上传到服务器挂载的容器路径下,点击安装即可

image.png

安装中文插件

image.png

配置开发环境

注意:安装vscode-server默认安装git,个人推荐在容器中安装开放环境重新打包docker镜像,原因很简单有一些环境或者插件在开发过程中才察觉到进行安装,此时重新打包镜像就好,等逐步完善了在重新制作Dockerfile
下载jdk和maven安装包 jdk官网下载 maven官网下载

在容器中安装开放环境

vs-code的java扩展需要jdk-11以上,而我们很多项目还停留在古老的jdk-8,所以需要两个都安装,启动vs-code使用11,编译运行项目使用jdk8.

  1. docker以root身份进入容器
docker exec -it --user root <container_id> /bin/bash
  1. 在容器内部安装jdk、Maven等,建议下载安装包离线安装(挂载好管理)
# 容器在线安装
sudo apt update
sudo apt install openjdk-11-jdk
sudo apt install openjdk-8-jdk
sudo apt install openjdk-17-jdk
java -versionsudo apt install maven
mvn --versionsudo apt install nodejs npm
node --version
npm --version
  1. 离线安装jdk并配置环境变量
# 要将宿主机文件上传到Docker容器中,离线安装放在/opt目录下
docker cp <宿主机文件路径> <容器名称或ID>:<容器内目标路径>
#解压
tar -zxvf jdk-11.0.11_linux-x64_bin.tar.gz# # 设置环境变量,Ctrl + O保存 |  Ctrl + x退出
sudo nano /etc/profile
#文件增加如下代码
JAVA_HOME=/opt/jdk-11.0.21
export PATH=${JAVA_HOME}/bin:$PATH# 执行命令重新生效
. /etc/profile#查看java版本
java -version
  1. 离线安装maven
# 下载
http://maven.apache.org/download.cgi
# 解压
tar zxvf apache-maven-3.9.6-bin.tar.gz# 设置环境变量,Ctrl + O保存 |  Ctrl + x退出
sudo nano /etc/profile
# 添加如下配置
MAVEN=/opt/apache-maven-3.9.6
export PATH=${JAVA_HOME}/bin:${MAVEN}/bin:$PATH# 配置文件生效
. /etc/profile# 验证
mvn -v
  1. 浏览器中访问vscode 验证环境

image.png

  1. 修改maven配置
nano  /usr/share/maven/conf/settings.xml
# 根据自身情况修改,/usr/share/maven映射的/etc/maven
# 建议将/usr/share/maven/conf/settings.xml挂载出去
# 建议将settings.xml中localRepository私有仓库路径修改到挂载路径下
  1. 将容器重新打包为docker镜像
# 停止容器
docker stop <容器名称或容器ID>
# 容器打包镜像
docker commit <容器名称或容器ID> <新镜像名称>
# docker commit 命令只会将容器的文件系统快照保存为一个新的镜像,并不包括容器的数据卷或其他持久化数据
# 所有/config下文件不会打包到镜像中,需挂载出来持久存储

在使用 docker commit 命令创建镜像时,文件系统指的是容器的根文件系统,包括容器中的所有文件和目录。这包括容器中的操作系统文件、安装的软件、用户数据等。
具体来说,文件系统路径包括但不限于以下内容:

  • /bin, /sbin, /usr/bin, /usr/sbin: 可执行文件的路径。
  • /etc: 配置文件的路径。
  • /opt:用于存放可选的应用程序和软件包
  • /lib, /lib64, /usr/lib, /usr/lib64: 库文件的路径。
  • /usr/share: 共享数据的路径。
  • /var: 可变数据的路径,例如日志文件、数据库文件等。
  • /home: 用户主目录的路径。

当你使用 docker commit 命令创建镜像时,它会将容器的整个文件系统快照保存为一个新的镜像。这意味着镜像将包含容器中的所有文件和目录,以及容器的文件系统状态。
需要注意的是,docker commit 命令创建的镜像可能会变得很大,因为它包含了容器的完整文件系统。在生产环境中,建议使用 Dockerfile 和适当的构建步骤来创建镜像,以便更好地管理镜像的大小和内容。

  1. 导出镜像
docker save -o <目标文件名.tar> <镜像名称:标签>
  1. 加载镜像
docker load -i <导出的镜像文件.tar>
  1. 将镜像上传到harbor(建议上传到稳定的仓库,如阿里云仓库)
docker login <Harbor地址> -u <用户名> -p <密码>
docker tag <镜像名称:标签> <Harbor地址>/<项目名称>/<镜像名称:标签>
  1. 修改docker-compose.yaml文件volumes配置
version: "2.1"
services:code-server:image: 导出的本地镜像(上传后使用服务路径镜像)container_name: my-code-server-javaenvironment:- PUID=1000- PGID=1000- DEFAULT_WORKSPACE=/config/workspace- PASSWORD=123456- TZ=Asia/Shanghaivolumes:- ./config:/config- ./config/maven/conf:/opt/apache-maven-3.9.6/conf    ports:- 99:8443restart: unless-stopped

Dockerfile制作镜像

  1. 上述操作容器一旦重启会丢失,建议参考GitHub - linuxserver/docker-code-server重新制作镜像,Dockerfile.yml
FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy
# set version label
ARG BUILD_DATE
ARG VERSION
ARG CODE_RELEASE
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="aptalca"# environment settings
ARG DEBIAN_FRONTEND="noninteractive"
ENV HOME="/config"RUN \echo "**** install runtime dependencies ****" && \apt-get update && \apt-get install -y \git \jq \libatomic1 \nano \net-tools \netcat \sudo && \echo "**** install code-server ****" && \if [ -z ${CODE_RELEASE+x} ]; then \CODE_RELEASE=$(curl -sX GET https://api.github.com/repos/coder/code-server/releases/latest \| awk '/tag_name/{print $4;exit}' FS='[""]' | sed 's|^v||'); \fi && \mkdir -p /app/code-server && \curl -o \/tmp/code-server.tar.gz -L \"https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-amd64.tar.gz" && \tar xf /tmp/code-server.tar.gz -C \/app/code-server --strip-components=1 && \echo "**** clean up ****" && \apt-get clean && \rm -rf \/config/* \/tmp/* \/var/lib/apt/lists/* \/var/tmp/*# add local files
COPY ./root /##########安装java相关环境########################
# 思路:将离线下载安装包拷贝进来安装,在删除安装包
#https://www.oracle.com/java/technologies/downloads/
#https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot
#https://maven.apache.org/index.html
# 安装OpenJDK 11
RUN apt-get update && \apt-get install -y openjdk-11-jdk# 安装Maven
RUN apt-get install -y maven# 安装Node.js
RUN apt-get install -y curl && \curl -sL https://deb.nodesource.com/setup_14.x | bash - && \apt-get install -y nodejs# 设置环境变量
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
ENV PATH=$PATH:$JAVA_HOME/bin
################################### ports and volumes
EXPOSE 8443
  1. 打包镜像
docker build -t <image_name>:<tag> .

git拉取项目

  1. 拉取项目

image.png

  1. 右击运行项目进入断点

image.png

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

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

相关文章

动态内存面试的经典题目

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

网络安全中的“三高一弱”和“两高一弱”是什么?

大家在一些网络安全检查中&#xff0c;可能经常会遇到“三高一弱”这个说法。那么&#xff0c;三高一弱指的是什么呢&#xff1f; 三高&#xff1a;高危漏洞、高危端口、高风险外连 一弱&#xff1a;弱口令 一共是4个网络安全风险&#xff0c;其中的“高危漏洞、高危端口、弱…

电脑怎么录制屏幕?看这一篇就够了

在数字时代&#xff0c;电脑屏幕录制已经成为人们日常生活中一个越来越重要的工具。无论是录制在线课程、游戏精彩时刻&#xff0c;还是远程会议、软件演示&#xff0c;屏幕录制都可以帮助我们更好地保存和分享这些信息。可是您知道电脑怎么录制屏幕吗&#xff1f;本文将介绍两…

旧电脑追加内存条

内存条基本知识 DDR4 2666 DDR&#xff08;Double Data Rate&#xff09;双倍速率 4 第四代 2666 内存主频2666MHz 内存时序 内存的延迟时间 传输带宽 MB/s 内存和CPU之间的传输速度 针脚数 数字-PIn 288-PIN就是288个针脚 选购内存条 …

【国产mcu填坑篇】华大单片机(小华半导体)一、SPI的DMA应用(发送主机)HC32L136

最近需要用华大的hc32l136的硬件SPIDMA传输&#xff0c;瞎写很久没调好&#xff0c;看参考手册&#xff0c;瞎碰一天搞通了。。。 先说下我之前犯的错误&#xff0c;也是最宝贵的经验&#xff0c;供参考 没多看参考手册直接写&#xff08;即使有点烂仍然提供了最高的参考价值。…

iis配置asp网站

1.安装IIS的ASP win7和win10都是一样的 下安装IIS时ASP一般被默认不选中的状态&#xff0c;因此需要打开IIS检查功能视图栏中是否存在ASP选项&#xff0c;若没有则需要从控制面板->程序和 功能->打开或关闭Windows功能->Internet信息服务->万维网服务->应用程序…

数环通更新动态|新增连接器抖店自建、叮当OKR、千易ERP、货拉拉

更新快速预览 新增连接器4个 抖店自建 叮当OKR 千易ERP 货拉拉 应用更新2个 百度统计&#xff08;2&#xff09; 旺店通&#xff08;1&#xff09; 应用连接器 新增连接器 1.抖店自建 抖店是抖音官方打造的电商商家实现一站式经营平台&#xff0c;为商家提供全链路服务&#xf…

Selenium定位元素的方法css和xpath的区别

selenium是一种自动化测试工具&#xff0c;它可以通过不同的定位方式来识别网页上的元素&#xff0c;如id、name、class、tag、link text、partial link text、css和xpath。 css和xpath是两种常用的定位方式&#xff0c;它们都可以通过元素的属性或者层级关系来定位元素&#…

MacOS环境下Kali Linux安装及使用指导

Kali Linux是一个开源的、基于Debian的Linux发行版&#xff0c;面向各种信息安全任务&#xff0c;如渗透测试、安全研究、计算机取证和逆向工程&#xff0c;是最先进的渗透测试发行版&#xff0c;它的前身是BackTrack。 1. 我们为什么要用Kali Linux 由于Kali Linux具有以下特…

【脑筋急转弯系列】乒乓球称重问题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

FDTD2018a安装问题记录

FDTD2018a安装问题记录 目录问题解决方案 目录 问题 解决方案 电脑名字如果是中文改成英文

全局唯一ID实现方案——雪花算法

全局唯一ID实现方案——雪花算法 雪花算法原理 Snowflake&#xff0c;雪花算法是由Twitter开源的分布式ID生成算法&#xff0c;以划分命名空间的方式将 64-bit位分割成多个部分&#xff0c;每个部分代表不同的含义。而 Java中64bit的整数是Long类型&#xff0c;所以在 Java 中…

数据加密过程和数据加密的方法有哪些?

在信息日益发达的今天&#xff0c;数据安全已成为越来越受到关注的问题。数据加密技术作为保护信息安全的重要手段&#xff0c;对于维护个人隐私、企业机密以及国家安全具有重要意义。希望通过本文的学习&#xff0c;您能够对数据加密有一个全面的认识&#xff0c;并在实际应用…

基于Java的校车管理系统

源码跳转链接: 基于java的校车管理系统 基于Java的校车管理系统 摘要一、绪论1.1设计目的与意义1.2需求分析1.3用户、管理员用例图 二、系统总体设计2.1系统模块设计2.2数据库分析与设计2.2.1数据库概念结构设计2.2.2表结构设计2.2.3数据库连接池原理 2.3系统后台设计与分析2.…

DAY9--learning english

一、积累 1.compilation 2.mow lawn 3.vendor 4.transparent 5. perpetual 6. extinct 7. thirst 8.defy 9.resentment 10.ample 11.restore 12. firm 13. coincidence 14. spoil 15. astonish 16. blade 17.pierce 18. indigenous 19.perspective 20.vibrant 二、练习 1.spe…

关于枚举问题

一、abc算法 #include "cstdio" int main(){int a,b,c;//定义名字为a,b,c的三个整型变量for(a0;a<9;a){ // a的初始值是0&#xff0c;当a满足a<9的时候&#xff0c;可以执行循环体 //自增的意思for(b0;b<9;b){for(c0;c<9;c){//abcbcc532//abc--&g…

Wpf 使用 Prism 实战开发Day11

仓储&#xff08;Repository&#xff09;/工作单元&#xff08;Unit Of Work&#xff09;模式 仓储&#xff08;rep&#xff09;:仓储接口定义了对实体类访问数据库及操作的方法。它统一管理数据访问的逻辑&#xff0c;并与业务逻辑层进行解耦。 简单的理解就是对访问数据库的一…

【设计模式之美】重构(三)之解耦方法论:如何通过封装、抽象、模块化、中间层等解耦代码?

文章目录 一. “解耦”概述二. 如何给代码“解耦”&#xff1f;1. 封装与抽象2. 中间层2.1. 引入中间层能**简化模块或类之间的依赖关系**。2.2. 引入中间层可以起到过渡的作用&#xff0c;能够让开发和重构同步进行&#xff0c;不互相干扰。 3. 模块化4. 其他设计思想和原则4.…

[晓丽紫]每日论文分享(有中文摘要,源码或项目地址)--大模型,扩散模型...

专属领域论文订阅 关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 分类: 大语言模型LLM视觉模型VLM扩散模型视觉导航具身智能&#xff0c;机器人强化学习开放词汇&#xff0c;检测分割 [晓丽紫]每日论…

基于YOLOv7的学生课堂行为检测,引入BRA注意力和多种IoU改进提升检测能力

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;介绍了学生课堂行为检测&#xff0c;并使用YOLOv7进行训练模型&#xff0c;以及引入BRA注意力和多种IoU改进来提升检测能力 目录 1.SCB介绍 ​编辑 2.如何提高YOLOv7课堂行为检测能力 2.1 训练基于YOLOv7模型的…