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/sudoers

FROM 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中查看目录

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

一起学习,一起进步

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何搭建雾锁王国多人联机服务器,搭建教程分享

雾锁王国&#xff08;Enshrouded&#xff09;是一款融合了生存、制作以及动作RPG战斗的游戏&#xff0c;2024年1月24日在Steam平台以抢先体验形式发售&#xff0c;支持中文。游戏背景设定在一个基于体素构筑的辽阔大陆上。玩家将在这个开放世界中自由选择前进的方向&#xff0c…

Linux-CentOS7-解决vim修改不了主机名称(无法打开并写入文件)

Linux-CentOS7-修改主机名称 修改之后使用强制保存退出也不行。 解决办法&#xff1a; 使用hostnamectl命令进行修改 查看系统主机名和信息&#xff1a; hostnamectl这条命令会显示当前系统的主机名、操作系统信息、内核版本、架构信息等相关信息。 修改系统主机名&#xff1…

力扣算法之1070. 产品销售分析 III

力扣传送门 题解 选出每个售出过的产品 第一年 销售的 产品 id、年份、数量 和 价格&#xff0c;很明显就是个排序问题 我的解 SELECT product_id,year as first_year,quantity,price FROM ( SELECT sale_id,RANK() OVER(PARTITION BY product_id ORDER BY [year] asc ) A…

软件测试人员如何规划自己的职业发展路线

在这个飞速发展的时代中&#xff0c;我们每个人都渴望在各自的领域里找到属于自己的一片天空&#xff0c;而对于那些致力于软件测试的朋友们而言&#xff0c;规划好自己的职业发展路线显得尤为重要。 一、明确目标 首先&#xff0c;我们需要确立一个明确的职业发展目标。对于软…

【Spring Cloud】API网关

目录 什么是API网关为什么需要API网关前言问题列表 API网关解决了什么问题常见的网关解决方案NginxLuaSpring Cloud Netflix ZuulSpringCloud Zuul的IO模型弊端 Spring Cloud Gateway 第二代网关——GatewayGateway的特征Spring Cloud Gateway的处理流程Spring Cloud Gateway的…

将 MAX30100 脉搏血氧仪与 Arduino 连接

在这个项目中&#xff0c;我们将MAX30100 脉搏血氧仪传感器与 Arduino 连接起来。MAX30100 传感器能够测量血氧和心率。我们可以使用任何显示器&#xff08;如162 LCD 显示器&#xff09;来查看SpO2和BPM的值。血氧浓度&#xff08;称为 SpO2&#xff09;以百分比为单位测量&am…

在今日头条上写文章:ChatGPT完整使用教程

了解如何充分运用ChatGPT进行创作 简介 在今日头条上发布文章变得越来越方便。本文旨在详细解析如何运用ChatGPT来创作文章&#xff0c;并提供全方位的使用指南及常见问题的答疑。 第一步&#xff1a;基础准备 确保你已注册今日头条账号。 登录ChatGPT并与你的今日头条账号进…

Python 应用开发:Streamlit 布局篇(容器布局)

st.columns 以并列方式插入容器。 插入若干并排排列的多元素容器&#xff0c;并返回一个容器对象列表。 要在返回的容器中添加元素&#xff0c;可以使用 with 符号&#xff08;首选&#xff09;或直接调用返回对象的方法。请参见下面的示例。 列只能放置在其他列的内部&…

想用Python做OCR?看看这篇文章

OCR是Optical Character Recognition的缩写&#xff0c;中文名为光学字符识别。它是一种通过计算机技术对图像或扫描文档中的文字进行识别和理解的过程。OCR技术可以将图像中的文字转换为可编辑、可搜索的文本&#xff0c;使得计算机能够理解和处理这些文字信息。 OCR技术通常…

【技术实操】银河高级服务器操作系统实例分享,达梦数据库服务器 oom 问题分析

1. 服务器环境以及配置 【 机型】 处理器&#xff1a; HUAWEIKunpeng 920 5220 内存&#xff1a; 400518528 kB 主板型号&#xff1a; Chaoqiang K620 series 整机类型/架构&#xff1a; ARM BIOS 版本&#xff1a; KL4.41.028.TF.220224.R 固件版本&#xff1a; KL4.41…

