meowrain

MeowRain

Life is Simple

Docker容器技术

原文链接: https://www.yuque.com/qingkongxiaguang/zwhkpi/kq6rlg Docker容器技术 Docker是一门平台级别的技术,涉及的范围很广,所以,在开始之前,请确保你完成:Java SpringBoot 篇(推荐完成SpringCloud篇再来)视频教程及之前全部路线,否则学习会非常吃力,另外推荐额外掌握:《计算机网络》、《操作系统》相关知识。学一样东西不能完全靠记忆来完成,而是需要结合自己所学的基础知识加以理解,一般来说,单凭记忆能够掌握的东西往往是最廉价的。 **Docker官网:**https://www.docker.com **课前准备:**配置2C2G以上Linux服务器一台,云服务器、虚拟机均可。 容器技术入门 随着时代的发展,Docker也逐渐走上了历史舞台,曾经我们想要安装一套环境,需要花费一下午甚至一整天来配置和安装各个部分(比如运行我们自己的SpringBoot应用程序,可能需要安装数据库、安装Redis、安装MQ等,各种各样的环境光是安装就要花费很多时间,真的是搞得心态爆炸),而有了Docker之后,我们的程序和环境部署就变得非常简单了,我们只需要将这些环境一起打包成一个镜像。而到服务器上部署时,可以直接下载镜像实现一键部署,是不是很方便? 包括我们在学习SpringCloud需要配置的各种组件,可能在自己电脑的环境中运行会遇到各种各样的问题(可能由于电脑上各种环境没配置,导致无法运行),而现在只需要下载镜像就能直接运行,所有的环境全部在镜像中配置完成,开箱即用。 真的有这么神奇吗?我们来试试看。 环境安装和部署 首先我们还是先将Docker环境搭建好(建议和我同一个环境,不然出了问题只能自己想办法了),这里我们使用: Ubuntu 22.04 操作系统 Docker分为免费的CE(Community Edition)社区版本和EE(Enterprise Edition)企业级付费版本,所以我们这里选择docker-ce进行安装。官方安装文档:https://docs.docker.com/engine/install/ubuntu/ 首先安装一些工具: 1 sudo apt-get install ca-certificates curl gnupg lsb-release 不过在Ubuntu22.04已经默认安装好了。接着安装官方的GPG key: 1 2 3 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 最后将Docker的库添加到apt资源列表中: 1 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 接着我们更新一次apt: 1 sudo apt update 最后安装Docker CE版本:

Docker用代理拉取镜像

配置代理 打开/usr/lib/systemd/system/docker.service,在[Service]域中添加以下参数: 1 2 3 Environment="HTTP_PROXY=http://proxy-addr:port/" # 代理服务器地址 Environment="HTTPS_PROXY=http://proxy-addr:port/" # https Environment="NO_PROXY=localhost,127.0.0.1" # 哪些地址不需要走代理 更新配置,启动服务 1 2 systemctl daemon-reload systemctl restart docker.service

Go实现递归向下分析

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 package main import ( "bufio" "fmt" "os" "strings" ) var ( str []byte pointer int error_str string = "Error: 非法的符号串" withNoSharp string = "Error: 符号串必须以#结尾" ) // 打印颜色设置 const Red = "\033[31m" const Green = "\033[32m" const Reset = "\033[0m" const Yellow = "\033[33m" func match(token byte) { if pointer >= len(str) { errors(error_str) return } if str[pointer] == token { pointer++ } else { errors(error_str) } } func errors(info string) { fmt.

Go数组和切片联系

Go数组和切片练习 数组 练习1:证明当数组赋值时,发生了数组内存拷贝。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package main import "fmt" func main() { arr1 := new([5]int) arr2 := arr1 arr2[1] = 3 fmt.Println(arr1) //&[0 3 0 0 0] fmt.Println(arr2) //&[0 3 0 0 0] arr3 := [5]int{1, 2, 3, 4, 5} arr4 := &arr3 //使用&获取地址,修改arr4也会修改arr3 arr4[2] = 6 fmt.Println(arr3) //[1 2 6 4 5] fmt.

Go接口

Go 接口 接口定义 Go语言提倡面向接口编程。 指针接收者实现接口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 package main import "fmt" // 接口定义 type USB interface { Connect() Disconnect() } type Laptop struct { name string version string } type Desktop struct { name string version string } // 实现USB接口 func (laptop *Laptop) Connect() { fmt.

Go文件读写

参考文档:https://www.liwenzhou.com/posts/Go/file/ 读取文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package main import ( "fmt" "io" "os") func main() { file, err := os.Open("./data.txt") if err != nil { fmt.Println("open file err:", err) return } defer file.Close() var tmp = make([]byte, 1024) n, err := file.Read(tmp) if err == io.EOF { fmt.Println("文件读取完毕") return } fmt.Printf("读取了%d字节数据\n", n) fmt.

Go语言 Web框架Gin

Go 语言 Web 框架 Gin 参考 https://docs.fengfengzhidao.com https://www.liwenzhou.com/posts/Go/gin/#c-0-7-2 返回各种值 返回字符串 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "helloworld") }) router.Run(":8080") } 返回 json 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 package main import ( "net/http" "github.
0%