卸载本地开发环境,拥抱容器化开发

以前在公司的时候,使用同事准备的容器化环境,直接在 Docker 内进行开发,爽歪歪呀。也是在那时了解了容器化开发的知识,可惜了,现在用不到那种环境了。所以打算自己在本地也整一个个人的开发环境,不过因为我本地已经按照好了开发环境(我现在主要使用Go,平时会写一些Python脚本,所以我本地安装了它们两个),也就没有动力推动自己去学习了。因为这个想法已经拖了很久了,再拖下去就不可能再去弄了。所以,今天就激进一点,直接把本地的开发环境卸载,强迫自己去开始容器化开发环境。

卸载本地的开发环境

不过,这里我只卸载了 Go 的开发环境,因为 Python 是解释型语言,在本地有一个还是很有必要的。

请添加图片描述

然后打开 VSCode,可以发现 Go 的插件已经报错了,哈哈。

请添加图片描述

安装 Docker Desktop

因为现在用的是 Windows,不是 Linux 了,所以先在 Windows 上安装 Docker Desktop。不过我还是更喜欢在 Linux 上面开发,Windows 的话,无法使用哪些命令行工具了。

在这里插入图片描述
我这里只有一个 Docker,因为我尝试开启它的 Kubernetes,但是一直都无法启动,不知道是哪里的问题了。然后我就转向了 Rancher Desktop 了,不过 Docker Desktop 的 docker 功能还是不错的,用 docker 的话就用它了。如果是 k8s 再用 Rancher desktop。

在这里插入图片描述

拉取镜像

在这里插入图片描述

这里可以看出,两个镜像的大小差距还是蛮大的。其实看 golang 的镜像 tag 就能看出来了,它是基于 alpine 这个 Linux 发行版的。那么什么是 alpine 呢,这里简单提一嘴吧,这个名字是欧洲的 阿尔卑斯山,看下面的封面也能看出来了。它明显的特点就是小,大概只有 5 MB。
所以,这个 golang 的镜像,几乎全部内容都是 go 本身的东西了。但是 Python 就不一样了,因为它是一个解释型的语言,所以一般都是用那种比较大的镜像来作为基础镜像。

在这里插入图片描述

注意:这里的 golang 镜像是我在 docker hub 随便选择的,它可能太简陋了。如果是用作开发镜像的话,可以选择基于 Ubuntu 的更加丰富(这里不说它大,因为大是缺点,丰富是优点)的镜像。

docker hub 的 golang 镜像官方用法

有些同学可能网络不是很通畅,我这里把这块内容截取过来了,我们照着下面的用法做就行了。

在这里插入图片描述

PS: 为什么大是缺点?因为东西越多,潜在的漏洞就越多;反之,漏洞就越少,更加的安全。这里可以简单了解一下 CVE:What is a CVE

在这里插入图片描述

Hello World

docker run --rm -it python:3.12 python -c 'print("Hello World")'
在这里插入图片描述
这个例子算是比较简单的了,它也说明了基于容器进行开发的可能性。

我们再来看一个比较复杂的,golang 的例子吧,我在本地 hello 下,建立了一个 main.go 文件。

在这里插入图片描述

请添加图片描述

启动 golang 的镜像,把本地目录下的 main.go 挂载到容器的 /go/src/hello 下,并启动一个交互式的 shell 终端。
这里要了解一下容器挂载的知识:

在这里插入图片描述
那么你可能还需要了解一下 UFS 的知识了,不过长话短说,挂载目录就是把一个特定的本地目录挂载到容器目录下。

更进一步

前面介绍了一些简单的东西,直接启动一个镜像的方式演示是一个极佳的示例,但是对于真正的开发来说还是过于简陋了。如果需要在容器内开发,还是要构建一个自己的镜像才是比较好的方式。而且真正的开发需要的环境还是要复杂的多了。工欲善其事必先利其器,既然是开发当然需要一个趁手的工具了,这里我用的是 VSCode。

安装相关插件

在这里插入图片描述

强烈推荐大家阅读 VSCode 官方的 documentation: Developing inside a Container 在容器内开发

在这里插入图片描述

然后注意看上面的第二个框选内容,它(Dev Containers extention)支持两种基本的操作模型:

  • 你可以使用一个容器作为你的全职开发环境
  • 你可以连接到一个正在运行的容器去检查它。

在项目(随便一个项目,就算是刚才用作演示的 hello 也可以的)中创建一个 Dockerfile

