Dockerfile 制作及使用(golang运行环境)
准备golang的简单web工程代码 main.go ,功能是浏览器请求8999端口就返回“Hello World!”如下:
package main
import(
"fmt"
"net/http"
"strings"
"log"
)
func sayhelloName(w http.ResponseWriter,r *http.Request){
r.ParseForm()//解析参数,默认是不会解析的
fmt.Println(r.Form)//这些信息是输出到服务器端的打印信息
fmt.Println("path",r.URL.Path)
fmt.Println("scheme",r.URL.Scheme)
fmt.Println(r.Form["url_long"])
fork,v:=ranger.Form{
fmt.Println("key:",k)
fmt.Println("val:",strings.Join(v,""))
}
//这个写入到w的是输出到客户端的
fmt.Fprintf(w,"Hello Wrold !")
}
func main(){
http.HandleFunc("/",sayhelloName)//设置访问的路由
err:=http.ListenAndServe(":8999",nil)//设置监听的端口
if err != nil{
log.Fatal("ListenAndServe:",err)
}
}
备注: 在MAC中编译linux版本的go执行文件需要这样:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
-
创建Dockerfile ---- 按照常规就是应该用 Dockerfile 文件名,没找到什么解释, 内容如下:
#以centos为基准镜像
FROM centos:latest
#发布者信息
MAINTAINER arno
#copy main.go编译后的可执行文件 main至docker中的/workspace目录中
COPY main /workspace/
//执行个命令打印出欢迎信息
CMD echo “hello docker!” -
构建Dockerfile为新的镜像
docker build -t hello_docker .
"hello_docker"是为新的镜像名 -
启动镜像
docker run -it -d -p 8999:8999 hello_docker:latest /bin/bash -
进入镜像docker exec -t 41428c6b1a59 /bin/bash
-
进入copy文件的位置/workspace并执行main程序
cd /workspace
./main -
浏览器输入 http://localhost:8999 查看测试结果
流程评策:启动完docker后还需进入docker启动golang主程序,这样会增加工作量,尤其是在快速迭代的工作中尽量减少这样的人工操作
下面来优化这个流程,让CI工具在执行docker run时就完成启动工作,去除人工部分
修改docker run 指令为: docker run -it -d -p 8999:8999 hello_docker:latest sh -c ‘./workspace/main’ /bin/bash
ok, 以后当CI工具执行完后,服务自动启动,无需人为干预
至此docker与golang的环节打通,为CI 持续集成打好了基础