vscode+docker搭建迷你开发环境。制作docker镜像,并通过vscode连接后进行开发

制作自己的docker镜像,将docker镜像作为服务器,接受vscode连接

目录

1. 制作开发环境镜像

1.1 选择基础镜像

1.2 编写dockerfile

1.3 构建镜像

2. 启动镜像

3. 添加用户

3.1 查看物理机上用户信息

3.2 登录到docker中

3.3 按照物理机的用户和组id增加用户

4. 使用vscode连接

4.1 vscode添加ssh配置

4.2 vscode连接docker

4.3 打开工作目录

4.4 查看共享目录

然后就是下载代码并开始后续的开发工作了


分 4 步

  • (1)制作ubuntu20.04的开发环境

  • (2)启动镜像实例,将其作为开发环境

  • (3)添加用户(权限对齐物理开发机),可访问宿主开发机目录

  • (4)通过ssh或者vscode远程登录

1. 制作开发环境镜像

1.1 选择基础镜像

在dockerhub上找基础镜像 Docker Hub

这里以ubuntu20.04为例

1.2 编写dockerfile

基于ubuntu20.04的基础镜像,安装C++开发工具

FROM ubuntu:20.04 AS ubuntu20.04-base
LABEL author="authorname"
ENV DEBIAN_FRONTEND=noninteractive# 1. 基础环境
# 1.1 切换国内源
RUN sed -i s@/archive.ubuntu.com/@/mirrors.tuna.tsinghua.edu.cn/@g /etc/apt/sources.list
RUN apt-get clean && apt-get update# 1.2 安装基础包
RUN apt-get -yq install apt-utils vim git tmux bash-completion \curl sudo locales gnupg lsb-release language-pack-zh-hans \python3-pip openssh-server# 1.3 语言
RUN locale-gen en_US en_US.UTF-8
RUN update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ENV LANG=en_US.UTF-8# 1.4 添加docker和root用户
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN useradd -rm -d /home/docker -s /bin/bash -g root -G sudo docker
RUN echo 'docker:docker' | chpasswd
RUN echo 'root:Aa123456' | chpasswd
USER docker
WORKDIR /home/docker# 2. 安装ssh服务
FROM ubuntu20.04-base AS ubuntu20.04-base-sshd
USER root
# 2.1 ssh服务配置
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
RUN sed -i 's/\#PubkeyAuthentication\ yes/PubkeyAuthentication\ yes/' /etc/ssh/sshd_config && \sed -i 's/\#PasswordAuthentication\ yes/PasswordAuthentication\ yes/' /etc/ssh/sshd_config && \sed -i 's/\#X11Forwarding\ no/X11Forwarding\ yes/' /etc/ssh/sshd_config && \sed -i 's/\#AllowTcpForwarding\ yes/AllowTcpForwarding\ yes/' /etc/ssh/sshd_config && \sed -i 's/\#AllowAgentForwarding\ yes/AllowAgentForwarding\ yes/' /etc/ssh/sshd_config
RUN mkdir /var/run/sshd
RUN bash -c 'install -m755 <(printf "#!/bin/sh\nexit 0") /usr/sbin/policy-rc.d'
RUN ex +'%s/^#\zeListenAddress/\1/g' -scwq /etc/ssh/sshd_config
RUN ex +'%s/^#\zeHostKey .*ssh_host_.*_key/\1/g' -scwq /etc/ssh/sshd_config
RUN RUNLEVEL=1 dpkg-reconfigure openssh-server
RUN ssh-keygen -A -v
RUN update-rc.d ssh defaults# 3. sudo配置
RUN ex +"%s/^%sudo.*$/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/g" -scwq! /etc/sudoersFROM ubuntu20.04-base-sshd AS ubuntu20.04-dev# 4. ssh指纹可免密登录
# Generate and configure user keys.
USER docker
WORKDIR /home/docker
RUN ssh-keygen -t rsa -b 4096 -C "xxx@gmail.ai" -f ~/.ssh/id_rsa_xxx_gmail -q -N ""# 5. 基础开发环境
# 更新镜像的包索引并安装必要的软件包
RUN sudo apt-get install -yq \cmake \g++ \gdb \pkg-config# 6. 默认启动命令
ENTRYPOINT sudo service ssh restart && bash

1.3 构建镜像

构建带有C++开发环境的新镜像

docker build -t myubuntu20.04:0.1 .

2. 启动镜像

  • 将docker的ssh端口22映射到物理机的2222

  • 将docekr的/mnt目录映射到物理机的/mnt/users/software目录

docker run -d -t -p 2222:22 --name ubuntu20.04_for_software -v /mnt:/mnt/users/software myubuntu20.04:0.1

