第20节 Golang云原生部署
❤️💕💕Go语言高级篇章,在此之前建议您先了解基础和进阶篇。Myblog:http://nsddd.top
Go语言基础篇
Go语言100篇进阶
[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 /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"