FROM golang:1.20.11-alpine3.18WORKDIR /usr/src/app
# pre-copy/cache go.mod for pre-downloading dependencies and only redownloading them in subsequent builds if they change
COPY go.mod go.sum ./
RUN go mod download && go mod verifyCOPY . .

具体的内容可以看上面推荐的 VSCode 官方文档,里面已经说得很详细了。不过我之前使用的是 attaching 到一个正在运行的容器,这次使用的是其它的方式。

在这里插入图片描述

在这里插入图片描述

然后会让你选择,我这里只选择安装一个 zsh (alpine),不过第一次启动还是有点慢了。如果你感觉无聊的话,可以看看日志输出,这样可以缓解等待的焦虑。
这里可以直接安装 zsh 还是非常棒的!

在这里插入图片描述

这里我就只是在命令行启动项目了,因为我也没有安装相关的 golang 插件,它提示我安装了,我没有安装,也可以在插件那里选择你想要的进行安装。

在这里插入图片描述

VSCode 还是很人性的,自动给开了端口转发,不需要手动设置了(因为你现在是在容器中的,不能从外部直接访问的)。

在这里插入图片描述

这里我就简单的演示一下吧,因为这个 golang 的镜像可能不太合适,所以我还是需要弄一个自己的定制开发环境才比较好(也就是一个 Dockfile 或者复杂一点 docker-compose.yaml)。

PS

Dev Container

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

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

相关文章

S-Clustr(影子集群) 重磅更新!黑入工业PLC设备!

公告 项目地址:https://github.com/MartinxMax/S-Clustr 更新预告内容进度SIEMENS S7-200 SMART远程控制进行中 开发人员Blog联系方式提交时间提交内容授权情况ASH_HHhttps://blog.csdn.net/m0_53711047/article/details/133691537?spm1001.2014.3001.5502匿名2023-10-16 2…

USB复合设备构建CDC+HID鼠标键盘套装

最近需要做一个小工具,要用到USB CDCHID设备。又重新研究了一下USB协议和STM32的USB驱动库,也踩了不少坑,因此把代码修改过程记录一下。 开发环境: ST-LINK v2 STM32H743开发板 PC windows 11 cubeMX v6.9.2 cubeIDE v1.13.2 cub…

Feature Pyramid Networks for Object Detection(2017.4)

文章目录 Abstract1. Introduction3. Feature Pyramid NetworksBottom-up pathwayTop-down pathway and lateral connections 7. Conclusion FPN Abstract 特征金字塔是识别系统中检测不同尺度物体的基本组成部分。但最近的深度学习对象检测器避免了金字塔表示,部分…

VS Code画流程图:draw.io插件

文章目录 简介快捷键 简介 Draw.io是著名的流程图绘制软件,开源免费,对标Visio,用过的都说好。而且除了提供常规的桌面软件之外,直接访问draw.io就可以在线使用,堪称百分之百跨平台,便捷性直接拉满。 那么…

重生之我是一名程序员 31

大家晚上好!前面给大家分享了指针与数组的知识,所以今天要给大家分享的知识是——指针数组 相信大家在这里都会有疑问,指针数组是指针还是数组? 在这我们可以类⽐⼀下其他类型的数组,比如整型数组是存放整型的数组&am…

python科研绘图:绘制X-bar图