3. 添加用户

为了保证docker机和开发机的用户权限一致,我们需要按照权限添加用户

假设现在要将用户名为cpf的用户添加到docker中,为了docker中用户能够访问物理机的目录,我们保证docker中的用户和物理机用户在同一组内

3.1 查看物理机上用户信息

在开发机上查看用户cpf的用户信息

# 有root权限可以直接查看
cat /etc/passwd | grep cpf
# 无root权限,用户登录后查看
id -u && id -g

3.2 登录到docker中

制作镜像的时候已经在docker里增加了docker用户,因此直接使用docker用户登录

# 在docker所在的物理机可以通过两种方式登录到docker中
# 1. 通过docker命令登录:docker exec -it ubuntu20.04_for_software /bin/bash
# 2. 通过ssh登录
ssh docker@127.0.0.1 -p2222
# 在其他设备上也可以通过ssh登录,10.31.2.204为docker所在物理机的IP地址
ssh docker@10.31.2.204 -p2222

3.3 按照物理机的用户和组id增加用户

# 1. 以用户和组id为1000来添加cpf用户到cpf组
sudo groupadd cpf -g 1000
sudo useradd -g cpf -ms /bin/bash cpf -u 1000
# 2. 如果需要sudo权限
# sudo usermod -aG sudo cpf
# 3. 修改cpf用户的密码
# 删除原密码
sudo passwd -d cpf
# 切换到cpf并修改密码
sudo su - cpf
passwd

4. 使用vscode连接

4.1 vscode添加ssh配置

点击图标

添加配置并保存

4.2 vscode连接docker

刷新后连接

输入密码并回车

连接成功后点击添加目录

4.3 打开工作目录

点击打开文件夹,然后输入文件夹,默认是打开home目录

4.4 查看共享目录

打开终端

docker中查看目录

然后就是下载代码并开始后续的开发工作了

一起学习,一起进步

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

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

相关文章

YOLO训练报错解决:OSError: [WinError 1455] 页面文件太小,无法完成操作

问题&#xff1a;OSError: [WinError 1455] 页面文件太小&#xff0c;无法完成操作。 Error loading "C:\Users\12706.conda\envs\yolov8\lib\site-packages\torch\lib\cudnn_cnn_infer64_8.dll" or one of its dependencies. 解决方法&#xff1a; 降低数据加载的线…

掌握Adobe XD:为自学者准备的软件学习秘籍

相信了解一些设计软件的朋友都听说过这个软件&#xff0c;Adobe XD软件是一款功能强大的原型创建工具。随着Adobe XD软件越来越受到用户的青睐&#xff0c;它几乎涵盖了所有大中小企业和企业的设计&#xff0c;可以说是设计公司最常用的软件之一。Adobe XD软件可以在很多方面满…

Jenkins常用插件与应用详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Jenkins是一个平台我们通过安装插件来解决我们想要完成的任务 1、Jenkins常用插件 Allure&#…

常用图像分类预训练模型大小及准确度比较

近年来&#xff0c;深度学习技术的发展使得图像分类任务变得越来越容易。预训练模型的出现更是使得图像分类任务变得更加简单和高效。然而&#xff0c;随着预训练模型的数量和大小的增加&#xff0c;我们需要了解每个模型的特点和优缺点&#xff0c;以便更好地选择和使用它们。…

6岁开始学习打字,10岁学懂文字编程

​你们有没有想过打字速度会影响Coding 编程能力&#xff1f; 疫情期间&#xff0c;全国中小学均不定期停止面授课程&#xff0c;改为网上教学。顷刻之间&#xff0c;电脑、智能手机等即时通讯软件成为每日学习的「良师益友」&#xff0c;常伴左右。 同时&#xff0c;学生也由…

20212313 2023-2024-2 《移动平台开发与实践》第5次作业

20212313 2023-2024-2 《移动平台开发与实践》第5次作业 1.实验内容 设计并开发一个地图应用系统。 该实验需提前申请百度API Key&#xff0c;调用接口实现百度地图的定位功能、地图添加覆盖物和显示文本信息。 2.实验过程 2.1 获取SHA1 &#xff08;1&#xff09;打开控制台…

PostgreSQL数据库提权

前面讲述了mysql、SqlServer、Redis数据库相关的提权方式&#xff0c;有兴趣的也可以去看看。 这里讲的postgreSQL数据库提权就是任意命令执行漏洞(CVE-2019-9193)。 目录 数据库简介 漏洞原理 影响版本 漏洞利用 利用前提 漏洞复现 复现准备 复现过程 漏洞修复 数据…

三分钟轻松搞定内容,2024视频号最新AI自动生成影视解说,,百分之百过原创, 月入1万+

