Kubernetes是一个可以移植、可扩展的开源平台,使用声明式的配置并依据配置信息自动地执行容器化应用程序的管理。在所有的容器编排工具中(类似的还有 docker swarm / mesos等),Kubernetes的生态系统更大、增长更快,有更多的支持、服务和工具可供用户选择。
优势:
简单Go项目,主要提供一个登录接口,给后端Vue项目调用,运行时监听8881端口。
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type User struct {
ID int64 `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
Email string `json:"email"`
}
func main() {
router := gin.Default()
router.Any("/", func(c *gin.Context) {
c.String(http.StatusOK, "Joy")
})
// 登录
router.POST("/admin/login", userLogin)
router.Run(":8881")
}
func userLogin(c *gin.Context) {
var user User
if err := c.ShouldBind(&user); err != nil {
c.JSON(http.StatusOK, gin.H{
"code": 1,
"msg": "params error",
"data": err.Error(),
})
return
}
if user.Username != "admin" || user.Password != "123456" {
c.JSON(http.StatusOK, gin.H{
"code": 1,
"msg": "account or password error",
"data": nil,
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 0,
"msg": "success",
"data": map[string]interface{}{
"id": 1,
"username": user.Username,
"email": "[email protected]",
"token": "123456",
},
})
}
# 声明镜像来源为golang:alpine
FROM golang:alpine AS builder
# 定义变量属性值
ENV CGO_ENABLED 0
ENV GOOS linux
ENV GOPROXY https://goproxy.cn,direct
# 声明工作目录
WORKDIR /go/src/joy
# 拷贝整个项目到工作目录
COPY . .
# 编译项目文件
RUN go build -ldflags="-s -w" -o /go/src/joy/main ./main.go
##### 第二阶段构建 #####
# 声明镜像来源为alpine:latest
FROM alpine:latest
# 镜像编写者及邮箱
LABEL MAINTAINER="[email protected]"
# 声明工作目录
WORKDIR /go/src/joy
# 拷贝/go/src/joy文件夹下文件到当前工作目录
COPY --from=builder /go/src/joy/main ./main
# 声明容器的服务端口(仅仅是声明)
EXPOSE 8881
# 运行打包好的二进制
CMD ["./main"]
此处是在项目目录下进行,且我之前一登录Dockerhub;如果你没有登录Dockerhub;先执行 "docker login -u 用户名 -p 密码"登录Dockerhub;如果你使用私有库存,需要改对应镜像名称
# 构建(-f 指定dockerfile -t dockerhub用户名/仓库名:Tag)
docker build -f Dockerfile -t babytime2019/joy:v1.0.0 .
# 推送
docker push babytime2019/joy:v1.0.0
此Vue接口统一前缀统计admin开始()
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html;
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
try_files $uri $uri/ /index.html;
}
}
# 声明镜像来源为node:14.17.4
FROM node:14.17.4 AS builder
# 声明工作目录
WORKDIR /www/
# 拷贝整个web项目到当前工作目录
COPY . .
# 使用npm进行安装依赖&编译打包文件
RUN npm install --registry=http://registry.npm.taobao.org && npm run build
#################### 第二阶段构建 ####################
# 声明镜像来源为nginx:alpine, alpine 镜像小
FROM nginx:alpine
# 镜像维护者姓名或邮箱地址
LABEL MAINTAINER="[email protected]"
# 从deploy/docker/nginx/conf.d目录拷贝my.conf到容器内的/etc/nginx/conf.d/my.conf
COPY deploy/docker/nginx/conf.d/my.conf /etc/nginx/conf.d/my.conf
# 从第一阶段进行拷贝编译好的文件到/usr/share/nginx/html
COPY --from=builder /www/dist /usr/share/nginx/html
# 查看/etc/nginx/nginx.conf文件(可以不加)
RUN cat /etc/nginx/conf.d/my.conf
# 查看 /etc/nginx/conf.d/my.conf(可以不加)
RUN cat /etc/nginx/conf.d/my.conf
# 查看 文件是否拷贝成功(可以不加)
RUN ls -al /usr/share/nginx/html
此处是在项目目录下进行,且我之前一登录Dockerhub;如果你没有登录Dockerhub;先执行 "docker login -u 用户名 -p 密码"登录Dockerhub;如果你使用私有库存,需要改对应镜像名称
# 构建(-f 指定dockerfile -t dockerhub用户名/仓库名:Tag)
docker build -f Dockerfile -t babytime2019/joy-manage:v1.0.0 .
# 推送
docker push babytime2019/joy-manage:v1.0.0
此处我已创建K8s集群,这里不详细说明创建过程,大家可以看阿里云官方文档
创建命名空间,主要时为了达到项目隔离的目的
创建成功之后,我们会看到两个Pod,如果都处于"Running"状态,说明服务正常其中。
设置路径"/admin",匹配"/admin"开头的路劲,都走此服务。"www.babytime.vip"和Ingress中公网IP已解析,大家可以直接用生成的公网访问应用。