(1)500行代码手写docker开篇-goland远程编译环境配置

本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。

本系列源码已经上传到githuhub,地址如下:

https://github.com/HobbyBear/tinydocker

在开始写代码之前,先介绍下我的实验环境,本地开发环境是arm64 mac m1,为了能方便的在linux上进行调试,我买了一个amd64的云linux 服务器,其实也可以本地搭建一个linux虚拟机代。 代码编辑器选择了goland,并在goland配置了远程编译,这样便能在本地编写调试 适合amd64 linux环境的代码了。

下面是我配置的详细步骤。

goland 配置

我创建了一个名为tidydocker的项目,然后用goland打开,进入到goland配置界面配置sftp



配置远程的部署路径,注意我已经在linux服务器上提前创建好了projects和tinydocker 目录了。到时候goland在寻找部署目录时会根据上一个截图的root path 和下面截图的Deployment path 结合起来寻找部署目录。

接着配置go remote,这样到时候我们便能够远程调试代码。



在接着配置goland之前,还需要在远程linux机器上部署调试工具。

首先肯定要有golang环境

root@ecs-295280:~# go version
go version go1.20.3 linux/amd64
root@ecs-295280:~#

接着安装dlv调试工具

 go install github.com/go-delve/delve/cmd/dlv@latest

写一个简单hello world程序

配置远程编译,编译的选项选择run on 在我们远程linux主机上。



注意编译时候设置-o参数这样能让我们编译后的文件名称为tinydocker,不然就是goland为我们自动生成的一串很长的文件名。

点击manager targets 配置编译后的文件输出目录

运行效果

这下配置就算全部完成了,点击编译,goland便会将代码自动上传到远端,然后执行编译过程。



上一步完成后,登录到远端看看,可以发现已经生成了tinydocker的可执行文件

root@ecs-295280:~/projects/tinydocker# ls
go.mod main.go ReadMe.md tinydocker
root@ecs-295280:~/projects/tinydocker# pwd
/root/projects/tinydocker
root@ecs-295280:~/projects/tinydocker#

接着远端执行调试命令

root@ecs-295280:~/projects/tinydocker#  dlv exec  tinydocker  --headless --listen=:2345 --api-version=2 --accept-multiclient
API server listening at: [::]:2345
2023-05-02T01:27:04+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)

然后本地goland 给hellow world 程序打上断点 执行remote



可以看到断点已经生效了,这样便配置完成了goland的远程编译调试环境。

500行代码手写docker开篇-goland远程编译环境配置的更多相关文章

  1. 【Xamarin挖墙脚系列:代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧(转)】

    正愁如何选择构建项目中的视图呢,现在官方推荐画板 Storybord...但是好像 xib貌似更胜一筹.以前的老棒子总喜欢装吊,用代码写....用代码堆一个HTML页面不知道你们尝试过没有.等页面做出 ...

  2. 代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧

    近期接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问.就是应该怎样制作UI界面.iOS应用是非常重视用户体验的,能够说绝大多数的应用成功与否与交互设计以及UI是否美丽易用有着非常大的关 ...

  3. 关于代码手写UI,xib和StoryBoard

    代码手写UI 这种方法经常被学院派的极客或者依赖多人合作的大型项目大规模使用.Geek们喜欢用代码构建UI,是因为代码是键盘敲出来的,这样可以做到不开IB,手不离开键盘就完成工作,可以专注于编码环境, ...

  4. 几道JS代码手写面试题

    几道JS代码手写面试题   (1) 高阶段函数实现AOP(面向切面编程)    Function.prototype.before = function (beforefn) {        let ...

  5. Docker容器搭建android编译环境

    Docker容器搭建android编译环境 目录 1 部署容器 1.1 手动部署 1.1.1 配置docker 1.1.2 启动容器 1.1.3 配置环境 1.2 Dockerfile 2 镜像管理 ...

  6. 一步一步手写GIS开源项目-(1)500行代码实现基础GIS展示功能

    1.开篇 大学毕业工作已经两年了,上学那会就很想研读一份开源GIS的源码,苦于自己知识和理解有限,而市面上也没有什么由浅入深讲解开源gis原理的书籍,大多都是开源项目简介以及项目的简单应用.对于初级程 ...

  7. [500lines]500行代码写web server

    项目地址:https://github.com/aosabook/500lines/tree/master/web-server.作者是来自Mozilla的Greg Wilson.项目是用py2写成. ...

  8. 500行代码了解Mecached缓存客户端驱动原理

    原创不易,求分享.求一键三连 缓存一般是用来加速数据访问的效率,在获取数据耗时高的场景下使用缓存可以有效的提高数据获取的效率. 比如,先从memcached中获取数据,如果没有则查询mysql中的数据 ...

  9. 框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)

    一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创 ...

  10. 再写一篇ubuntu服务器的环境配置文

    三年前写过一篇,但是环境和三年前比已经发生了比较大的变化,于是重新写一篇,自己以后再次配置也比较方便.我个人而言并没有觉得centos比ubuntu好用多少,所以继续选用ubuntu. 一.硬盘分区  ...

