当前位置: 首页 > news >正文

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
}

运行结果:

在这里插入图片描述

创建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命令

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

在这里插入图片描述

查看镜像

docker images

在这里插入图片描述

运行镜像

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

在这里插入图片描述

测试

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

在这里插入图片描述

注意事项

  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版本一致。

相关文章:

  • 【面试题】面试官: Vue如何实现权限管理?
  • Linux常用操作汇总:内容有点杂,但很实用
  • pytorch深度学习训练模板(分类、回归)
  • CSS进阶篇——伪类 (pseudo classes)
  • 基于affine+sift特征提取的图像配准算法matlab仿真
  • 【重温Linux】一、Ubuntu系统一些常识性的东西(这节持续更新)
  • Redis安装,性能优化
  • mysql group_concat 与 union 联合查询漏洞,数据列最大长度为341
  • 机器学习基础:统计量与抽样分布
  • 工作中整理的常用的Linux命令
  • Vue2和Vue3的区别——实例创建、响应式数据代理、v-for和v-if优先级、生命周期
  • 跑步装备推荐:2022年跑步装备选购清单
  • 多线程(进阶)
  • 如何学习HTML5 需要掌握哪些技能
  • Dinky,让 Flink SQL 纵享丝滑
  • MyBatis-Plus中的更新操作(通过id更新和条件更新)
  • easy-rules规则引擎最佳落地实践
  • 看我如何连夜自建网站背刺我的求职对手们
  • 027.将有序数组转换为二叉搜索树
  • 第五届传智杯-初赛【B组-题解】
  • 最全面的SpringMVC教程(一)——SpringMVC简介
  • OpenCV-Python小应用(六):车道线检测
  • 微信小程序介绍
  • matlab实现MCMC的马尔可夫转换MS- ARMA - GARCH模型估计
  • 华为云桌面Workspace,让你的办公更加舒适惬意