Docker部署go项目

文章目录

  • Docker部署go项目
    • 创建go项目
    • 初始化一下项目
    • 创建一个gin项目
    • 创建Dockerfile
    • 将项目上传到服务器
    • 运行docker命令
    • 查看镜像
    • 运行镜像
    • 测试
    • 注意事项


Docker部署go项目

创建go项目

mkdir test_docker
cd test_docker
code .

初始化一下项目

go mod init test_docker

创建一个gin项目

创建一个gin项目,这里以gin为例,其他go项目都可以。

package main

import "github.com/gin-gonic/gin"

func TestDocker(c *gin.Context) {
	c.JSON(200, gin.H{
		"message": "Psych test docker...",
	})
}

func main() {
	r := gin.Default()
	r.GET("/ping", TestDocker)
	r.Run() // localhost:8080
}

运行结果:

Docker部署go项目_第1张图片

创建Dockerfile

FROM golang:1.18-alpine

# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
    GOPROXY=goproxy.io \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

WORKDIR /project/go-docker

# 复制go.mod,go.sum并且下载依赖
COPY go.* ./
RUN go mod download

# 复制项目内的所有内容并构建
COPY . .
RUN go build -o /project/go-docker/build/myapp .

EXPOSE 8080
ENTRYPOINT [ "/project/go-docker/build/myapp" ]
  • FROM golang:1.18-alpine:将golang:1.18-alpine用作此Docker构建的基础镜像
  • ENV:配置环境变量
  • WORKDIR:工作目录路径
  • COPY GO.* ./:从项目复制go.modgo.sum文件到工作目录
  • RUN go mod download:从go module下载项目依赖
  • COPY . .:讲项目中的有内容复制到工作目录中
  • RUN go build -o /project/go-docker/build/myapp .:在工作目录中构建我们的项目并将其/project/go-docker/build/myapp 作为二进制文件输出
  • EXPOSE 8080:告诉docker代码将暴露端口8080
  • ENTRYPOINT [ "/project/go-docker/build/myapp" ]:当运行这个镜像的容器时,它将从我们的构建可执行文件开始执行

将项目上传到服务器

  1. 将 test_docker 文件夹打包成一个压缩包 test_docker.zip

  2. 通过ftp上传到linux

  3. 解压缩 test_docker.zip 文件

    Docker部署go项目_第2张图片

运行docker命令

docker build -f Dockerfile -t test-go-docker:latest .
  • -f flag 是我们的Dockerfile.
  • -t tag 是镜像标签。
  • .命令是当前文件夹下的Dockerfile.

Docker部署go项目_第3张图片

查看镜像

docker images

Docker部署go项目_第4张图片

运行镜像

docker run -d -p 8080:8080 test-go-docker:latest

在这里插入图片描述

测试

浏览器输入:http://192.168.74.128:8080/ping

Docker部署go项目_第5张图片

注意事项

  1. 要配置ENVGOPROXY否则无法下载镜像;
  2. 可以通过命令行(termnal) go env 查询 goproxy 的配置,默认goproxy.org那个肯定是不行的,需要换成 https://goproxy.cn,direct或者 goproxy.io,但是有的时候https://goproxy.cn,direct的那个地址不见得好用,会出现 **invalid proxy URL missing scheme: direct**的问题,那么我们就换成 **goproxy.io**的这个一般就好了;
  3. 基础镜像版本要和 go mod 中的go版本一致。

你可能感兴趣的:(Docker,Go精进,docker,golang,容器,学习)