编写 Go 项目的 Dockerfile 文件及生成 Docker 镜像

在实际项目开发中,我们通常会将应用程序容器化,以便在不同环境下统一部署、运行和测试。对于 Go 项目,Docker 提供了简洁而高效的容器化解决方案。本篇文章将详细介绍如何为 Go 项目编写 Dockerfile 文件,并生成 Docker 镜像。

1. Go 项目的准备

假设你已经有一个 Go 项目,并且这个项目可以正常运行。为了示范,我们假设你的 Go 项目结构如下:

go 复制代码
my-go-app/
├── main.go
├── go.mod
└── go.sum

main.go 是你的 Go 项目的入口文件,go.mod 是 Go 的模块管理文件,go.sum 用于记录模块的校验信息。 2. 在项目根目录下面创建 Dockfile 文件 3. 编辑Dockfile文件

ini 复制代码
FROM golang:1.19

ENV GO111MODULE=on \
TZ=Asia/Shanghai \
CGO_ENABLE=0 \
GOOS=linux \
GOARCH=amd64 \
GOPROXY="https://goproxy.cn,direct"

WORKDIR /APP

ADD . /APP

RUN go build -o main ./main.go

EXPOSE 9999

CMD ["/APP/main"]

FROM : 使用到的golang的镜像版本,建议和项目中使用的版本一致

ENV:golang使用到的环境变量,为了解决下载依赖慢或者失败的问题

WORKDIR:是将项目的放到容器中的位置

ADD:将项目中的所有文件放入容器的位置下

RUN:编译项目生成二进制文件

EXPOSE:运行的端口

CMD 执行项目的命令

  1. 将项目上传到服务器上

  2. 生成docker镜像

    docker build . -t 镜像名

  3. 启动容器

yaml 复制代码
docker run -d -p 8888:8888 镜像名
# 别忘了服务器的安全组

解释

  • docker run -d:以守护进程模式运行容器。
  • -p 8080:8080:将容器的 8080 端口映射到宿主机的 8080 端口,使得你可以通过浏览器访问应用。
  • --name my-go-app-container:为容器指定一个名字 my-go-app-container
  • my-go-app:运行时使用的镜像名称。

运行后,你可以通过访问 http://localhost:8080 来测试你的应用。如果一切顺利,你将看到 Go 应用的输出。

6. 其他优化和注意事项

  • 多阶段构建:通过多阶段构建,可以将构建工具和运行环境分离,减少最终镜像的体积。
  • 镜像大小:使用 Alpine 镜像作为基础镜像,可以大大减小镜像的体积。
  • 缓存:通过合理利用 Docker 缓存机制,可以加速镜像的构建过程,尤其是在依赖没有变化的情况下。

总结

本文介绍了如何为 Go 项目编写 Dockerfile 文件,并通过 Docker 构建镜像和运行容器。通过容器化技术,我们能够更轻松地管理和部署 Go 应用程序。通过 Dockerfile 的多阶段构建方式,我们可以在保证镜像体积小的同时,确保应用程序的正常运行。这种方式在开发和生产环境中都具有很大的优势。

希望这篇文章能帮助你快速掌握使用 Docker 部署 Go 项目的技巧!

相关推荐
想用offer打牌27 分钟前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
passerby60612 小时前
完成前端时间处理的另一块版图
前端·github·web components
KYGALYX2 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了2 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法2 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment3 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
草梅友仁3 小时前
墨梅博客 1.4.0 发布与开源动态 | 2026 年第 6 周草梅周报
开源·github·ai编程
Cobyte4 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
程序员侠客行4 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
Honmaple5 小时前
QMD (Quarto Markdown) 搭建与使用指南
后端