编写web测试程序

cat > hello-world.go << EOF
package main

import (
	"fmt"
	"net/http"
	"os"
)

func main() {
	http.HandleFunc("/", HelloServer)
	fmt.Printf("http://0.0.0.0:8080\n")
	http.ListenAndServe(":8080", nil)
}

func HelloServer(w http.ResponseWriter, r *http.Request) {
	name, err := os.Hostname()
	if err != nil {
		name="获取主机名失败"
	}
	fmt.Fprintf(w, "Hello, %s!", name)
}
EOF

编译

env GOOS=linux go build -o hello-world hello-world.go
chmod +x hello-world

创建Dockerfile

cat > Dockerfile << EOF
FROM alpine

LABEL maintainer="zaza <260458726@qq.com>"

ENV HTTP_VERSION   1.0.0

COPY hello-world /root/

expose 8080

CMD ["/root/hello-world"]
EOF

打镜像

docker build -t zazayaya/hello-world-go:latest .
docker build -t zazayaya/hello-world-go:1.0.0 .

测试镜像

# 运行
docker run --name hello-world-go -d -p 0.0.0.0:8080:8080 zaza-test/hello-world-go:1.0.0
# 查看
docker ps | grep hello-world-go
# 访问
curl http://localhost:8080
# 删除测试数据
docker stop hello-world-go && docker rm hello-world-go

推送镜像到dockerhub

# 输入用户密码进行登陆
docker login
# 推送镜像
docker push zazayaya/hello-world-go:latest
docker push zazayaya/hello-world-go:1.0.0

测试远程镜像

# 删除本地镜像
docker rmi zazayaya/hello-world-go:1.0.0
# 远程拉取
docker run --name hello-world-go -d -p 0.0.0.0:8080:8080 zazayaya/hello-world-go
# 测试后删除测试数据
docker stop hello-world-go && docker rm hello-world-go
# 远程拉取指定版本
docker run --name hello-world-go -d -p 0.0.0.0:8080:8080 zazayaya/hello-world-go:1.0.0
# 测试后删除测试数据
docker stop hello-world-go && docker rm hello-world-go