教你如何使用 Go 和 Docker

本文将教你如何使用 Go 语言来创建一个简单的应用程序,并使用 Docker 进行部署。通过本文,你将学到如何安装必要的工具、编写 Go 代码、构建 Docker 镜像以及运行 Docker 容器。接下来,我们将一步步引导你完成整个流程。

整体流程

在开始之前,我们可以简单概述一下整个过程。下面是一个简单的步骤表格:

步骤 操作 描述
1. 安装 Go brew install go (mac) 或 官方安装程序 安装 Go 语言环境
2. 创建 Go 项目 创建目录并初始化 Go 模块 创建 Go 项目文件结构
3. 编写代码 编写一个简单的 Go HTTP 服务器 创建一个基本的 web 服务
4. 创建 Dockerfile 编写 Dockerfile 文件 定义 Docker 镜像的构建方式
5. 构建 Docker 镜像 使用 Docker CLI 构建镜像 创建 Docker 镜像
6. 运行 Docker 容器 使用 Docker CLI 运行容器 启动并访问你的 Go 应用

每一步的详细操作

步骤 1: 安装 Go

首先,你需要在你的机器上安装 Go。如果你使用的是 macOS,可以使用 Homebrew 进行安装。如果你使用其他操作系统,请参考 [Go 的官方安装页面](

# 在 macOS 上安装 Go
brew install go

步骤 2: 创建 Go 项目

你需要为你的 Go 项目创建一个目录,然后初始化一个 Go 模块。逐一执行下面的命令:

# 创建项目目录
mkdir hello-go-docker
cd hello-go-docker

# 初始化 Go 模块
go mod init hello-go-docker

步骤 3: 编写代码

在这个步骤中,我们将创建一个简单的 Go HTTP 服务器,监听在8080端口。

使用你喜欢的编辑器(如 VSCode)创建一个名为 main.go 的文件,然后添加以下代码:

package main

import (
	"fmt"
	"net/http"
)

// helloHandler 处理根路径的请求
func helloHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, World!")
}

func main() {
	http.HandleFunc("/", helloHandler) // 设置路由
	fmt.Println("Listening on :8080") // 控制台输出
	http.ListenAndServe(":8080", nil) // 启动HTTP服务器
}

步骤 4: 创建 Dockerfile

接下来,我们需要创建一个 Dockerfile,这将告诉 Docker 如何构建我们的应用程序。

在项目根目录中,创建一个名为 Dockerfile 的文件,并添加以下内容:

# 使用 Go 语言的官方镜像作为基础镜像
FROM golang:1.20 AS builder

# 设置工作目录
WORKDIR /app

# 复制 Go 模块文件并下载依赖
COPY go.mod go.sum ./
RUN go mod download

# 复制源代码到工作目录
COPY . .

# 编译 Go 应用程序
RUN go build -o hello-go-docker .

# 创建一个轻量级的镜像用于运行
FROM alpine:latest  

# 设置当前工作目录
WORKDIR /root/

# 复制编译后应用程序到新镜像
COPY --from=builder /app/hello-go-docker .

# 暴露端口
EXPOSE 8080

# 指定运行应用程序的命令
CMD ["./hello-go-docker"]

步骤 5: 构建 Docker 镜像

构建 Docker 镜像很简单,只需在项目目录中运行以下命令:

# 构建 Docker 镜像
docker build -t hello-go-docker .

步骤 6: 运行 Docker 容器

最后,我们可以启动容器并访问我们的应用程序。

# 运行容器,映射端口8080
docker run -p 8080:8080 hello-go-docker

现在,可以在浏览器中访问 http://localhost:8080,你应该能看到 "Hello, World!" 的字样。

关系图

为了更直观地了解我们刚刚构建的应用程序的组成部分,下面是一个简单的关系图:

erDiagram
    APP {
        string name "hello-go-docker"
        string version "1.0"
        string language "Go"
    }
    DOCKER {
        string type "Container"
        string os "Linux"
        string port "8080"
    }
    APP ||--o| DOCKER : runs_in

结尾

祝贺你成功完成了使用 Go 和 Docker 创建简单应用的项目!通过以上步骤,你学习了如何设置环境、编写 Go 代码、构建 Docker 镜像以及运行 Docker 容器。随着对 Docker 实用程序的深入理解,你可以创建更复杂的应用程序并将其部署到生产环境。继续探索、实践并享受作为开发者的旅程!如有任何问题,请随时向我询问。