摘要:打开终端执行,再开一个终端输入输出,则表示该服务没有问题。将服务打包成镜像,然后将镜像实例化并运行,方便部署。此处以我的账号为例,需要推送到你自己的账号。是一种自动化运维工具,本文主要需要了解,,三个概念。至此成功使用部署应用。
本文将以一个简单的示例演示如何使用 Docker 与 Kubernetes 部署应用上线。
Http Service首先使用 Go 语言搭建一个简单的 Http 服务,监听 8080 端口。
main.go
package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World") }) http.ListenAndServe(":8080", nil) }
打开终端执行 go run main.go,再开一个终端输入 curl http://127.0.0.1:8080 输出 Hello,World 则表示该 Http 服务没有问题。
将 Http 服务打包成 Docker 镜像,然后将镜像实例化并运行,方便部署。
构建Dockerfile
# 拉取 golang 镜像,提供程序运行环境 FROM golang:1.11 # 创建 code 目录,存放 golang 代码 RUN mkdir /code # 将当前目录下的文件拷贝到 docker 中的 code 目录 COPY . /code/ # 将 code 目录设为工作区 WORKDIR /code # 编译 go 文件,输入名字为 main 的二进制文件 RUN go build -o main . # 执行 code 目录下 main 的二进制文件 ENTRYPOINT ["/code/main"]
执行 docker build -f ./Dockerfile -t go . 构建名字为 go 的镜像。本地从 DockerHub 上拉取镜像慢,推荐使Play with Docker构建。
由上图可以看出除了我们拉取的 golang 镜像还多出了我们自己构建的 go 镜像。
验证创建一个 go 镜像的实例看下我们的 Http 服务是否已经启动,执行 docker run -dt --name go go 基于 go 镜像创建一个 go 的实例,执行 docker exec -it go sh 进入到 go 实例,执行 curl http://127.0.0.1:8080 查看是否输入 Hello,World。
执行 docker tag 43f7215dd448 pldaily/go:helloworld 给我们的 go 镜像打一个 tag,执行 docker push pldaily/go 将你的 go 镜像推到 DockerHub。此处以我的账号为例,需要推送到你自己的账号。
执行 docker rm -f go 删除之前生成的 go 实例,执行 docker run -d -p 80:8080 --name go go 将服务器 80 端口映射到 docker 内部 8080 端口,如果需要可再通过 nginx 反向代理实现部署。
虽然这样也能达到部署的目的,但是 docker 实例进程与 nginx 均需要自己维护,让我们看下 Kubernetes 能帮我们做些什么。
KubernetesKubernetes 是一种自动化运维工具,本文主要需要了解 Pod,Deloyment,Service 三个概念。
Pod 是Kubernetes 最基本的操作单元
Deployment 用于管理Pod
Service 提供 Pod 的对外访问接口
MinikubeMinikube 是一个轻量级的 Kubernetes 实现,会在本机创建一台虚拟机,并部署一个只包含一个节点的简单集群。由于国内网络问题,推荐使用阿里云镜像的 Minikube。本地如果搭建有问题,可以使用Play with Kubernetes。
Deploymentgo-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: go-deployment labels: app: go spec: # 起 3 个replicated Pods replicas: 3 # 哪个 pod 被管理 selector: matchLabels: app: go # 运行的容器 template: metadata: labels: app: go spec: containers: - name: go # 要拉取的镜像 image: pldaily/go:helloworld ports: # 暴露的端口 - containerPort: 8080
执行 kubctl create -f go-deployment.yaml 创建 Deployment,该 Deployment 会启 3个 replicated Pods。
go-service.yaml
apiVersion: v1 kind: Service metadata: name: go-service spec: type: NodePort sessionAffinity: ClientIP selector: app: go ports: # svc 暴露的端口 - port: 8080 # 对外暴露的端口 nodePort: 30081
执行 kubctl create -f go-service.yaml 启一个 service 将端口暴露出来。
至此成功使用 Kubernetes 部署应用。
参考https://my.oschina.net/u/2306127/blog/1647246
https://github.com/PLDaily/docker
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/27773.html
摘要:打开终端执行,再开一个终端输入输出,则表示该服务没有问题。将服务打包成镜像,然后将镜像实例化并运行,方便部署。此处以我的账号为例,需要推送到你自己的账号。是一种自动化运维工具,本文主要需要了解,,三个概念。至此成功使用部署应用。 本文将以一个简单的示例演示如何使用 Docker 与 Kubernetes 部署应用上线。 Http Service 首先使用 Go 语言搭建一个简单的 Ht...
摘要:有很大一部分的休息时间都用来完成了我的第一本掘金小册从上手到实践小册已经正式上线,特意送上各位小伙伴一份礼物,小册折优惠。 时间飞逝,转眼今年又要结束了。感谢还在关注的小伙伴,今年确实更新很少,能不取关的都是真爱... 今年发生了很多事情,留着过几天年终总结的时候再说。有很大一部分的休息时间都用来完成了我的第一本掘金小册 《Kubernetes 从上手到实践》 showImg(http...
摘要:有很大一部分的休息时间都用来完成了我的第一本掘金小册从上手到实践小册已经正式上线,特意送上各位小伙伴一份礼物,小册折优惠。 时间飞逝,转眼今年又要结束了。感谢还在关注的小伙伴,今年确实更新很少,能不取关的都是真爱... 今年发生了很多事情,留着过几天年终总结的时候再说。有很大一部分的休息时间都用来完成了我的第一本掘金小册 《Kubernetes 从上手到实践》 showImg(http...
摘要:有很大一部分的休息时间都用来完成了我的第一本掘金小册从上手到实践小册已经正式上线,特意送上各位小伙伴一份礼物,小册折优惠。 时间飞逝,转眼今年又要结束了。感谢还在关注的小伙伴,今年确实更新很少,能不取关的都是真爱... 今年发生了很多事情,留着过几天年终总结的时候再说。有很大一部分的休息时间都用来完成了我的第一本掘金小册 《Kubernetes 从上手到实践》 showImg(http...
摘要:平台上的微服务架构应用再来看一下我眼中的基于当前最流行的微服务架构的设计是什么样的,即我们平台上要运行的典型应用是什么样的。 showImg(https://segmentfault.com/img/remote/1460000010900878); 8月19日的数人云Container Meetup上,张龙老师做了《基于Kubernetes的PaaS平台的设计和思考》的精彩分享,分别...
阅读 2140·2021-09-04 16:40
阅读 1419·2021-08-13 15:07
阅读 3580·2019-08-30 15:53
阅读 3174·2019-08-30 13:11
阅读 1031·2019-08-29 17:22
阅读 1761·2019-08-29 12:47
阅读 1447·2019-08-29 11:27
阅读 2199·2019-08-26 18:42