从零自制docker-1-【环境配置 docker go介绍与安装】

news2024/12/30 2:45:56

文章目录

  • docker简介
  • 举例
  • docker安装
  • go语言
  • go安装
  • go 配置

docker简介

Docker可以看作是一种极其轻巧的“虚拟机”,它允许你将一个或多个程序及其运行环境打包在一起,形成一个标准化的单元,这个单元可以在任何支持Docker的系统上运行,不受底层操作系统的限制。

如果用更贴近生活的例子来解释,Docker就像是软件世界中的“集装箱”。集装箱在物流行业中用于标准化运输,它可以装载货物,保护里面的物品不受外界环境影响,而且可以用同一种方式在全球范围内快速装卸和运输。同样地,Docker容器将软件和它的运行环境打包起来,确保软件能在任何环境中以相同的方式运行,简化了软件的部署和分发过程。

举例

当然,让我们通过一个简单的日常例子来理解Docker。

想象你要做一道复杂的菜肴,例如说,法式煎鸭胸。首先,你需要一个详细的菜谱,告诉你烹饪步骤和所需的所有配料(这就像创建Dockerfile)。然后,你需要在自己的厨房里准备所有的配料并按照菜谱开始烹饪(这就像构建Docker容器)。

但是,有一个问题。这道菜非常复杂,你不可能到每个人家里去亲自做。现在,假设你有一个神奇的设备,可以忠实地复制出你的整个厨房和煎鸭胸,包括海盐撒在鸭胸上的每一个颗粒,而且还保持着你烹饪完成时的状态。然后你可以把这个复制好的"厨房"送到任何地方,人们只需要稍作热身,就可以享用这道菜(这就像运行Docker容器)。

在这个例子中,你的厨房就像是一个Docker容器,你的菜谱就像是Dockerfile,你准备的配料就是应用及其依赖环境,而你复制并发送到其他地方的"厨房"就像是在其他机器上运行的Docker容器。

所以,Docker的工作方式有点像是"煮好"你的应用程序和它的环境,然后把"煮好"的容器"送"到任何你想要的地方,再稍作热身(运行)就可以享用了。

docker安装

curl -sSL https://get .docker.com | sh
  1. curl: 这是一种命令行工具,用于获取或发送数据,此处用于从指定的URL下载数据。

  2. -sSL: 这些都是curl命令的选项。其中,-s 或 --silent 选项意味着静默模式。在静默模式下,所有常规的进度显示和错误消息都会被抑制。-S 或 --show-error 选项意味着显示错误。当使用了 -s 选项时,这个 -S 选项非常有用,可以在发生问题时显示错误信息。-L 或 --location 选项意味着如果服务器报告该页面已移至其他地方(即发送了一个位置头),则跟随至新的位置。

https://get.docker.com: 这是用于下载Docker安装脚本的URL。

  1. |: 这是一个管道符号,它的作用是将前面命令的输出作为下一个命令的输入。

  2. sh: 这是Shell的解释器,这里的用途是执行从 https://get.docker.com 下载下来的脚本。
    即可以直接使用docker了

go语言

Go 语言,也被称为 Golang,是由 Google 开发的一种静态强类型、编译型的编程语言。Go 语言拥有 C 语言的效率、Python 语言的易读性以及并发处理能力强等特性。

Go 语言的语法十分清晰简单,方便新手学习。同时,Go 语言提供了丰富的标准库,包括网络编程、图形处理、文本处理、数据库操作等方面,可以让开发者在无需使用第三方库的情况下,直接使用标准库完成很多功能开发。

C/C++是传统的编程语言,是面向过程和面向对象的语言,拥有完整的指针操作和内存管理功能。 而Go语言是一种现代化的编程语言,它具有垃圾回收机制,让开发者不需要过多关注内存管理问题,同时支持并发编程

此外,Go 语言是一种编译型语言,它在运行前需要先进行编译,编译后的执行效率相对高。而在编译过程中,Go 语言也会完成很多错误和问题的检测,保证了程序的质量。

最后,Go 语言在并发处理上也做得非常出色。它支持 Goroutines,类似于轻量级的线程,可以进行大规模的并行运算,非常适合需要处理高并发的网络编程和云编程。

go安装

  • 去官网上找合适的版本下载
  • 下载好后解压
tar -C /usr/local -xzf  go1.22.0.linux-amd64.tar.gz
  • 编译$HOME/.bashrc,并使其立刻生效
code  $HOME/.bashrc
  • tar:这是一个常用的Unix/Linux命令,用于处理归档/压缩文件。

  • -C /usr/local:‘-C’参数用于改变tar命令的工作目录。在这里,tar将会在’/usr/local’目录下进行操作。

  • -xzf:这三个选项用于告诉tar命令执行什么操作。

    • x:表示‘extract’,也就是解压缩。
    • z:表示tar命令应使用gzip来解压或压缩文件。
    • f:表示‘file’,也就是后面跟着的会是一个文件名。
  • go1.22.0.linux-amd64.tar.gz:这是你要解压的文件的名字。文件名表示这是Go语言1.22.0版本的Linux平台的64位安装包。

