资讯专栏INFORMATION COLUMN

前端需要了解的 Docker 与 Kubernetes 知识

孙吉亮 / 476人阅读

摘要:打开终端执行,再开一个终端输入输出,则表示该服务没有问题。将服务打包成镜像,然后将镜像实例化并运行,方便部署。此处以我的账号为例,需要推送到你自己的账号。是一种自动化运维工具,本文主要需要了解,,三个概念。至此成功使用部署应用。

本文将以一个简单的示例演示如何使用 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 服务没有问题。

Docker

将 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 能帮我们做些什么。

Kubernetes

Kubernetes 是一种自动化运维工具,本文主要需要了解 Pod,Deloyment,Service 三个概念。

Pod 是Kubernetes 最基本的操作单元

Deployment 用于管理Pod

Service 提供 Pod 的对外访问接口

Minikube

Minikube 是一个轻量级的 Kubernetes 实现,会在本机创建一台虚拟机,并部署一个只包含一个节点的简单集群。由于国内网络问题,推荐使用阿里云镜像的 Minikube。本地如果搭建有问题,可以使用Play with Kubernetes。

Deployment
go-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。

Service
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/32956.html

相关文章

  • 前端需要了解 Docker Kubernetes 知识

    摘要:打开终端执行,再开一个终端输入输出,则表示该服务没有问题。将服务打包成镜像,然后将镜像实例化并运行,方便部署。此处以我的账号为例,需要推送到你自己的账号。是一种自动化运维工具,本文主要需要了解,,三个概念。至此成功使用部署应用。 本文将以一个简单的示例演示如何使用 Docker 与 Kubernetes 部署应用上线。 Http Service 首先使用 Go 语言搭建一个简单的 Ht...

    ChristmasBoy 评论0 收藏0
  • Kubernetes从上手到实践》正式上线

    摘要:有很大一部分的休息时间都用来完成了我的第一本掘金小册从上手到实践小册已经正式上线,特意送上各位小伙伴一份礼物,小册折优惠。 时间飞逝,转眼今年又要结束了。感谢还在关注的小伙伴,今年确实更新很少,能不取关的都是真爱... 今年发生了很多事情,留着过几天年终总结的时候再说。有很大一部分的休息时间都用来完成了我的第一本掘金小册 《Kubernetes 从上手到实践》 showImg(http...

    CarterLi 评论0 收藏0
  • Kubernetes从上手到实践》正式上线

    摘要:有很大一部分的休息时间都用来完成了我的第一本掘金小册从上手到实践小册已经正式上线,特意送上各位小伙伴一份礼物,小册折优惠。 时间飞逝,转眼今年又要结束了。感谢还在关注的小伙伴,今年确实更新很少,能不取关的都是真爱... 今年发生了很多事情,留着过几天年终总结的时候再说。有很大一部分的休息时间都用来完成了我的第一本掘金小册 《Kubernetes 从上手到实践》 showImg(http...

    andot 评论0 收藏0
  • Kubernetes从上手到实践》正式上线

    摘要:有很大一部分的休息时间都用来完成了我的第一本掘金小册从上手到实践小册已经正式上线,特意送上各位小伙伴一份礼物,小册折优惠。 时间飞逝,转眼今年又要结束了。感谢还在关注的小伙伴,今年确实更新很少,能不取关的都是真爱... 今年发生了很多事情,留着过几天年终总结的时候再说。有很大一部分的休息时间都用来完成了我的第一本掘金小册 《Kubernetes 从上手到实践》 showImg(http...

    leon 评论0 收藏0
  • 数人云|当K8S遇上微服务-京东金融PaaS平台思考实践

    摘要:平台上的微服务架构应用再来看一下我眼中的基于当前最流行的微服务架构的设计是什么样的,即我们平台上要运行的典型应用是什么样的。 showImg(https://segmentfault.com/img/remote/1460000010900878); 8月19日的数人云Container Meetup上,张龙老师做了《基于Kubernetes的PaaS平台的设计和思考》的精彩分享,分别...

    Imfan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<