最近玩 docker 比较多,试试安装 golang
操作系统:Linux
第一步
先看一下镜像:
docker images
看一下我们目前的镜像中,是不是有go
如果有,版本不合适等,可以考虑删除,重新安装,也可以不处理,我们再安装一个我们想要的版本即可
如果没有,正好我们继续下载
第二步
下载镜像:
docker pull golang:1.18.9
这里....
唉,我一开始一直使用的是 "go.1.18.9" 就一直给我提示,找不到资源
我一直搞不懂,为啥不行,然后就改为 "golang1.18.9" 就ok了
所以说,有的时候,简写还真不可以。。。
第三步
进一步查看 golang 是不是我们指定安装的版本:
docker inspect golang:1.18.9 | grep -i version
"GOLANG_VERSION=1.18.9",
"DockerVersion": "20.10.12",
"GOLANG_VERSION=1.18.9",
输出上面这段,基本上也就清楚了。"GOLANG_VERSION=1.18.9"
确实是我们指定安装的版本。
如果同学们使用的是:
docker pull golang:latest
这样的,也可以用上面的方法,查看下载的具体版本,一般是最新的。
查看镜像版本的具体文章,可以去看看这篇:
docker镜像latest具体是哪个版本_docker latest 版本_龙枫995的博客-CSDN博客其实docker也有提供镜像具体版本的获取方式。docker 中 image 镜像管理image 中有一个inspect显示一个或多个图像的详细信息那么组合一下,就是这样:https://blog.csdn.net/longfeng995/article/details/128828905?spm=1001.2014.3001.5501
好的,镜像创建成功,我们继续下一步,走走容器
第四步
运行容器
docker run --name localhost-go -itd golang:1.18.9 bash
命令中,各项参数解释:
run | 在新容器中运行命令 |
--name | 为容器分配一个名称。上面我们分配的名称就叫"localhost-go" |
-d | 后台运行容器,并返回容器ID |
-i | 以交互模式运行容器,通常与 -t 同时使用 |
-t | 为容器重新分配一个伪输入终端,通常与 -i 同时使用 |
运行上面的命令,成功的话,会输出 容器ID
我们再用下面这个命令看一下:
docker ps
会发现,容器里已经存在了我们的 "localhost-go"
使用下面这条命令:
docker exec -it localhost-go bash
进入容器后,我们查看一下 golang 的环境变量:
go env
这样 首先是确保,go 是否正常运行的,其次 就是查看一下环境变量,好了解 go 的配置,是否需要修改等。
我们可以修改一些环境变量:
比如:
- GO111MODULE 是一个开关,通过它可以开启或关闭 go mod 模式
- GOPROXY 代理,下载一些依赖时可能会遇到翻墙等问题,可以使用阿里云的,别的也可以,比如腾讯云、七牛云等
- GOPATH GO的工作目录,也是项目存放目录
如果 GOPATH 的值是 "/go" 我们就不需要修改,否则:
go env -w GOPATH=/go
但一般不需要修改,因为默认是这样的。。
GO111MODULE 有可能是等于一个空字符串的,建议是可以打开。
go env -w GO111MODULE=on
GOPROXY 默认情况下,使用的是 "https://proxy.golang.org,direct" 这个是国外的网站域名哈,所以当我们下载依赖等等的时候,就可能会很慢,甚至还会掉线。
所以,我们需要切换成我们国内的代理:
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
我这里使用的就是 阿里云的代理。
最后我们可以再看一下修改是否成功,使用下面的命令查看 go 环境变量:
go env
好的,没有问题了。。。
但是,还缺少一个最重要的东西
那就是挂载!
进阶版
因为我们一般是在本地进行开发,按照以上的模式,容器里是不会存在相关的文件的,所以我们就需要进行挂载,将我们本地的文件等都映射到容器里。
行,推翻重来,我们先删除刚刚创建的
docker stop localhost-go
docker rm localhost-go
以上命令是:先停止容器,再关闭容器
重新创建一个容器:
docker run -itd -p 8081:8080 -v /docker/go/demo:/go --name localhost-go golang:1.18.9
命令中,各项参数解释:
run | 在新容器中运行命令 |
--name | 为容器分配一个名称。上面我们分配的名称就叫"localhost-go" |
-d | 后台运行容器,并返回容器ID |
-i | 以交互模式运行容器,通常与 -t 同时使用 |
-t | 为容器重新分配一个伪输入终端,通常与 -i 同时用 |
-v | 绑定一个卷,英文冒号前面的代表是本地路径,后面的代表是容器内的 |
运行过后,可以再用 docker ps 查看一下,一般是成功的哈
然后我们去我们本地的 挂载 "/docker/go/demo" 目录下,创建一个文件: main.go
进行编辑:
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello,World!")
}
我们再进入容器内部:
docker exec -it localhost-go bash
进入后,默认的路径是 "/go" 一般是如此的
查看这个目录下的文件:
ls
就能看到我们在本地环境下,创建的 main.go 文件,再使用 cat 查看文件内容:
cat main.go
我们再使用 go 来运行该文件:
go run main.go