简介
Docker 彻底改变了开发者构建、打包和部署应用程序的方式。在本教程中,你将学习如何在 Docker 容器内运行 Go 程序,以确保有一个一致且可靠的执行环境。
Docker 简介
Docker 是一个广受欢迎的容器化平台,它允许开发者将其应用程序及其所有依赖项打包成一个单一的、可移植的容器。然后,这个容器可以轻松地部署并在任何安装了 Docker 的系统上运行,而无需考虑底层操作系统或基础设施。
什么是 Docker?
Docker 是一个开源软件平台,用于自动化软件容器内应用程序的部署、扩展和管理。容器是轻量级的、独立的、可执行的软件包,其中包含运行应用程序所需的一切,包括代码、运行时环境、系统工具和库。
为什么要使用 Docker?
Docker 为开发者和 IT 专业人员带来了诸多好处:
- 一致性:无论底层基础设施如何,Docker 容器都能确保应用程序以相同的方式运行。
- 可移植性:Docker 容器可以轻松地在不同环境(如开发、测试和生产环境)之间移动。
- 可扩展性:根据工作负载,Docker 使应用程序的扩展变得轻而易举。
- 高效性: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:
- 使用官方的
golang:1.18-alpine镜像作为基础镜像。 - 将工作目录设置为
/app。 - 将 Go 应用程序代码复制到容器中。
- 构建 Go 应用程序并创建一个名为
main的可执行文件。 - 设置容器启动时运行
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
此命令:
- 运行
my-go-appDocker 镜像。 - 将容器的端口 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。
总结
在本教程中,你学习了如何:
- 创建一个简单的 Go 应用程序。
- 为 Go 应用程序构建一个 Docker 镜像。
- 在 Docker 容器中运行 Go 应用程序。
- 访问在 Docker 容器中运行的 Go 应用程序。
通过使用 Docker 对 Go 应用程序进行容器化,你可以确保在不同环境中进行一致且可靠的部署,从而更轻松地开发、测试和部署你的应用程序。
总结
在本教程结束时,你将对如何在 Docker 容器中构建并运行 Go 应用程序有扎实的理解,从而能够轻松地在不同环境中分发和部署你的软件。Docker 的容器化技术简化了开发和部署过程,使你能够专注于编写优秀的代码。



