容器化 Go 语言应用程序
容器化有助于您将应用程序及其依赖项打包到一个名为容器的单一包中。此包可以在任何平台上运行,而无需担心环境。在本节中,您将学习如何使用 Docker 容器化 Go 语言应用程序。
要容器化 Go 语言应用程序,您首先需要创建一个 Dockerfile。Dockerfile 包含在容器中构建和运行应用程序的指令。此外,在创建 Dockerfile 时,您可以遵循不同的最佳实践集来优化镜像大小并使其更安全。
创建 Dockerfile
在 Go 语言应用程序的根目录中创建一个名为 Dockerfile 的新文件。Dockerfile 包含在容器中构建和运行应用程序的指令。
以下是 Go 语言应用程序的 Dockerfile。您也可以在 go-prometheus-monitoring 目录中找到此文件。
# Use the official Golang image as the base
FROM golang:1.24-alpine AS builder
# Set environment variables
ENV CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
# Set working directory inside the container
WORKDIR /build
# Copy go.mod and go.sum files for dependency installation
COPY go.mod go.sum ./
# Download dependencies
RUN go mod download
# Copy the entire application source
COPY . .
# Build the Go binary
RUN go build -o /app .
# Final lightweight stage
FROM alpine:3.21 AS final
# Copy the compiled binary from the builder stage
COPY --from=builder /app /bin/app
# Expose the application's port
EXPOSE 8000
# Run the application
CMD ["bin/app"]理解 Dockerfile
Dockerfile 由两个阶段组成
构建阶段:此阶段使用官方 Go 语言镜像作为基础,并设置必要的环境变量。它还在容器内部设置工作目录,复制
go.mod和go.sum文件以进行依赖项安装,下载依赖项,复制整个应用程序源代码,并构建 Go 二进制文件。您使用
golang:1.24-alpine镜像作为构建阶段的基础镜像。CGO_ENABLED=0环境变量禁用 CGO,这对于构建静态二进制文件很有用。您还将GOOS和GOARCH环境变量分别设置为linux和amd64,以针对 Linux 平台构建二进制文件。最终阶段:此阶段使用官方 Alpine 镜像作为基础,并从构建阶段复制编译后的二进制文件。它还暴露应用程序的端口并运行应用程序。
您使用
alpine:3.21镜像作为最终阶段的基础镜像。您将编译后的二进制文件从构建阶段复制到最终镜像。您使用EXPOSE指令暴露应用程序的端口,并使用CMD指令运行应用程序。除了多阶段构建之外,Dockerfile 还遵循最佳实践,例如使用官方镜像、设置工作目录以及仅将必要文件复制到最终镜像。您可以通过其他最佳实践进一步优化 Dockerfile。
构建 Docker 镜像并运行应用程序
一旦有了 Dockerfile,您就可以构建 Docker 镜像并在容器中运行应用程序。
要构建 Docker 镜像,请在终端中运行以下命令
$ docker build -t go-api:latest .
构建镜像后,您可以使用以下命令在容器中运行应用程序
$ docker run -p 8000:8000 go-api:latest
应用程序将在容器内部开始运行,您可以通过 https://:8000 访问它。您还可以使用 docker ps 命令检查正在运行的容器。
$ docker ps
摘要
在本节中,您学习了如何使用 Dockerfile 容器化 Go 语言应用程序。您创建了一个多阶段 Dockerfile 来在容器中构建和运行应用程序。您还学习了优化 Docker 镜像大小并使其更安全的最佳实践。
相关信息
后续步骤
在下一节中,您将学习如何使用 Docker Compose 连接和运行多个服务,以使用 Prometheus 和 Grafana 监控 Go 语言应用程序。