docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker部署Go服务

使用Docker构建并部署Go Web服务的详细教学

作者:程序员爱钓鱼

在现代软件开发中,应用的可移植性和环境一致性至关重要,本文将带你从零开始,实战演示如何使用 Docker 构建并部署一个 Go Web 服务,需要的可以了解下

在现代软件开发中,应用的可移植性和环境一致性至关重要。无论是在开发环境、测试环境还是生产环境,我们都希望 Go 项目能够快速部署、稳定运行。而 Docker 正是实现这一目标的关键工具。

本文将带你从零开始,实战演示如何使用 Docker 构建并部署一个 Go Web 服务。通过这个案例,你将学会将 Go 应用打包成轻量级容器镜像,并在任何地方一键运行。

一 为什么使用 Docker 部署 Go 服务

在未使用 Docker 之前,部署 Go 项目通常需要以下步骤:

1 安装 Go 环境 2 拉取源代码 3 手动编译 4 配置运行参数 5 启动服务

这种方式在多人协作或跨平台部署时非常容易出现环境不一致的问题。 而使用 Docker 部署后,只需一个镜像文件,任何服务器都可以直接运行,无需再配置环境。

使用 Docker 的好处包括:

二 创建一个示例 Go 服务

新建一个简单的 Go Web 服务项目

项目结构如下:

myapp/
├── main.go
├── go.mod
└── Dockerfile

main.go 中编写一个基础 HTTP 服务:

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, Docker! This is a Go web service.")
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("Server running on port 8080...")
    http.ListenAndServe(":8080", nil)
}

运行测试:

go run main.go

访问浏览器 http://localhost:8080 可以看到返回内容。

三 编写 Dockerfile 构建镜像

Dockerfile 是镜像构建的核心文件,它描述了如何从基础镜像一步步生成可运行的应用。

在项目根目录创建 Dockerfile 文件,内容如下:

# 使用官方 Go 镜像作为构建环境
FROM golang:1.22 AS builder

WORKDIR /app

# 拷贝项目文件
COPY go.mod .
COPY main.go .

# 下载依赖并编译可执行文件
RUN go mod tidy
RUN go build -o myapp main.go

# 使用更小的基础镜像运行可执行文件
FROM alpine:latest

WORKDIR /root/

# 从上一阶段复制可执行文件
COPY --from=builder /app/myapp .

# 暴露端口
EXPOSE 8080

# 启动服务
CMD ["./myapp"]

说明:

1 第一阶段使用官方 Go 镜像进行构建,避免污染运行镜像

2 第二阶段采用 Alpine 最小镜像,仅包含运行时可执行文件

3 多阶段构建大大减小最终镜像体积

四 构建 Docker 镜像

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

docker build -t myapp:latest .

命令说明:

构建完成后查看镜像:

docker images

可以看到类似输出:

REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
myapp        latest    e2f9b8c45e12   10 seconds ago   15MB

五 运行 Docker 容器

镜像构建完成后,直接运行容器即可启动服务:

docker run -d -p 8080:8080 myapp

参数说明:

使用浏览器访问 http://localhost:8080 可以看到返回结果:

Hello, Docker! This is a Go web service.

这表示容器中的 Go 服务已成功启动。

六 验证容器状态

查看正在运行的容器:

docker ps

输出结果:

CONTAINER ID   IMAGE    COMMAND      STATUS          PORTS                   NAMES
a3b1c5d8f7e1   myapp    "./myapp"    Up 10 seconds   0.0.0.0:8080->8080/tcp  myapp_container

查看容器日志:

docker logs a3b1c5d8f7e1

停止容器:

docker stop a3b1c5d8f7e1

七 部署到远程服务器

部署到生产环境只需两步:

1 在本地构建镜像并推送到镜像仓库

docker tag myapp registry.example.com/myapp:v1
docker push registry.example.com/myapp:v1

2 在服务器上拉取镜像并运行

docker pull registry.example.com/myapp:v1
docker run -d -p 8080:8080 registry.example.com/myapp:v1

服务器端即可直接运行服务,无需任何额外配置。

八 优化建议

1 使用 .dockerignore 文件排除无关文件,加快构建速度

.git
build
tmp
*.log

2 在 Dockerfile 中固定 Go 版本,避免编译差异 3 若是微服务项目,可使用 docker-compose 管理多个容器 4 在 CI/CD 流水线中集成构建与发布流程,实现全自动部署

九 总结

本文通过一个完整的案例展示了如何使用 Docker 部署 Go 服务。主要步骤包括:

通过 Docker,Go 应用可以实现真正的“一次构建,到处运行”,部署过程更快、更稳定、更安全。

掌握 Docker 部署,是每一个 Go 开发者迈向生产级工程实践的关键一步。

以上就是使用Docker构建并部署Go Web服务的详细教学的详细内容,更多关于Docker部署Go服务的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文