用VSCode在共用服务器上使用连接自己的Docker容器进行开发

news2024/9/28 7:25:43

问题描述

我们实验室有一台很牛的Linux服务器,核多卡多硬盘大,它是大家共用的,组里给我们每个人都创建了一个普通用户,没有sudo权限,所以不能用apt。

但是每个人对开发环境的需求都是不一样的,比如我要用clang12他要用clang15,很容易就冲突了。而且众所周知Unix的权限就是鸡肋,实际使用时提防同僚不足而踩坑报错有余,没有root权限很多时候真的不方便。

因此,要是我们每个人都有一个专属的Linux系统就好了,这正可以使用Docker的虚拟化功能实现。下面就介绍一下如何创建和连接一个“开发容器”,最终的开发体验和直接使用VSCode连接一个实体Linux服务器是完全相同的

解决方案

首先需要向管理员申请使用docker命令的权限,因为docker命令可以用来提权,所以我们组里一般不会默认给大家用。

提权方法:因为docker的容器默认是root用户,所以我们可以通过卷映射的方式将物理机的根目录映射进去,然后在容器里修改任意文件。

所以我说Unix文件系统的权限控制就是鸡肋,不过安全起见请不要直接把根目录映射进去。

然后在自己的家目录下建一个新文件夹存储和自己的容器相关的数据(我的是gyh-zsh),在里面加一个Dockerfile文件,之后我们就在这里面构建我们开发容器的镜像:

$ cd ~
$ mkdir gyh-zsh && cd gyh-zsh
$ vim Dockerfile

这个Dockerfile和一般我们用于部署服务器的区别在于它的入口点(CMDENTRYPOINT命令),要将它的入口点设定为任意的一个shell程序。下面是我的Dockerfile:

# gyh-zsh
FROM ubuntu:22.04
WORKDIR /root
RUN apt update && apt install -y zsh
ENV IS_IN_DOCKER=1
ENTRYPOINT ["/bin/zsh"]

我用的是zsh,因为ubuntu镜像中默认是没有的,所以多了一行RUN命令。另外我们最好设置一个环境变量(IS_IN_DOCKER)来指示容器里的程序是运行在容器里。

然后我们直接构建它就行了,注意加上自己的名字(-t)别让别人给删除了:

$ docker build . -t gyh-zsh

创建一个目录在之后映射到容器的/root目录,然后就可以创建容器了:

$ mkdir root
$ docker container create \
	--name gyh-zsh \
	-v $HOME/root:/root \
	-v $HOME:/gyh \
	gyh-zsh

我同时把自己在物理机的家目录也映射进去,这样方便在容器里从外面取数据。

当然你的VSCode要安装Remote Development插件。在构建完毕后,用VSCode连接到物理机,然后点开“远程资源管理器”,你就应该能看到自己的容器显示在一个专门的“Dev Containers”分类里了:

请添加图片描述这个分类里的容器都可以被VSCode直接连接,连上去之后的开发体验和直接连接物理机是一模一样的(但是这时你有root权限了,耶!):

请添加图片描述最后,使用Docker的另外一个好处就是我们可以将整个开发环境都备份下来(妈妈再也不用担心我装错软件搞坏环境了):

$ docker export -o "$(date).tar" gyh-zsh
$ docker container rm gyh-zsh
$ docker import 'Sat 11 Feb 2023 10:49:34 PM CST' gyh-zsh

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

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

相关文章

年前无情被裁,面试大厂的这几个月…

2月份了,金三银四也即将来临,在这个招聘季,大厂也开始招人,但还是有很多人吐槽说投了很多简历,却迟迟没有回复… 另一面企业招人真的变得容易了吗?有企业HR吐槽,简历确实比以前多了好几倍&…

【手写 Vuex 源码】第五篇 - Vuex 中 Mutations 和 Actions 的实现

一,前言 上一篇,主要介绍了 Vuex 中 getters 的实现,主要涉及以下几个点: 将选项中的 getters 方法,保存到 store 实例中的 getters 对象中;借助 Vue 原生 computed,实现 Vuex 中 getters 的数…

有趣的Hack-A-Sat黑掉卫星挑战赛——跟踪卫星

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加,太空已经成为国家赖以生存与发展的命脉之一,凝聚着巨大的国家利益,太空安全的重要性日益凸显[1]。而在信息化时代,太空安…

TMC2660驱动及调试记录

TMC2660 一款优秀的电机驱动芯片,驱动简单。 理论就看这篇:TMC260/TMC2660/TMC262步进电机驱动 或者直接看手册,手册也不复杂。 使用SPI通信,通过SPI配置参数。支持直接使用SPI和Step/Dir方式控制两种控制步进电机的方式。 TMC…

【C语言】数据结构-二叉树

