这里只是简单实现,由于是初次接触go并且还要部署在docker上(docker也是接触不久),所以经过了无数次的搭建,出现过无数次的错误,终于搭建了一个最简单的版本,接下来会在这个简单的基础上进行一些功能的安装和设定。
部署过程中碰到的最大问题就是 docker ps -a 下已经存在了,但是 docker ps 下缺没有,即没有成功启动,查看log也是空白;这个问题大多数出在dockerfile创建的有问题,或者是启动的main.go 有问题,因为他们存在一些不能正常启动或者说不能正常加载的空间或第三方应用,所以启动失败。
及时我已经使用了鼎鼎大名的 shadowsocks 科学上网 (内含我的推介链接,感谢),但是依旧有很多应用或者插件不能下载,譬如说 gin ,不知道为何在 docker下不能下载,在正常情况下是可以的。
搭建过程:
这里搭建一个非常简单的 在docker下部署的go,并且实现了和宿主机共享文件夹,我的搭建环境是mac,linux下的过程类同。
1.docker的安装和使用
此处省略若干字 ……
2. 在本地创建好一个用于同步到go docker上的文件夹(其实同步的是这个文件夹下的内容),然后创建 main.go ;main.go 是应用的入口文件,这里不仅用来检测是否部署成功也为今后的应用做准备;
package main import ( "fmt" "net/http" ) func handlerHello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello Go docker") } func main() { http.HandleFunc("/", handlerHello) http.ListenAndServe(":8080", nil) }
注意:这里的引入避免引入一些不存在或者很难引入的应用或者插件;否则会导致docker启动失败。
3. 创建dockerfile,
## 引入最新的golan ,不设置版本即为最新版本 FROM golang ## 在docker的根目录下创建相应的使用目录 RUN mkdir -p /www/webapp ## 设置工作目录 WORKDIR /www/webapp ## 把当前(宿主机上)目录下的文件都复制到docker上刚创建的目录下 COPY . /www/webapp ## 编译 RUN go build . ## 设置docker要开发的哪个端口 EXPOSE 8080 ## 启动docker需要执行的文件 CMD go run main.go
注:创建Dockerfile时候用到的命令会有很多,这个版本用到的最简单的几个命令
4. 生成doker的images文件
docker image build -t goweb . ## 这里需要注意的是 -t 后面设置的是image的名字, 最后的点是执行当前目录下的 dockerfile 文件,这个是绝对不能省略的。
5.然后查看是否生成了对应的images文件。
由于我们在 dockerfile中的首行引入了golang并且没有指定版本所以默认的使用的原image是最新版本的,相应的加入我们设置之后的image名称为 goweb,这也是我们创建docker需要使用的景象文件。
6.创建docker
docker run -d --name golang -p 8080:8080 --net mynet --ip 172.172.0.10 -v /Volumes/work/www/Go/webapp/:/www/webapp goweb ## 这里创建的docker名字为“golan” 名称应该写在 --name 之后; ## 网络的设置,我使用了自定义的docker网络设置,见前面的几个关于docker的内容; ## 创建共享目录,吧宿主机的“/Volumes/work/www/Go/webapp/” 文件夹同步到到 docker下的 /www/webapp ,这个目录也就是我们再创建镜像时候设置的工作目录 ## 使用我们刚刚创建的镜像”goweb“ ## 映射宿主机的 8080端口到docker上的8080端口
7 检验是否成功
到此 部署go的docker完成,并且实现了和宿主机的文件夹共享,每次只需要更新宿主机的文件就可以;最后需要注意的是:每次更新 main.go 之后需要重启docker,否则docker输出的还是上次的内容。
## docker接触不久,go刚刚开始,所以有很多人是不清晰的地方请务耻笑。
如需转载请注明: 转载自26点的博客
本文链接地址: Go部署在docker上的简单实现
转载请注明:26点的博客 » Go部署在docker上的简单实现