在这个数字时代&#xff0c;我们有幸见证了AI技术对创新的推动。现如今&#xff0c;一个崭新的平台出现了&#xff0c;它能让你用AI软件在短短3分钟内制作完成一段影视解说&#xff0c;而且由于这个平台尚属于新兴&#xff0c;竞争者稀少&#xff0c;提供了一个广阔的机遇天地。…

爬虫利器Frida RPC入门——夜神模拟器环境篇

Frida是一款轻量级HOOK框架&#xff0c;可用于多平台上&#xff0c;例如android、windows、ios等。 frida分为两部分&#xff0c;服务端运行在目标机上&#xff0c;通过注入进程的方式来实现劫持应用函数&#xff0c;另一部分运行在系统机器上。frida上层接口支持js、python、…

【MySQL数据库】存储过程实战——图书借阅系统

图书借阅归还 借阅不用count判断&#xff0c;归还不用具体字段值判断 每次借阅或者归还只能操作1本 数据准备 -- 创建数据库 create database db_test3 CHARACTER SET utf8 COLLATE utf8_general_ci; -- 使用数据库 use db_test3; -- 创建图书信息表&#xff1a; create tabl…

帆软生成csv文件

帆软官网提供了导出csv文件的插件&#xff0c;需要下载指定版本的插件 请选择具体的详情点击官网介绍&#xff1a;文档介绍 插件地址&#xff1a;插件地址

免费分享一套SpringBoot+Vue企业客户关系CRM管理系统【论文+源码+SQL脚本+PPT】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue企业客户关系CRM管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue企业客户关系CRM管理系统系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue企业客户关系CRM管…

表空间[MAIN]处于脱机状态

达梦数据库还原后&#xff0c;访问数据库报错&#xff1a;表空间[MAIN]处于脱机状态 解决方法&#xff1a; 1&#xff1a;检查备份文件 DMRMAN 中使用 CHECK 命令对备份集进行校验&#xff0c;校验备份集是否存在及合法。 ##语法&#xff1a;CHECK BACKUPSET <备份集目录…

Linux IO模型深度解析与实战应用

linux的5种IO模型 一、这里IO是什么 操作系统设有用户态与内核态,确保系统安全。应用程序默认在用户态运行,而执行如IO操作等底层任务时,需切换至内核态以高效执行。 服务器从网络接收的大致流程如下: 1、数据通过计算机网络来到了网卡 2、把网卡的数据读取到 socket 缓…

【CSS】input宽度根据内容自适应

目标&#xff1a;纯css实现以下功能 input 设置width:min-content | max-content&#xff1b;//无效 ∵ 文本输入框通常会被浏览器渲染为具有固定宽度的控件。 解决方法&#xff1a;设置input的宽高都为100%&#xff0c;让它随着父元素的宽高改变。 父元素如何改变呢&#xf…

企企通入选第一新声《2024年中国CIO数字化产品选型白皮书》供应链数字产品可信名录

近日&#xff0c;第一新声研究院根据多年产业数字化研究&#xff0c;历经近半年时间&#xff0c;并综合近200位CIO调研与推荐意见&#xff0c;发布《2024年中国CIO数字化产品选型白皮书》&#xff0c;并推出企业CIO选型指南及可信产品名录。企企通凭借其优秀的采购数字化与供应…

【乐吾乐3D可视化组态编辑器】模型类型与属性

编辑器地址&#xff1a;3D可视化组态 - 乐吾乐Le5le 本章主要为您介绍模型的属性功能。 一个模型至少会包含一个节点&#xff08;Node&#xff09;&#xff0c;从节点类型上可以分为转换节点&#xff08;TransformNode&#xff09;、网格&#xff08;Mesh&#xff09;、实例网…

【Sql Server】随机查询一条表记录,并重重温回顾下存储过程的封装和使用

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言随机查询语…

小程序大能量:盲盒平台搭建与营销策略

一、引言 在移动互联网的浪潮下&#xff0c;小程序以其轻量级、即用即走的特点&#xff0c;成为了商家与消费者沟通的新桥梁。盲盒经济作为近年来兴起的消费趋势&#xff0c;结合小程序平台&#xff0c;不仅为用户带来了全新的购物体验&#xff0c;也为商家带来了更多的商业机…

leetCode.84. 柱状图中最大的矩形

leetCode.84. 柱状图中最大的矩形 题目思路 代码 class Solution { public:int largestRectangleArea( vector<int>& h ) {int n h.size();vector<int> left( n ), right( n );stack<int> st;// 求每个矩形的第一个小于左边界的矩形 - 用单调栈for ( …