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

文章目录

  • 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.rhkb.cn/news/267764.html

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

相关文章

神经网络之万能定理python-pytorch实现,可以拟合任意曲线

神经网络之万能定理python-pytorch实现,可以拟合任意曲线 博主,这几天一直在做这个曲线拟合的实验,讲道理,网上可能也有很多这方面的资料,但是博主其实试了很多,效果只能对一般的曲线还行,稍微…

114.龙芯2k1000-pmon(13)- 串口如何用

本文是讲原理图的部分,跟pmon的关系不大!! 参考手册:《龙芯2K1000处理器用户手册.pdf》 刚刚看数据手册,让我是有点惊讶,但是也让我迷惑。(一个串口复用为4个是啥意思?)…

MogaNet实战:使用MogaNet实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 论文:https://arxiv.org/pdf/2211.03295.pdf 作者多阶博弈论交互这一全新视角探索了现代卷积神经网络的表示能力。这种交互反映了不同尺度上下文中变量间的相互作用效…

#WEB前端(DIV、SPAN)

1.实验&#xff1a;DIV、SPAN 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; 类? 4.代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdev…

Python3零基础教程之数学运算专题进阶

大家好,我是千与编程,今天已经进入我们Python3的零基础教程的第十节之数学运算专题进阶。上一次的数学运算中我们介绍了简单的基础四则运算,加减乘除运算。当涉及到数学运算的 Python 3 刷题使用时,进阶课程包含了许多重要的概念和技巧。下面是一个简单的教程,涵盖了一些常…

BUUCTF---数据包中的线索1

1.题目描述 2.下载附件&#xff0c;是一个.pcap文件 3.放在wireshark中&#xff0c;仔细观察数据流&#xff0c;会发现有个叫fenxi.php的数据流 4.这条数据流是http,且使用GET方式&#xff0c;接下来我们使用http.request,methodGET 命令来过滤数据流 5.在分析栏中我们追踪htt…

VirtualBox 桥接网卡 未指定 “未能启动虚拟电脑Ubuntu,由于下述物理网卡未找到:”

解决办法&#xff0c;安装虚拟网卡&#xff0c;win11查找方式&#xff1a;控制面板→网络和共享中心→更改适配器设置 此时出现下面情况就算安装成功 但是如果报错&#xff1a;找不到指定的模块 则按下面步骤删除干净垃圾重新上面操作 先安装CCleaner, 链接:CCleaner Makes Y…

Day10:基础入门-HTTP数据包Postman构造请求方法请求头修改状态码判断

目录 数据-方法&头部&状态码 案例-文件探针 案例-登录爆破 工具-Postman自构造使用 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&#xff1a;文件…

51单片机-(定时/计数器)

51单片机-&#xff08;定时/计数器&#xff09; 了解CPU时序、特殊功能寄存器和定时/计数器工作原理&#xff0c;以定时器0实现每次间隔一秒亮灯一秒的实验为例理解定时/计数器的编程实现。 1.CPU时序 1.1.四个周期 振荡周期&#xff1a;为单片机提供定时信号的振荡源的周期…

k8s.gcr.io/pause:3.2镜像丢失解决

文章目录 前言错误信息临时解决推荐解决onetwo 前言 使用Kubernetes&#xff08;k8s&#xff09;时遇到了镜像拉取的问题&#xff0c;导致Pod沙盒创建失败。错误显示在尝试从k8s.gcr.io拉取pause:3.2镜像时遇到了超时问题&#xff0c;这通常是因为网络问题或者镜像仓库服务器的…

springcloud:3.3测试重试机制

服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用&#xff1a;http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http:/…

守护无价数据:文件备份的重要性与实用方案

一、数据安全之盾&#xff1a;文件备份的必要性 在数字化时代&#xff0c;我们生活的各个方面都与电子文件紧密相连。从工作文档、个人照片到珍贵视频&#xff0c;这些文件记录着我们的成长、工作与生活。然而&#xff0c;随着电子设备的使用频率增加&#xff0c;数据丢失的风…

mTSL: netty单向/双向TLS连接

创建证书 不管是单向tls还是双向tls(mTLS)&#xff0c;都需要创建证书。 创建证书可以使用openssl或者keytool&#xff0c;openssl 参考 mTLS: openssl创建CA证书 单向/双向tls需要使用到的相关文件: 文件单向tls双向tlsServer端Client端备注ca.key----需要保管好&#xff0…

Visual Studio C++项目远程断点调试客户现场程序方法

前言 程序开发一个很常见的场景&#xff0c;就是程序在自己本地部署调试明明一点问题都没有&#xff0c;但是部署到客户现场就问题百出&#xff0c;要调试起来还很困难&#xff0c;在自己本地也没有条件复现&#xff0c;很多时候只能靠日志一点点排查和猜测&#xff0c;耗费大…

[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

SparkStreaming在实时处理的两个场景示例

简介 Spark Streaming是Apache Spark生态系统中的一个组件&#xff0c;用于实时流式数据处理。它提供了类似于Spark的API&#xff0c;使开发者可以使用相似的编程模型来处理实时数据流。 Spark Streaming的工作原理是将连续的数据流划分成小的批次&#xff0c;并将每个批次作…

(C语言)函数详解上

&#xff08;C语言&#xff09;函数详解上 目录&#xff1a; 1. 函数的概念 2. 库函数 2.1 标准库和头文件 2.2 库函数的使用方法 2.2.1 sqrt 功能 2.2.2 头文件包含 2.2.3 实践 2.2.4 库函数文档的一般格式 3. 自定义函数 3.1 函数的语法形式 3.2 函数的举例 4. 形参和实参 4.…

Redis 命令全解析之 List类型

文章目录 命令RedisTemplate API使用场景 Redis 的 List 是一种有序、可重复、可变动的数据结构&#xff0c;它基于双向链表实现。在Redis中&#xff0c;List可以存储多个相同或不同类型的元素&#xff0c;每个元素在List中都有一个对应的索引位置。这使得List可以用来实现队列…

【计算机网络_应用层】协议定制序列化反序列化

文章目录 1. TCP协议的通信流程2. 应用层协议定制3. 通过“网络计算器”的实现来实现应用层协议定制和序列化3.1 protocol3.2 序列化和反序列化3.2.1 手写序列化和反序列化3.2.2 使用Json库 3.3 数据包读取3.4 服务端设计3.5 最后的源代码和运行结果 1. TCP协议的通信流程 在之…

oppo手机备忘录记录怎么转移到华为手机?

oppo手机备忘录记录怎么转移到华为手机?使用oppo手机已经有三四年了&#xff0c;因为平时习惯&#xff0c;在手机系统的备忘录中记录了很多重要的笔记&#xff0c;比如工作会议的要点、读书笔记、购物清单、朋友的生日提醒等。这些记录对我来说非常重要&#xff0c;我可以通过…