添加 export PATH=$PATH:/usr/local/go/bin
  • export:这是用于设置环境变量的 shell 命令。这告诉 shell,我们想要修改 PATH 环境变量的值。

  • PATH:这是一个特殊的环境变量,操作系统用它来查找命令行中输入的命令。当你在命令行中输入一个命令(比如 go),shell 会在 PATH 变量所列出的所有目录中查找这个命令。

  • $PATH:这是获取当前 PATH 环境变量值的方法。在这里,我们用冒号(:)将它与新路径连接在一起,来添加新的路径。

  • :/usr/local/go/bin:这是你要添加到 PATH 中的新路径。这是在你的系统上安装的 Go 语言二进制文件的位置。

  • =:这是赋值的操作符。在这里,它用于将新的 PATH 值(即原来的 PATH 值,后面加了新的路径)赋给 PATH 环境变量。

source $HOME/.bashrc
  • source :这是一个 Bash 命令,它会读取并在当前 Shell 会话中执行指定的文件中的命令。

  • $HOME :这是一个表示用户主目录的环境变量。在大多数系统中,这就等同于 /home/您的用户名。

  • /.bashrc :.bashrc 是一个在用户主目录下的文件,该文件包含一些定义 Bash Shell 行为的脚本。每次启动新的 Bash Shell 会话(例如新开一个终端窗口)时,.bashrc 文件中的脚本会自动执行。
    安装成功

go 配置

GOPATH 真正存放代码的路 Go 找依赖包时会根据 GOPATH 来寻找 GOPATH
目录约定有如下 个子目录。
src:您的Go源文件存放在这里。每个包在src下有自己的目录。
pkg:这个目录包含包对象。这些是编译后的Go源代码文件,用于生成可执行文件。
bin:这个目录包含可执行的命令。当您运行go install package并且go install通过src目录下的工作区定位包,Go就会将文件安装到这里。
这里以 /go为GOPATH 路径,编辑 $HOME/.bashrc 文件,将命令 export GOPATH=/go 添加到文件中,
然后执行 source $HOME/.bashrc ,之后再执行 go env 看一下效果,结果如下。

在这里插入图片描述

可以看到, $GOPATH 己经被指定了。
接下来的代码都会基于以上配置,代码路径为 $GOPATH/src/github.com/xianlubird/
mydocker 项目名称为 mydocker ,后面会基于这个路径进行开发

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

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

相关文章

ArmSoM Rockchip系列产品 通用教程 之 Camera 使用

Camera 使用 1. Camera 简介 ArmSoM系列产品使用的是mipi-csi接口的摄像头 ArmSoM-Sige7支持双摄同显: 2. RK3588硬件通路框图 rk3588支持2个isp硬件,每个isp设备可虚拟出多个虚拟节点,软件上通过回读的方式,依次从ddr读取每…

SQL无列名注入

SQL无列名注入 ​ 前段时间,队里某位大佬发了一个关于sql注入无列名的文章,感觉好像很有用,特地研究下。 关于 information_schema 数据库: ​ 对于这一个库,我所知晓的内容并不多,并且之前总结SQL注入的…

React多个echarts图表在一个页面的使用

前景 很多情况下图标都是一个,我们大概率会像下面代码一样的做法 大概流程就是获取到数据后执行初始化,因为先初始化后异步请求再设置state里面的数据回导致无法正常显示echarts(除非再次调用setOption)下面就记录下自己解决过程源码 https://github.com/superBiuBiuMan/react-…

《秦时明月》IP新高度:与陕西历史博物馆共同书写文化传承新篇章!

在IP产业风起云涌的今天,如何以创意和匠心为传统文化注入新的活力,成为了摆在每一位文化工作者面前的重要课题。近日,《秦时明月》作为一部深受观众喜爱的国产动画IP,在迎来其十七周年之际,联手陕西历史博物馆&#xf…

线性dp:P2679 子串

1.P2679 子串 传送门https://www.luogu.com.cn/problem/P2679这道题是公共子串问题的变种,但是我第一时间确实没想到转移方程(写少了) 一开始看了题解也没太看懂,直到自己模拟一遍(模拟数据便于理解原理)…

#WEB前端(HTML属性)

1.实验:a,img 2.IDE:VSCODE 3.记录: a: href插入超链接 默认情况下在本窗口打开链接, target可以设置打开的窗口,parent在父窗口打开,blank新开串口打开,top在顶层串口打开,self为默认在本窗口打开 img: 插入图片 可以插…

持续集成(CICD)- Git版本管理工具,Gitee线上仓库

