使用 Docker 进行 Go 应用程序引导指南
创始人
2025-07-11 02:41:09
0

为在 Docker 中部署的 Go 应用程序做准备

在使用 Go 开发 Web 应用程序时,无论是用于 HTTP 还是其他类型的服务,部署到不同的阶段或环境(本地开发、生产环境等)都是一个常见的考虑因素。在本文中,我们将探讨在 Docker 容器内集成 Golang 栈的方法,这是一个被广泛采用的方法,并使用 Docker Compose 进行编排。

准备您的 Go 应用程序

首先,您需要一个功能齐全的 Go 应用程序。以下是我们 main.go 文件的代码及其简要说明:

// /src/main.go

package main

import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    var PORT string
    if PORT = os.Getenv("PORT"); PORT == "" {
        PORT = "3001"
    }

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello World from path: %s\n", r.URL.Path)
    })

    http.ListenAndServe(":"+PORT, nil)
}

这段代码设置了一个基本的 HTTP 服务器,当接收到请求时返回“Hello World”,并根据环境变量动态分配一个端口。

创建您的 Dockerfile

接下来的步骤是创建一个 Dockerfile,该文件定义了构建和运行您的 Go 应用程序的环境。

# /Dockerfile

FROM golang:alpine

ADD ./src /go/src/app
WORKDIR /go/src/app

ENV PORT=3001

CMD ["go", "run", "main.go"]

Dockerfile 的解释如下:

  • 使用 Alpine Linux 发行版从官方 Golang 镜像构建容器,因为它轻量级。
  • 将当前目录挂载到容器的标准 Go 路径上。
  • 设置工作目录到我们应用程序的 Go 路径。
  • 定义一个名为“PORT”的环境变量,其默认值为“3001”。
  • 指定构建和运行我们应用程序的命令。

构建和运行容器

假设您已安装 Docker 运行环境,请按照以下步骤操作:

(1) 构建 Docker 镜像:

docker build . -t my-golang-app-image

(2) 从该镜像运行一个容器:

docker run -p 3030:3001 -it --rm --name my-golang-app-run my-golang-app-image

在这里,我们指示 Docker 运行一个新容器,将主机端口 3030 绑定到容器的内部端口 3001,将 stdout 输出显示在当前终端上,在其进程终止后删除容器,并为容器分配一个自定义名称。

试一试!

在您的浏览器中访问 localhost:3030,您应该会看到文本“Hello World from path: /”。要停止容器,请按 Ctrl + C。

使用 Docker Compose 进行编排

Docker Compose 允许集成多个容器。虽然对于此练习来说可能有些大材小用,但对于未来的场景是宝贵的知识。创建一个 docker-compose.yml 文件:

# /docker-compose.yml

version: '2'
services:
  my-golang-app-run:
    container_name: my-golang-app-run
    build: .
    command: go run main.go
    volumes:
      - ./src:/go/src/app
    working_dir: /go/src/app
    ports:
      - "3030:3000"
    environment:
      PORT: 3001

现在,运行以下命令:

docker-compose up

再次在浏览器中访问 localhost:3030,您将看到与之前使用 Docker Compose 相同的结果。要停止容器,请按 Ctrl + C。

为什么在本地使用 Docker?

请注意,我们从未在本地环境中安装 Go。只需安装 Docker,您就可以避免在本地环境中安装各种运行时,这在处理具有不同运行时的多个项目时非常有用。

总结

我们成功地配置了一个 Dockerfile,用于构建图像和运行具有 Go 应用程序所需环境的容器。此外,Docker Compose 定义文件允许我们在需要时无缝运行容器与其他服务。

希望这个指南对您有所帮助!

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...