在使用 Go 开发 Web 应用程序时,无论是用于 HTTP 还是其他类型的服务,部署到不同的阶段或环境(本地开发、生产环境等)都是一个常见的考虑因素。在本文中,我们将探讨在 Docker 容器内集成 Golang 栈的方法,这是一个被广泛采用的方法,并使用 Docker Compose 进行编排。
首先,您需要一个功能齐全的 Go 应用程序。以下是我们 main.go 文件的代码及其简要说明:
// /src/main.gopackage mainimport ( "fmt" "net/http" "os")func main() { var PORT string if PORT = os.Getenv("PORT"); PORT == "" { PORT = "3001" } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World from path: %s/n", r.URL.Path) }) http.ListenAndServe(":"+PORT, nil)}
这段代码设置了一个基本的 HTTP 服务器,当接收到请求时返回“Hello World”,并根据环境变量动态分配一个端口。
接下来的步骤是创建一个 Dockerfile,该文件定义了构建和运行您的 Go 应用程序的环境。
# /DockerfileFROM golang:alpineADD ./src /go/src/appWORKDIR /go/src/appENV PORT=3001CMD ["go", "run", "main.go"]
Dockerfile 的解释如下:
假设您已安装 Docker 运行环境,请按照以下步骤操作:
(1) 构建 Docker 镜像:
docker build . -t my-golang-app-image
(2) 从该镜像运行一个容器:
docker run -p 3030:3001 -it --rm --name my-golang-app-run my-golang-app-image
在这里,我们指示 Docker 运行一个新容器,将主机端口 3030 绑定到容器的内部端口 3001,将 stdout 输出显示在当前终端上,在其进程终止后删除容器,并为容器分配一个自定义名称。
试一试!
在您的浏览器中访问 localhost:3030,您应该会看到文本“Hello World from path: /”。要停止容器,请按 Ctrl + C。
Docker Compose 允许集成多个容器。虽然对于此练习来说可能有些大材小用,但对于未来的场景是宝贵的知识。创建一个 docker-compose.yml 文件:
# /docker-compose.ymlversion: '2'services: my-golang-app-run: container_name: my-golang-app-run build: . command: go run main.go volumes: - ./src:/go/src/app working_dir: /go/src/app ports: - "3030:3000" environment: PORT: 3001
现在,运行以下命令:
docker-compose up
再次在浏览器中访问 localhost:3030,您将看到与之前使用 Docker Compose 相同的结果。要停止容器,请按 Ctrl + C。
请注意,我们从未在本地环境中安装 Go。只需安装 Docker,您就可以避免在本地环境中安装各种运行时,这在处理具有不同运行时的多个项目时非常有用。
我们成功地配置了一个 Dockerfile,用于构建图像和运行具有 Go 应用程序所需环境的容器。此外,Docker Compose 定义文件允许我们在需要时无缝运行容器与其他服务。
希望这个指南对您有所帮助!
本文链接:http://www.28at.com/showinfo-26-60946-0.html使用 Docker 进行 Go 应用程序引导指南
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: 在Go中构建复杂对象: 构建器模式指南
下一篇: 使用C++数组实现简单的栈数据结构