如何运行在 Docker 容器中构建的 Go 程序

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Docker 彻底改变了开发者构建、打包和部署应用程序的方式。在本教程中,你将学习如何在 Docker 容器内运行 Go 程序,以确保有一个一致且可靠的执行环境。

Docker 简介

Docker 是一个广受欢迎的容器化平台,它允许开发者将其应用程序及其所有依赖项打包成一个单一的、可移植的容器。然后,这个容器可以轻松地部署并在任何安装了 Docker 的系统上运行,而无需考虑底层操作系统或基础设施。

什么是 Docker?

Docker 是一个开源软件平台,用于自动化软件容器内应用程序的部署、扩展和管理。容器是轻量级的、独立的、可执行的软件包,其中包含运行应用程序所需的一切,包括代码、运行时环境、系统工具和库。

为什么要使用 Docker?

Docker 为开发者和 IT 专业人员带来了诸多好处:

  1. 一致性:无论底层基础设施如何,Docker 容器都能确保应用程序以相同的方式运行。
  2. 可移植性:Docker 容器可以轻松地在不同环境(如开发、测试和生产环境)之间移动。
  3. 可扩展性:根据工作负载,Docker 使应用程序的扩展变得轻而易举。
  4. 高效性:Docker 容器轻量级,比传统虚拟机使用的资源更少,运行起来更高效。

开始使用 Docker

要开始使用 Docker,你需要在系统上安装 Docker 引擎。你可以从 Docker 官方网站(https://www.docker.com/get-started)下载并安装 Docker。安装完成后,你就可以开始创建和运行 Docker 容器了。

graph TD A[安装 Docker] --> B[创建 Docker 镜像] B --> C[运行 Docker 容器] C --> D[部署应用程序]

表 1:Docker CLI 命令

命令 描述
docker build 从 Dockerfile 创建一个 Docker 镜像
docker run 运行一个 Docker 容器
docker ps 列出正在运行的 Docker 容器
docker images 列出 Docker 镜像
docker push 将一个 Docker 镜像推送到镜像仓库
docker pull 从镜像仓库拉取一个 Docker 镜像

既然你对 Docker 有了基本的了解,接下来让我们继续在 Docker 容器中构建一个 Go 应用程序。

在 Docker 中构建 Go 应用程序

创建一个 Go 应用程序

让我们从创建一个简单的 Go 应用程序开始。创建一个名为 main.go 的新文件,并包含以下内容:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, LabEx!")
    })

    fmt.Println("Starting server on :8080")
    http.ListenAndServe(":8080", nil)
}

这个 Go 应用程序监听端口 8080,并在接收到对根 URL(/)的请求时,返回消息“Hello, LabEx!”。

构建一个 Docker 镜像

要在 Docker 容器中运行这个 Go 应用程序,我们需要创建一个 Docker 镜像。创建一个名为 Dockerfile 的新文件,并包含以下内容:

FROM golang:1.18-alpine
WORKDIR /app
COPY..
RUN go build -o main.
CMD ["./main"]

这个 Dockerfile:

  1. 使用官方的 golang:1.18-alpine 镜像作为基础镜像。
  2. 将工作目录设置为 /app
  3. 将 Go 应用程序代码复制到容器中。
  4. 构建 Go 应用程序并创建一个名为 main 的可执行文件。
  5. 设置容器启动时运行 main 可执行文件的命令。

构建 Docker 镜像

要构建 Docker 镜像,在与 Dockerfile 相同的目录中运行以下命令:

docker build -t my-go-app.

此命令构建一个标签为 my-go-app 的 Docker 镜像。

验证 Docker 镜像

你可以通过运行以下命令来列出系统上可用的 Docker 镜像:

docker images

你应该会在列表中看到 my-go-app 镜像。

既然我们已经为 Go 应用程序创建了一个 Docker 镜像,接下来让我们在 Docker 容器中运行它。

在 Docker 中运行 Go 应用程序

运行 Docker 容器

要在 Docker 容器中运行 Go 应用程序,请使用以下命令:

docker run -p 8080:8080 my-go-app

此命令:

  1. 运行 my-go-app Docker 镜像。
  2. 将容器的端口 8080 映射到主机的端口 8080,这样你就可以从本地机器访问该应用程序。
graph TD A[Docker 主机] --> B[Docker 容器] B --> C[Go 应用程序] A --"HTTP 8080"--> B

验证正在运行的容器

你可以通过运行以下命令来列出正在运行的 Docker 容器:

docker ps

你应该会在列表中看到 my-go-app 容器。

访问 Go 应用程序

要访问在 Docker 容器中运行的 Go 应用程序,打开一个网页浏览器并导航到 http://localhost:8080。你应该会看到显示的消息“Hello, LabEx!”。

停止 Docker 容器

要停止正在运行的 Docker 容器,请使用以下命令:

docker stop <容器 ID>

<容器 ID> 替换为正在运行的容器的 ID,你可以通过运行 docker ps 命令找到该 ID。

总结

在本教程中,你学习了如何:

  1. 创建一个简单的 Go 应用程序。
  2. 为 Go 应用程序构建一个 Docker 镜像。
  3. 在 Docker 容器中运行 Go 应用程序。
  4. 访问在 Docker 容器中运行的 Go 应用程序。

通过使用 Docker 对 Go 应用程序进行容器化,你可以确保在不同环境中进行一致且可靠的部署,从而更轻松地开发、测试和部署你的应用程序。

总结

在本教程结束时,你将对如何在 Docker 容器中构建并运行 Go 应用程序有扎实的理解,从而能够轻松地在不同环境中分发和部署你的软件。Docker 的容器化技术简化了开发和部署过程,使你能够专注于编写优秀的代码。