文章目录 一、学习目标:二、什么是Git工具三 、Git环境搭建(windows系统)四、Gitee设置(私钥和公钥绑定)五、Git结合Gittee进行基本设置(重要)六、在Gitee上新建仓库私有仓库(非空仓库)七、Git拉取线上仓库代码,提交代码(重要)八、Git解决版本冲突问题(重要)场景一…

LeetCode 刷题 [C++] 第45题.跳跃游戏 II

题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j < n 返回到达 nums[n …

YOLOv9独家原创改进|增加SPD-Conv无卷积步长或池化:用于低分辨率图像和小物体的新 CNN 模块

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、文章摘要 卷积神经网络(CNNs)在计算即使觉任务中如图像分类和目标检测等取得了显著的成功。然而&#xff0c;当图像分辨率较低或物体较小时&…

每日一题 — 复写零

1089. 复写零 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 首先找到最后一个复写的数&#xff1a; 双指针算法&#xff1a; 1、先判断 cur 位置上的值 2、然后决定 dest 移动一步还是两步 3、然后判断 dest 是否到终点了 4、最后 cur 处理越界的情况 arr[n-1] …

Javaweb之SpringBootWeb案例之自动配置的原理分析的详细解析

3.2.3 原理分析 3.2.3.1 源码跟踪 前面我们讲解了在项目当中引入第三方依赖之后&#xff0c;如何加载第三方依赖中定义好的bean对象以及配置类&#xff0c;从而完成自动配置操作。那下面我们通过源码跟踪的形式来剖析下SpringBoot底层到底是如何完成自动配置的。 源码跟踪技巧…

QPaint绘制自定义仪表盘组件03

网上视频抄的&#xff0c;用来自己看一下&#xff0c;看完就删掉 ui mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QDebug> #include <QtMath> #include <QDialog> #include <QPainter> #include …

嵌入式中汇编语言的基本实现

大家好&#xff0c;今天给大家分享&#xff0c;GNU汇编的语法。 第一&#xff1a;汇编简介 GNU 汇编语法适用于所有的架构&#xff0c;并不是 ARM 独享的&#xff0c;GNU 汇编由一系列的语句组成&#xff0c; 每行一条语句&#xff0c;每条语句有三个可选部分&#xff0c;如下…

java List.forEach 引发的生产投诉

代码运行时直接抛异常报错&#xff0c;这个算是不幸中的万幸&#xff0c;至少可以及时发现并去解决代码运行不报错&#xff0c;但是业务逻辑莫名其妙的出现各种奇怪问题&#xff0c;这种就比较悲剧了&#xff0c;因为这个问题稍不留神的话&#xff0c;可能就会给后续业务埋下隐…

【C语言】熟悉文件顺序读写函数

前言 本篇详细介绍了 文件顺序读写常用函数&#xff0c;快来看看吧~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 ​编辑 文件顺序读写函数 fgetc函数 示例 fputc函数 逐个字符写入 写入26个字母 文…

数学建模函数插值与拟合

1.脑图 2.介绍 我们自己找到的函数&#xff0c;在已知点处的函数值和要求的函数在这些点处的函数值相等&#xff0c;这个函数 就叫做未知函数的插值函数&#xff1b; 多项式函数构成的插值函数的集合叫做函数类&#xff1b; 3.拉格朗日插值法 基函数的求法和插值函数的构造…

使用QEMU搭建U-Boot+LinuxKernel+busybox+NFS嵌入式开发环境

目录 0.课程大纲1.为什么要使用QEMU学习嵌入式QEMU简介使用QEMU可以做哪些事情?当前嵌入式行业现状如何适应这种变化使用QEMU学习嵌入式有哪些好处?驱动开发技能为什么要学习Linux 2.搭建嵌入式开发基本环境2.1.安装u-boot-tools2.2.安装交叉编译工具什么是ABI和EABI 3.QEMU安…

MySQL:开始深入其数据(一)DML

在上一章初识MySQL了解了如何定义数据库和数据表&#xff08;DDL&#xff09;&#xff0c;接下来我们开始开始深入其数据,对其数据进行访问&#xff08;DAL&#xff09;、查询DQL&#xff08;&#xff09;和操作(DML)等。 通过DML语句操作管理数据库数据 DML (数据操作语言) …

第17章-文件传输协议

1. 概述 2. FTP协议 2.1 定义 2.2 端口 2.3 数据传输方式 2.4 文件传输模式 3. TFTP协议 3.1 定义&#xff1a; 4. 常用命令 1. 概述 场景&#xff1a;远端主机和本地服务器 2. FTP协议 2.1 定义 FTP(File Transfer Protocol)&#xff1a;文件传输协议&#xff1b;…

DataX及Datax-web杂记

&#x1f47d;个人博客&#xff1a;https://everspring.github.io/ &#x1f47d;公众号&#xff1a;爱历史的IT男 一. DataX调试 DataX之前调试不是很方便&#xff0c;要打包后才能调试。23年7月后一位叫"FuYouJ "的开源者提交了datax-example模块&#xff0c;就方…