开发 Golang 项目的 Docker 化案例

2024-06-22 07:04

本文主要是介绍开发 Golang 项目的 Docker 化案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开发 Golang 项目的 Docker 化案例

在这个案例中,我们将展示如何使用 Docker 容器化一个简单的 Golang Web 应用。我们将创建一个基于 Go 的 Hello World 应用,并使用 Docker 和 Docker Compose 管理容器化环境。

1. 创建 Golang Web 应用

首先,创建一个简单的 Golang Web 应用,用于展示一个简单的 Hello World 页面。

main.go:

package mainimport ("fmt""net/http"
)func helloHandler(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello, Dockerized Go App!")
}func main() {http.HandleFunc("/", helloHandler)fmt.Println("Server is running on port 8080...")http.ListenAndServe(":8080", nil)
}
2. 编写 Dockerfile

创建 Dockerfile,用于构建 Docker 镜像并运行我们的 Golang 应用。

Dockerfile:

# 使用官方 Golang 运行时镜像
FROM golang:1.18-alpine# 设置工作目录
WORKDIR /app# 复制当前目录的内容到容器的工作目录
COPY . .# 构建 Go 应用
RUN go build -o main .# 暴露应用运行的端口
EXPOSE 8080# 运行 Go 应用
CMD ["./main"]
3. 编写 Docker Compose 配置文件

使用 Docker Compose 管理容器服务,包括我们的 Golang 应用。

docker-compose.yml:

version: '3'
services:web:build: .ports:- "8080:8080"
4. 构建和运行 Docker 容器

现在,我们可以构建和运行我们的 Docker 容器。

在项目根目录下执行以下命令:

# 构建 Docker 镜像
docker-compose build# 启动服务
docker-compose up
5. 访问应用程序

Golang 应用将在 http://localhost:8080 上运行,通过浏览器或 curl 访问可以看到 “Hello, Dockerized Go App!” 的输出。

通过这个案例,我们学会了如何使用 Docker 和 Docker Compose 来容器化一个简单的 Golang Web 应用。

扩展部分:添加 Nginx 反向代理

为了展示如何将多个容器组合在一起工作,我们可以添加一个 Nginx 容器作为反向代理服务器。

1. 编写 Nginx 配置文件

创建一个简单的 Nginx 配置文件,将请求代理到 Golang 应用。

nginx.conf:

server {listen 80;server_name localhost;location / {proxy_pass http://web:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
2. 更新 Docker Compose 配置文件

使用 Docker Compose 管理容器服务,包括我们的 Golang 应用和 Nginx 服务。

docker-compose.yml:

version: '3'
services:web:build: .ports:- "8080:8080"nginx:image: nginx:latestports:- "80:80"volumes:- ./nginx.conf:/etc/nginx/nginx.conf:rodepends_on:- web
3. 构建和运行 Docker 容器

现在,我们可以构建和运行我们的 Docker 容器。

在项目根目录下执行以下命令:

# 构建 Docker 镜像
docker-compose build# 启动服务
docker-compose up
4. 访问应用程序

Golang 应用将在 http://localhost:80 上通过 Nginx 反向代理运行,通过浏览器或 curl 访问可以看到 “Hello, Dockerized Go App!” 的输出。

通过这个扩展案例,我们学会了如何使用 Docker 和 Docker Compose 来容器化一个简单的 Golang Web 应用,并通过 Nginx 实现反向代理,希望这种组合可以帮助读者理解多容器应用场景的基本概念和工作原理。

这篇关于开发 Golang 项目的 Docker 化案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083610

相关文章

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

golang版本升级如何实现

《golang版本升级如何实现》:本文主要介绍golang版本升级如何实现问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录golanwww.chinasem.cng版本升级linux上golang版本升级删除golang旧版本安装golang最新版本总结gola

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

golang中reflect包的常用方法

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录reflect包方法总结类型 (Type) 方法值 (Value) 方法reflect包方法总结

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提