更方便的在微信公众号阅读文章可以关注公众号:海生的go花园
一、go打包而进驻文件
1、安装go环境
我们可以从官方 https://go.dev/dl
下载对应系统的go安装文件。
我这里是 mac系统,x86架构,所以我选择了
安装完成后执行一下 go version 输出如下:
go version go1.19.7 darwin/amd64
2、新建一个实验目录
mkdir hello && cd hello && touch main.go
3、打开main.go 补充代码
package main
func main() {
println("hello world , hi")
}
4、build打包一个可执行二进制文件 hello
go build -o hello ./main.go
此时我们用tree命令查看一下目录:
➜ hello git:(master) ✗ tree
.
├── hello
└── main.go
0 directories, 2 files
生成了一个 hello的二进制可执行文件
5、执行一下
➜ hello git:(master) ✗ ./hello
hello world , hi
二、本地打包的环境与版本以及各种依赖问题
我们发现,在这里,我们打包的时候,首先下载了 go的环境。
如果我们是一个团队,有很多成员,那么首先就需要每个人的环境,都得一致,
这样打包后的文件才能一样。
如果go版本不一致的话,那么比我的事1.14,其他热的1.19,如果用了新的方法,他在本地发现能用,但同样的代码,到我这就不能用了。
三、docker打包
如果大家都用docker打包,在docker里面配置一样的环境和版本,就可以解决上面的问题。
我们先把 hello 这个文件删掉,只留下 main.go,如下:
➜ hello git:(master) ✗ tree
.
└── main.go
0 directories, 1 file
1、生成Dockerfile文件
touch Dockerfile
2、安装打包go的开发环境与版本
一般第一行,我们先构建环境,我们要执行go的代码,那么第一步需要安装go环境。
通过 FROM 的语法如下:
FROM [--platform=<platform>] <image> [AS <name>]
FROM指令初始化一个新的构建阶段并为后续指令设置 基本镜像。因此,有效Dockerfile必须以FROM指令开始。镜像可以是任何有效的镜像——从公共存储库中提取镜像特别容易。
在Dockerfile增加如下代码:
#go环境
FROM golang:1.19
3、把需要执行的文件复制到docker内
我们使用WORKDIR指令在docker内新建一个目录,
然后再使用COPY指令把本地需要执行的代码,复制到docker内。
#go环境
FROM golang:1.19
# 在容器内设置 /hello 为当前工作目录
RUN mkdir /hello
WORKDIR /hello
# 把文件复制到当前工作目录
COPY . .
4、执行go build 生成二进制打包文件
我们增加一个 RUN 指令来在 docker中,执行命令
在Dockerfile修改代码变成如下:
#go环境
FROM golang:1.19
# 在容器内设置 /hello 为当前工作目录
RUN mkdir /hello
WORKDIR /hello
# 把文件复制到当前工作目录
COPY . .
#执行go build生成二进制打包文件hello
RUN go build -o hello ./main.go
这样我们就在 docker内的 /hello目录下,生成了一个 hello的二进制执行文件。
5、生成对外可供docker run 执行 命令
如同在本地运行的时候,命名加到环境变量中医院。
我们这里使用 ENTRYPOINT指令
ENTRYPOINT ["executable", "param1", "param2"] // 这是 exec 模式的写法,注意需要使用双引号
#go环境
FROM golang:1.19
# 在容器内设置 /hello 为当前工作目录
RUN mkdir /hello
WORKDIR /hello
# 把文件复制到当前工作目录
COPY . .
#执行go build生成二进制打包文件hello
RUN go build -o hello ./main.go
# docker run 时执行命令
ENTRYPOINT ["./hello"]
之所以是 "./hello" 而非是 "hello"是因为,我们是在当前的目录下的二进制文件。
6、构建docker镜像
如上,我们已经把 Dockerfile 相关的配置好。
在Dockerfile同级目录,执行docker build 生成镜像
语法如下:最后的 . 代表本次执行的上下文路径。
$ docker build -t hello .
这个命名会自动寻找同名目录下的Dockerfile文件,并执行。
此时我们查看一下docker image 发现已经生成了 一个 hello镜像
➜ hello git:(master) ✗ docker image ls | grep hello
输出:
hello
或者从docker客户端上搜索如下:
7、执行,使用这个镜像
我们使用docker run 来执行镜像
➜ hello git:(master) ✗ docker run hello
输出:
hello world , hi
8、推送到远程镜像存储
本地执行命令给镜像打标签
➜ docker tag hello registry.cn-beijing.aliyuncs.com/hishengg/hello:v1
本地执行命令推送到远程镜像
➜ docker push registry.cn-beijing.aliyuncs.com/hishengg/hello:v1
9、到远程仓库查看验证
登入到阿里云
https://cr.console.aliyun.com...
可以查看到我们刚才推送的镜像
点击镜像版本,可以查看详情
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。