第20节 Golang云原生部署

❤️💕💕Go语言高级篇章,在此之前建议您先了解基础和进阶篇。Myblog:http://nsddd.topopen in new window

Go语言基础篇open in new window

Go语言100篇进阶open in new window


[TOC]

开始

我们使用 beego 教程中学到的 bee 命令构建一个 dockerfile,当然也可以自己写:

dockerize 命令

这个命令可以通过生成Dockerfile文件来实现docker化你的应用。

例子:

生成一个以1.9.2版本Go环境为基础镜像的Dockerfile,并暴露9000端口:

bee dockerize -image="library/golang:1.9.2" -expose=8080

更多帮助信息可执行bee help dockerize.

打开 dockerfile 文件:

FROM library/golang:1.9.2

# Godep for vendoring
RUN go get github.com/tools/godep

# Recompile the standard library without CGO
RUN CGO_ENABLED=0 go install -a std

ENV APP_DIR $GOPATHD:\文档\最近的\awesome-golang\docs\code\beego
RUN mkdir -p $APP_DIR

# Set the entrypoint
ENTRYPOINT (cd $APP_DIR && ./D:\文档\最近的\awesome-golang\docs\code\beego)
ADD . $APP_DIR

# Compile the binary and statically link
RUN cd $APP_DIR && CGO_ENABLED=0 godep go build -ldflags '-d -w -s'

EXPOSE 8080

部署dockerfile

docker build -t mybeego:1.0 .

方式二:测试项目

拉取镜像:

git clone https://gitee.com/nickdemo/helloworld.git

构建镜像:

提示

  • go env -w :设置镜像
  • WORKDIR:设置工作目录(指定创建容器后,终端 默认登陆进来的工作目录
FROM golang:1.18
ADD ./ /go/src/helloworld/
WORKDIR /go/src/helloworld
RUN go env -w GOPROXY=https://proxy.golang.com.cn,https://goproxy.cn,direct
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .

FROM alpine:latest
ENV env1=env1value
ENV env2=env2value
MAINTAINER nick
WORKDIR /app/
COPY --from=0 /go/src/helloworld/app ./
EXPOSE 80
ENTRYPOINT ["./app"]
CMD ["--param1=p1","--param2=p2"]

部署dockerfile

  • –no-cache:不使用缓存
docker build -t helloworld:1.0 .

推送镜像

name:hello-world

docker push 3293172751/hello-world:tagname

tag:

docker  tag helloworld:1.0 3293172751/hello-world:1.0

push:

docker push  3293172751/hello-world:1.0

定义 k8s 应用程序载体 Pod

  • restartPolicy
    • Always:除正常退出外,都会重启我们的容器
    • Never:任何情况下,容器关闭都不会重启
    • Onfailure:程序异常退出
  • imagePullPolicy
    • Always:每次部署都重新拉取镜像
    • Never:只使用本地镜像
    • ifNotPresent:如果本地存在,则不拉取
  • command:启动命令
  • resources:对资源的限用
apiVersion v1
kind Pod 
metadata
  name: myhello-pod-demo
  namespace: default
  labels:
  	name: myhello-pod-demo
  	env: dev
spec:
  restartPolicy: Always
  containers:
  - name: myhello
  	image: 
  	imagePullPolicy: ifNotPresent
  	ports:
  	- containerPort: 80
  	command: ["./app"]
  	args: ["--param1=k8s-p1","--param2=k8s-p2"]
  	resources:
  	  limits:
  	    memory: 200Mi
  	  requests:
  	  	cpu: 100m
  	  	memory: 200Mi
 env: 
 - name: env1
   value: "k8s-env1"
 - name: env2
   value: "k8s-env2"

END 链接