前言众所周知云计算时代,是docker,kubernetes的天下。学习使用docker和kubernetes是必选的。当然这两个应用都是基于go语言的。所以云计算时代使用go语言写服务也是极好的。那么如何将go语言服务部署到docker容器呢?

首先使用go语言实现基本http服务

1 在本机新建go工程,目录名为hellodocker

  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. )
  6. func indexHandler(w http.ResponseWriter, r *http.Request) {
  7. fmt.Fprintf(w, "hello docker")
  8. }
  9. func main() {
  10. http.HandleFunc("/", indexHandler)
  11. http.ListenAndServe(":8080", nil)
  12. }

2 编译和执行
3 打开浏览器输入 localhost:8080 当屏幕出现 “hellodocker”说明程序正常

dockerfile 制作

1 在工程目录hellodocker下,新建dockerfile文件

  1. FROM golang:latest
  2. MAINTAINER Oliver "9735252@qq.com"
  3. WORKDIR /home/goProject/hellodocker
  4. ADD . /home/goProject/hellodocker
  5. RUN go build .
  6. EXPOSE 8090
  7. ENTRYPOINT ["./hellodocker"]

注意dockerfile文件名称必须是Dockerfile,其文件必须再工程目录下。
FROM -> 母镜像
MAINTAINER -> 维护者信息
WORKDIR -> 工作目录
ADD -> 将文件复制到镜像中
RUN -> 执行操作(就跟在终端执行语句一样)
EXPOSE -> 暴露端口
ENTRYPOINT -> 程序入口
2 打开终端输入

  1. docker build -t hellodocker .

语句的意思是
docker build ->构建镜像
hellodocker -> 名字为hellodocker
. (点号) -> dockerfile目录为当前目录
如果未使用镜像服务器,比如Daccloud,阿里云等,构建速度会需要较长时间
3 查看docker镜像
在终端中输入

  1. docker images

里面显示了本机所有docker的镜像与其基本信息
4 开启docker(前台方式)
在终端输入

  1. docker run -p 8080:8080 hellodocker

语句意思:
docker run -> 运行docker镜像
-p 8080:8080 -> 将宿主机(也就是本机)的8080端口映射到容器的8080端口,此 处需要先确认本机的8080端口并未被占用,否则将无法开启
hellodocker -> 镜像名(也支持id)
5 开启docker(后台方式)
当在前台开启时候,终端无法进行其他操作,docker支持让容器在后台执行。
在终端输入

  1. docker run -p 8080:8080 -d hellodocker

此时便启动了docker容器。
我们可以在http://127.0.0.1:8080/ 访问该服务。
输出:

  1. hello docker