关于C++的IO流简单总结

基础IO流 C的IO以面向对象的形式实现, 同时兼容了C语言面向过程的IO方式 C 标准库提供了四个基本流对象&#xff1a; cin&#xff1a;用于从标准输入&#xff08;通常是键盘&#xff09;读取数据。 cout&#xff1a;用于向标准输出&#xff08;通常是控制台&#xff09;写入…

IGS 天线文件内容解读

文章目录 Part.I IntroductionChap.I 预备知识 Part.II 文件的下载Chap.I 下载地址Chap.II 文件类型 Part.III 文件内容解读Chap.I 文件头Chap.II 数据块说明Chap.III 数据块示例 Reference Part.I Introduction 本文将对 IGS 发布的天线文件 *.atx 进行一个简要的解读。 Chap…

QTreeWidget 详解

QTreeWidget 详解 QTreeWidget 是 PyQt5 框架中的一个重要部件&#xff0c;它提供了树形结构的视图&#xff0c;可以用于显示层级数据。以下是 QTreeWidget 的详细讲解&#xff0c;包括基本用法、主要方法和属性以及如何与其他组件进行交互。 基本用法 导入模块 要使用 QTree…

QListWidget详解

QListWidget详解 QListWidget 是 PyQt5 中一个方便的部件&#xff0c;用于创建和管理列表。它继承自 QListView&#xff0c;并提供了一些高级功能&#xff0c;使得添加和管理列表项更加简单。以下是 QListWidget 的详解&#xff0c;包括基本用法、主要方法和属性以及如何与其他…

安装PyTorch详细步骤

&#x1f4a5;注意事项&#xff1a; CPU版和GPU版选一个进行安装即可 如果有Nvidia显卡&#xff0c;则安装cuda版本的PyTorch&#xff0c;如没有nvidia显卡&#xff0c;则安装cpu版。 目前常见的深度学习框架有很多&#xff0c;最出名的是&#xff1a;PyTorch&#xff08;faceb…

hypack如何采集多波束数据?(下)

多波束测量模块 1&#xff09;记录多波束和辅助传感器的数据&#xff1b; 2&#xff09;显示实时改正后的数据和数据质量信息。 ​编辑​ 测量准备 1&#xff09;设置大地测量参数和硬件设置&#xff1b; 2&#xff09;计划测线 计划测线是一定间距的平行线&#xff0c;…

DuGa-DIT论文翻译

Dual Gated Graph Attention Networks with Dynamic Iterative Training for Cross-Lingual Entity Alignment 双门控图注意力网络与跨语言实体对齐的动态迭代训练 Abstract 近年来&#xff0c;跨语言实体对齐引起了相当大的关注。过去使用传统方法来匹配实体的研究都有一个…

传输大咖26|想找可替代FTP升级的国产信创软件?这个一定要看

​在这个信息技术飞速发展的时代&#xff0c;传统的文件传输协议FTP已经逐渐显露出它的局限性。特别是在安全性、传输效率和可扩展性方面&#xff0c;FTP似乎已经无法满足企业日益增长的需求。因此&#xff0c;寻找一款能够替代FTP的国产信创软件&#xff0c;成为了众多企业的迫…

8个Web组件库强烈推荐,大厂设计师的秘密武器

有TDesign、Arco Design、Ant Design、Material 随着Design等优秀web组件库的发布&#xff0c;设计师可能会认为大厂商之间的web组件库差别不大。其实大厂商的产品线很多&#xff0c;业务复杂。设计系统是对以往项目经验的深刻沉淀&#xff0c;可以支撑业务逻辑&#xff0c;保证…

如何本地 Debug React 源码

日常开发过程中&#xff0c;有时 debug react 源代码进行问题排查。一种方案是直接把通过 html 引入进来&#xff0c;另外一种是编译并通过 yarn 链接到项目中&#xff0c;本地将介绍如何通过这两种方法进行代码 Debug。 页面引入源代码方式 这种方式比较简单&#xff0c;直接…