随机推荐

  1. keras图片数字识别入门AI机器学习

    通过使用mnist(AI界的helloworld)手写数字模型训练集,了解下AI工作的基本流程. 本例子,要基于mnist数据集(该数据集包含了[0-9]的模型训练数据集和测试数据集)来完成一个手写数 ...

  2. RPA的数字化标签

    随着中国经济的飞速发展,"人口红利"也正在不断消失,在过去几十年中,我们已经看到了各种智能化.自动化技术的进步对各行各业产生的巨大影响.但在现代金融行业中,仍然有许多重复.简单.繁 ...

  3. Harmonic Number 调和级数(欧拉常数)或者分块暴力

    给你个n让你求 Memory limit 32768 kB 输出误差不超过1e-8 思路:做之前不知都调和级数不知道欧拉常数没问题,肯定能先想到暴力打标,打完发现数组内存太大,那么问题就是怎么能让内存 ...

  4. 在java中String类为什么要设计成final?Java面试常见问题

    2023Java面试题最经典的问题之一了,非常经典的Java基础知识,一定要学会! 在Java中,String类被设计成final,这意味着它的值在创建后不可更改.这是因为字符串在Java中使用广泛, ...

  5. 你可能需要的 6 个 React 开发小技巧

    ​ 这是一个可怕的问题,在React中,我们经常会编写条件语句来显示不同的视图,比如这个简单的例子. const App = () => { return ( <> { loadin ...

  6. C# 动态创建类,动态创建表,支持多库的数据库维护方案

    1.创建表 SqlSugar支持了3种模式的建表,非常的灵活,可以MYSQL MSSQL ORACLE等用同一语法创建数据库,不需要考虑数据库的兼容性 中间标准: string  大文本 5.1.3. ...

  7. CZHA0黑客游戏

    一个自己开发的黑客游戏,里面用到了自研AC库 A0阶段: from ac import* from time import * from sys import * def printf(text): ...

  8. Go语言:一文看懂什么是DI依赖注入(dependency injection)设计模式

    前言: 本文主要介绍的是Goalng中关于 DI 的部分,前一部分会先通过典型的面向对象语言Java引入DI这个概念 仅供初学者理解使用,文章如有纰漏敬请指出 本文涉及到的知识面较为零散,其中包含面向 ...

  9. 你不得不了解的CSS数据类型

    在我之前的开发中,CSS对于我来说,要用什么找什么,对CSS的了解并不算深入:在我刚开始深入学习CSS时,第一个遇到的就是CSS数据类型,我听说过JS.TS的数据类型,CSS怎么也有数据类型?但是随着 ...

  10. vue指令系统之文本指令

    目录 什么是指令系统 文本指令 v-text指令 v-html指令 v-show v-if 什么是指令系统 指令系统是VUE提供的,语法为 v-xx 写在标签属性中的,系统都称之为指令 文本指令 文本 ...