-bash: go: command not found_五分钟用Docker快速搭建Go开发环境

c9775f9490579b02074ae76c4701bf57.png

获取Docker镜像

我们使用官方最新稳定版的镜像 golang:latest, 获取镜像前先得确保你电脑上运行了 Docker 客户端,没有的去官网下载一下吧这里就不多说了。

下载dockerHub上的镜像直接使用命令:

docker pull golang

下载完镜像后用镜像运行一个容器:

docker run --rm -it --name go-http-demo golang bash

上面这个命令用镜像 golang创建了一个名为 go-http-demo的容器,在容器中创建了一个 Bash会话。--rm选项指定容器退出后自动移除容器。

运行完上面的命令后我们就进入了运行的容器中,运行 go version 查看以下 go的版本:

root@965425c5bdcf:/go# go version go version go1.13.6 linux/amd64root@965425c5bdcf:/go# 

你可以根据自己的需要在https://hub.docker.com/_/golang 中查找自己需要的版本的 golang镜像运行容器。

在容器中运行Go项目

我们使用《深入学习用Go编写HTTP服务器》中最后写的支持优雅关停服务的 HTTPServer的源码,将它放到 Docker容器里伺服宿主机的请求。HTTP Server的源码如下,想探究代码具体怎么实现的看链接里的文章就好了。

package mainimport ("context""fmt""log""net/http""os""os/signal""syscall")func main() {mux := http.NewServeMux()mux.Handle("/", &helloHandler{})server := &http.Server{Addr:    ":8080",Handler: mux,}// 创建系统信号接收器done := make(chan os.Signal)signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)go func() {

把源码放在本地电脑的 /Code/go/src/example.com/http-demo/main.go中,文件目录你们做的时候根据自己的情况写路径。

接下来就要把这个代码放到容器里去运行了,切到代码目录里执行如下命令:

docker run --rm -it --name go-http-demo   -v $PWD:/go/src/example.com/go-http-demo   -p 8000:8080  golang

-v选项允许我们挂载多个本地目录或者数据卷到容器中,更改会在容器内外相互同步,上面的命令将 /Code/go/src/example.com/go-http-demo/挂载到了容器的 /go/src/example.com/go-http-demo。

-p指定主机和容器的端口映射,因为代码里 HTTP服务是监听 8080端口的,所以我们将主机的 8000端口和容器的 8080端口做了映射。

执行完上面的命令,我们切换到到容器里的 Bash会话,切到代码目录运行 go run main.go后,在自己的电脑上打开浏览器访问 http:localhost:8080看到下图中的页面就证明服务器在容器里已经正常运行起来了。

5b9d95052e2a999fc58f9f68508e91e8.png

用 docker-compose 管理容器

通过上面的内容我们已经用 Docker构建好了一个 Go的开发环境,不过每次打那堆命令,还要进容器执行 go命令启动程序太费事了,我们用 docker-compose把上面那些流程自动化一下。

在项目代码根目录创建docker-compose.yml:

version: '3'services:  app:    image: golang:latest    volumes:      - $PWD:/go/src/examplecom/http_demo    ports:      - "8000:8080"    command: go run /go/src/examplecom/http_demo/main.go

如果你们项目里不允许就找个目录放这个文件,我自己就是单独有个目录里面放了好几个项目的 Docker配置文件,有 PHP项目的也有 Go项目的。

上面的编排文件里只定义了一个叫 app的服务,其他的也很容易理解我就不说了,唯一要注意的一点就是如果 yml文件在项目外 volumes里的配置就换成绝对路径不要用 $PWD了

接下来启动 docker-compose:

docker-compose up -d

如果启动不成功先不要在 daemon模式下运行把 -d去掉,就能看到具体什么错误,等调试正常了再后台启动。

代码有修改后,需要重新编译项目,针对我们的容器执行下面的命令即可

docker-compose restart

想要进入运行的容器中执行操作使用命令:

docker exec -it  bash

给我们创建的 app发送 go test命令让它在容器内执行:

docker-compose exec app go test

最近想尝试把老项目换成用 go mod管理,项目还是在用 go1.12所以我就先用 Docker搭环境,容器隔离的环境怎么瞎折腾也没事。今天做的这个开发环境还是很简单的,没有用 Dockerfile自己创建镜像, docker-compose配置文件里的设置也很简单,后面用着不顺手有更新了我再推送。下面的两篇老文章对 Docker镜像和 docker-compose讲的都比较深入,例子也多,感兴趣的可以看看。

教你如何做出想要的PHPDocker镜像

用Docker搭建Laravel开发环境

cb4eb6e0ab768f33806c524f8c6822ca.png

前期我也和很多小伙伴一样,到处收集了很多资料,后面发现很多重复的!上面都是自己整理好的!现在BAT梦想成真,我就把资料贡献出来给有需要的人!顺便求一波关注,

哈哈~各位小伙伴关注我后私信【Java】就可以免费领取哒!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值