编写 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 项目的技巧!

相关推荐
正经教主5 小时前
【Trae+AI】和Trae学习搭建App_03:后端API开发原理与实践(已了解相关知识的可跳过)
后端·express
shepherd1265 小时前
破局延时任务(上):为什么选择Spring Boot + DelayQueue来自研分布式延时队列组件?
java·spring boot·后端·1024程序员节
开心-开心急了5 小时前
Flask入门教程——李辉 第5章: 数据库 关键知识梳理
笔记·后端·python·flask·1024程序员节
雨夜之寂5 小时前
第一章-第三节-Java开发环境配置
java·后端
郑清5 小时前
Spring AI Alibaba 10分钟快速入门
java·人工智能·后端·ai·1024程序员节·springaialibaba
zl9798996 小时前
SpringBoot-Web开发之数据响应
java·spring boot·后端
也许是_6 小时前
Spring Boot 3.X推荐Micrometer Tracing 分布式链路追踪
spring boot·分布式·后端
想学全栈的菜鸟阿董6 小时前
本地环境部署LangGraph
github
没有bug.的程序员6 小时前
Spring Boot 起步:自动装配的魔法
java·开发语言·spring boot·后端·spring·1024程序员节
235166 小时前
【MySQL】慢查寻的发现和解决优化(思维导图版)
java·后端·sql·mysql·职场和发展·数据库开发·数据库架构