目录 1.X-bar 图的基本概念 2.X-bar 图的绘制过程 3.X-bar 图的优势 4.X-bar 图的绘制 1.X-bar 图的基本概念 X-bar控制图是一种统计工具,用于监控和控制生产过程中的质量变量。它是过程能力分析和统计过程控制(SPC,Statistical Process…

SystemVerilog学习 (5)——接口

一、概述 验证一个设计需要经过几个步骤: 生成输入激励捕获输出响应决定对错和衡量进度 但是,我们首先需要一个合适的测试平台,并将它连接到设计上。 测试平台包裹着设计,发送激励并且捕获设计的输出。测试平台组成了设计周围的“真实世界”,…

Python---数据序列中的公共方法

公共方法就是 支持大部分 数据 序列。 常见公共方法---简单 运算符描述支持的容器类型合并字符串、列表、元组*复制字符串、列表、元组in元素是否存在字符串、列表、元组、字典not in元素是否不存在字符串、列表、元组、字典 案例: 合并 代码: # …

【Nginx】nginx | 微信小程序验证域名配置

【Nginx】nginx | 微信小程序验证域名配置 一、说明二、域名管理 一、说明 小程序需要添加头条的功能,内容涉及到富文本内容显示图片资源存储在minio中,域名访问。微信小程序需要验证才能显示。 二、域名管理 服务器是阿里云,用的宝塔管理…

【探索Linux】—— 强大的命令行工具 P.15(进程间通信 —— system V共享内存)

阅读导航 引言一、system V的概念二、共享内存(1) 概念(2) 共享内存示意图(3) 共享内存数据结构 三、共享内存的使用1. 共享内存的使用步骤(1)包含头文件(2)获取键值(ftok函数)(3)创…

计算机视觉基础(7)——相机基础

前言 从这一节开始,我们来学习几何视觉。中层视觉包括相机模型、单目几何视觉、对极几何视觉和多目立体视觉等。在学习几何视觉最开始,我们先来学习一下相机模型,了解相机的基本原理,了解相机如何记录影像。 一、数字相机 1.1 基…

nodejs+vue黄河风景线旅游网站的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

本文首先对该系统进行了详细地描述,然后对该系统进行了详细的描述。管理人员增加了系统首页、个人中心、用户管理、景点分类管理、景点简介管理、旅游路线管理、文章分类管理、公告文章管理、系统管理理等功能。这套黄河风景线旅游网站是根据当前的现实需要&#xf…

如何在 Nginx Proxy Manager(NPM)上部署静态网站

前言 众所周知,我们在之前介绍过 Nginx Proxy Manager(以下简称 NPM) 这个反向代理的神器,对于一些 Docker 搭建的 Web 项目,NPM 能够很轻松地给他们做反向代理。 然而对于一些静态网站,小伙伴们可能不知道怎么用 NP…

Unity反编译:IL2CPP 打包输出的cpp文件和dll(程序集)位置、Mono打包输出的dll(程序集)位置

目录 如题:IL2CPP 打包输出的cpp文件和dll位置(并不会出现在APK里) 如题:Mono打包输出的dll位置 校验平台:Android 如题:IL2CPP 打包输出的cpp文件和dll位置(并不会出现在APK里) Unity Assets同级目录下 Temp/StagingArea/Il2…

Vue CLI脚手架安装、搭建、配置 和 CLI项目分析

目录 一、CLI快速入门 1. 官方介绍 : 2.安装Vue CLI : 3.搭建Vue CLI : 4.IDEA配置Vue CLI : 二、Vue CLI项目分析 1.结构分析 : 1.1 config 1.2 node_modules 1.3 src 1.4 static 2.流程分析 : 2.1 main.js 2.2 router/index.js 2.3 components/HelloWorld.vue 2.4 A…

《QT从基础到进阶·二十七》进度条QProgressBar

ui.ProgressBar.setValue(45); //45% ui.ProgressBar.setMin(0); ui.ProgressBar.setMax(255);0到100分为255份,值为215时,进度条为100/255*215 84% 点击主界面弹出进度条QProgressDialog 常用功能: setWindowFlags(Qt::Dialog | Qt::Cu…

【C++】泛型编程 ② ( 函数模板与普通函数区别 )

文章目录 一、函数模板与普通函数区别1、函数模板与普通函数区别2、代码示例 - 函数模板与普通函数区别 一、函数模板与普通函数区别 1、函数模板与普通函数区别 函数模板与普通函数区别 : 主要区别在于它们能够处理的 数据类型数量 和 灵活性 ; 自动类型转换 : 函数模板 不允许…

嵌入式Linux开发,NFS文件系统挂载

在嵌入式linix的开发中,经常会需要在pc端和板端互相传输文件,优先可选择ftp传输,但是有些嵌入式板端不支持,只能使用nfs这种方式,即pc端作为服务端,板端作为客户端,将pc端的某个文件夹挂载到板端…

Redis 连接不上 WRONGPASS invalid username-password pair

1.我的RedisDesktopManager 可以连接 但是 Springboot远程使用Redis就是连不上 2.我的密码是 abc123.. 多了英文的 ..符号 在Springboot过不了,所以Redis密码尽量字母数字,不要其他符号

炒现货黄金怎么做?挖掘黄金的投资机会

黄金一直以来都是备受投资者追捧的避险资产,其价值和潜力是无法忽视的。而炒现货黄金作为一种快速获取收益的投资方式,备受关注。那么,如何在炒现货黄金中找到投资机会呢?为您详细解析,简单易懂,帮助您开启…