主页:114514的代码大冒险 qq:2188956112(欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ ) Gitee:庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 引入 我们之前已经学过线性数据结构,今天我们将介绍非线性数据结构----树 树是一种非线性的…

面试官问我:说说你对Spring MVC的理解

文章目录什么是MVC模式MVC的原理图2.1 分析工作原理3.1 组件说明:3.1.1 组件:核心架构的具体流程步骤什么是MVC模式 MVC:MVC是一种设计模式 MVC的原理图 2.1 分析 M-Model 模型(完成业务逻辑:有javaBean构成&#x…

C++11的异步操作让多线程开发变得简单

C11的异步操作简介一、std::future1.1、future的类型1.2、future的使用1.3、使用示例二、std::packaged_task三、std::promise总结简介 C提供如下的异步操作接口: std::future :异步指向某个任务,然后通过future特性去获取任务函数的返回结…

1. RNN神经网络初探

目录1. 神经网络与未来智能2. 回顾数据维度和神经网络3. 文本转变为词向量1. 神经网络与未来智能 2. 回顾数据维度和神经网络 循环神经网络,主要用来处理时序的数据,它对每个词的顺序是有要求的。 循环神经网络如何保存记忆功能? 当前样本只…

Window10开放某个端口

需求:由于防火墙原因,开放某个端口:如9999 在开始那里搜索防火墙-进入防火墙 第一步:核实是否启动了防火墙,之后进行 第二步:点击“高级设置”,→“入站规则”→“新建规则”→“端口”→ “下一步” …

【前端领域】3D旋转超美相册(HTML+CSS)

世界上总有一半人不理解另一半人的快乐。 ——《爱玛》 目录 一、前言 二、本期作品介绍 3D旋转相册 三、效果展示 四、详细介绍 五、编码实现 index.html style.css img 六、获取源码 公众号获取源码 获取源码?私信?关注?点赞&…

基于微信小程序的游戏账号交易小程序

文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…

【C++初阶】十二、STL---反向迭代器的实现

目录 一、反向迭代器 二、反向迭代器的实现 一、反向迭代器 之前的模拟实现vector、list 的时候,这些都是实现了正向迭代器,反向迭代器都没有实现,这里就要实现反向迭代器 反向迭代器也是适配器(配接器)的一种&#…

在阿里干了2年的测试,总结出来的划水经验

测试新人 我的职业生涯开始和大多数测试人一样,开始接触都是纯功能界面测试。那时候在一家电商公司做测试,做了一段时间,熟悉产品的业务流程以及熟练测试工作流程规范之后,效率提高了,工作比较轻松,这样我…

代码随想录第55天(动态规划):● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

一、最佳买卖股票时机含冷冻期 题目描述: 思路和想法: 这道题相较于之前的题目,注重对状态的分析,这里分为四个状态。 (1)状态一,买入状态 dp[i][0] 操作一:前一天就是持有状态(状…

day39【代码随想录】动态规划之

文章目录前言一、不同路径(力扣62)二、不同路径||(力扣63)三、最小路径和(力扣64)前言 1、不同路径 2、不同路径|| 3、最小路径和 一、不同路径(力扣62) 一个机器人位于一个 m x n…

MyBatis-Plus分页插件和MyBatisX插件

MyBatis-Plus分页插件和MyBatisX插件六、插件1、分页插件a>添加配置类b>测试八、代码生成器1、引入依赖2、快速生成十、MyBatisX插件1、新建spring boot工程a>引入依赖b>配置application.ymlc>连接MySQL数据库d>MybatisX逆向生成2、MyBatisX快速生成CRUD申明…

学习open62541 --- [74] 软链接的妙用

一 原理 在同一台电脑里,可能会有多个工程同时用到open62541,比较简单的办法是每个工程都拷贝一份open62541源码,但是这样会造成空间浪费,而且open62541的源码包本身也不小。 对于Linux用户来说,可以使用软链接来解决…

【Python学习笔记】28.Python3 错误和异常

前言 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。 Python3 错误和异常 Python 有两种错误很容易辨认:语法错误和异常。 Python assert&#xf…

德国奔驰、博世和保时捷的员工年薪有多少?

点击 欧盟IT那些事 关注我们公告:因企鹅审核规定,本公众号从《德国IT那些事》更名为《欧盟IT那些事》。从职场新人到总裁,一个个盘。位于德国斯图加特的梅赛德斯-奔驰集团及其子公司梅赛德斯-奔驰是世界最知名的汽车制造商之一。奔驰车代表着…

大数据之HBase高级

文章目录前言一、HBase的架构(一)Client(二)Master Server(三)Region Server二、HBase的工作原理(一)存储数据流程(二)读取数据流程(三&#xff0…