尝试做一个Go应用程序的Docker镜像,把它部署到Kubernetes上运行。
go代码
创建Web.go
vim Web.go
如下图编写
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "欢迎使用Go语言")
}
func main() {
http.HandleFunc("/", handler)
fmt.Println("服务端口:8080") //控制台输出信息
err := http.ListenAndServe(":8080", nil) //设置监听的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
制作程序镜像
编写dockerfile
FROM golang:latest
MAINTAINER Razil "511728892@qq.com"
WORKDIR /usr/local/goweb/hellodocker
ADD . /usr/local/goweb/hellodocker
RUN go build .
EXPOSE 8080
ENTRYPOINT ["./hellodocker"]
创建镜像
docker build -t goweb .
别忘了后面有一个点 .
docker build :构建镜像
goweb: 名字为goweb
. (点号):dockerfile目录为当前目录
然后就会如下图开始构建镜像
Sending build context to Docker daemon 4.096kB
Step 1/7 : FROM golang:latest
---> 05c8f6d2538a
Step 2/7 : MAINTAINER Razil "511728892@qq.com"
---> Running in f5de5c4df6ee
Removing intermediate container f5de5c4df6ee
---> 4f4b66b2928e
Step 3/7 : WORKDIR /usr/local/goweb/hellodocker
---> Running in d483900b79d4
Removing intermediate container d483900b79d4
---> 811d05164139
Step 4/7 : ADD . /usr/local/goweb/hellodocker
---> 6514f1fa13a8
Step 5/7 : RUN go build .
---> Running in 7a1bad7df5ea
Removing intermediate container 7a1bad7df5ea
---> 281a1e178076
Step 6/7 : EXPOSE 8080
---> Running in 14fb90173498
Removing intermediate container 14fb90173498
---> 70e5c460347f
Step 7/7 : ENTRYPOINT ["./hellodocker"]
---> Running in 997cbf2145c3
Removing intermediate container 997cbf2145c3
---> a4547611b8d4
Successfully built a4547611b8d4
Successfully tagged goweb:latest
测试镜像
docker run -p 8080:8080 hellodocker
在浏览器输入masterip:8080
测试成功
将goweb镜像推送的DockerHub上
在Dockerhub上创建账号
我的账号是13806610088
首先为镜像打上标签
docker tag goweb 13806610088/k8s:goweb
然后登陆DockerHub
docker login
输入自己的账号密码
Login Succeeded 连接成功后
push自己的镜像到DockerHub上
docker push 13806610088/k8s:goweb
上传速度很慢而且很容易失败,失败后多次尝试
若多次尝试还是失败后可转用阿里云仓库
使用上面定义的goweb.yaml创建Deployment对象来运行Go应用程序的容器:
kubectl create -f goweb.yaml
创建成功
应用部署完后还不能从外部直接访问,需要把刚才Deployment对象运行的应用程序作为Kubernetes的一个Service对外暴露。
kubectl expose deployment goweb --type=NodePort --name=goweb-svc --target-port=8080
查看
kubectl get svc
可以看到主机的31551端口映射到了Kubernetes运行着应用的容器的8080端口。在浏览器里使用Kubernetes集群IP加NodePort即可访问到Kubernetes部署的Go应用程序。
成功!