因为我部署的是一个简单的Gin框架的web程序,所以确保腾讯云的端口是打开的,默认是不打开的,要通过腾讯云官网打开。
1 部署方式一
将go程序打包到腾讯云编译。
1.1 创建一个工程
helloDocker
├── Dockerfile
├── go.mod
├── go.sum
└── main.go
1.2 创建main.go
main.go
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
// 1.创建路由
r := gin.Default()
// 2.绑定路由规则,执行的函数
// gin.Context,封装了request和response
r.GET("/hello", func(c *gin.Context) {
c.JSON(200, gin.H{"msg": "hello docker!", "status": 200})
})
// 3.监听端口,默认在8080
// Run("里面不指定端口号默认为8080")
r.Run(":8000")
}
1.3 创建Dockerfile
Dockerfile
FROM golang:1.16.6-alpine
#创建文件夹
RUN mkdir /app
#将Dockerfile 中的文件存储到/app下
ADD . /app
# 设置工作目录
WORKDIR /app
ENV GO111MODULE=on
ENV GOPROXY="https://goproxy.io"
# 因为已经是在 /app下了,所以使用 ./
RUN go build -o main ./main.go
# 暴露的端口
EXPOSE 8000
#设置容器的启动命令,CMD是设置容器的启动指令
CMD /app/main
1.4 创建镜像
构建镜像,docker build . 别忘记加 . 代表当前目录
hello_docker是镜像名称,不可以有大写
docker build -t hello_docker .
查看镜像:
docker image ls
启动镜像,启动后该镜像变成容器,-d是后台
docker run -d -p 8000:8000 hello_docker
访问
http://121.4.24.50:8000/hello
1 部署方式二
将go程序本地编译后上传。
首先在本地编译成Linux平台运行的可执行文件。这样的打包方式占用的文件是很小的
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go
helloGo
├── Dockerfile
└── main
1.1 创建Dockerfile
因为我是直接把可执行程序直接上传的,本身是没有可执行权限的,我们必须赋给权限
Dockerfile
# 表示依赖 alpine 最新版
FROM alpine:latest
#创建文件夹
RUN mkdir /app
#将Dockerfile 中的文件存储到/app下
ADD . /app
# 设置工作目录
WORKDIR /app
#设置时区为上海
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
ENV GO111MODULE=on
ENV GOPROXY="https://goproxy.io"
#设置权限
RUN chmod -R 777 ./main
# 设置编码
ENV LANG C.UTF-8
# 暴露的端口
EXPOSE 8000
# 运行golang程序的命令
ENTRYPOINT ["/app/main"]
1.2 创建镜像
docker build -t hello_go .
docker image ls
docker run -p 8000:8000 hello_go
访问 http://121.4.24.50:8000/hello