Docker 是一个开源项目,能够提供简单易用的基于容器的虚拟化方案。通过将应用程序及其依赖项封装在容器中,Docker 能够消除环境变量和平台差异问题,实现一次编写,处处运行的理念。
本文将介绍如何使用 Docker 部署 Golang Web 应用程序。本文的主要目标是指导读者了解如何将一个简单的 Web 应用打包为 Docker 镜像,并在本地和远程服务器上运行。
前置知识
在阅读本文之前,读者应该掌握以下技能:
- 了解 Golang 基础语法。
- 了解 Docker 基础知识。
- 了解 Linux 基本命令.
准备工作
在开始使用 Docker 部署 Golang Web 应用程序之前,我们需要进行一些准备工作。具体如下:
安装 Golang
在官方网站 (https://golang.org/dl/) 下载最新版的 Golang 并进行安装。安装完毕后,可以通过在终端上运行以下命令来验证 Golang 是否安装成功:
$ go version
如果你看到了类似以下的输出,那么说明 Golang 安装成功了:
go version go1.16.4 linux/amd64
安装 Docker
在官方网站 (https://www.docker.com/products/docker-desktop) 下载适用于自己系统的 Docker Desktop,然后进行安装。安装完成后,可以通过运行以下命令进行验证:
$ docker version
如果您看到类似以下的输出,那么说明 Docker 安装成功了:
// javascriptcn.com 代码示例 Client: Docker Engine - Community Version: 20.10.3 API version: 1.41 Go version: go1.13.15 Git commit: 48d30b5 Built: Tue Jan 26 23:49:35 2021 OS/Arch: darwin/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.3 API version: 1.41 (minimum version 1.12) Go version: go1.13.15 Git commit: 46229ca Built: Tue Jan 26 23:48:12 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.6 GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
确保应用程序能够在本地运行
在开始部署之前,我们需要确保应用程序在本地运行良好,以确保没有任何语法错误和逻辑错误。
下面是你可以参考的简单 Go Web 应用示例:
// javascriptcn.com 代码示例 package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") }) http.ListenAndServe(":8080", nil) }
运行 Go Web 应用示例:
$ go run main.go
此时,您应该能够通过在浏览器中输入 "http://localhost:8080" 来访问您的应用程序。
构建 Docker 镜像
在确保应用程序可以在本地运行后,我们可以开始构建 Docker 镜像。
编写 Dockerfile
新建一个名为 "Dockerfile" 的文件,包含以下内容:
// javascriptcn.com 代码示例 # 基础镜像采用 ubuntu FROM ubuntu:20.04 # 在容器内创建一个 /app 目录 RUN mkdir /app # 将当前工作目录拷贝到 /app 目录 ADD . /app # 设置当前工作目录为 /app 目录 WORKDIR /app # 安装 Golang RUN apt-get update && apt-get install -y golang # 设置运行环境变量 ENV PORT=8080 # 编译程序 RUN go build -o main . # 暴露运行端口 EXPOSE 8080 # 启动 Docker 容器时运行程序 CMD ["/app/main"]
构建镜像
在 "Dockerfile" 文件所在目录中执行以下命令来构建 Docker 镜像:
$ docker build -t <your_dockerhub_username>/<your_image_name> .
其中,"" 是您在 Docker Hub 上的用户名,"" 是您为镜像指定的名称。
例如:
$ docker build -t john/golang-webapp .
运行容器
可以使用以下命令来启动新容器:
$ docker run -p 8080:8080 -t john/golang-webapp
此时,您应该能够通过在浏览器中输入 "http://localhost:8080" 来访问您的应用程序。
将镜像推送到 Docker Hub
现在,您已经成功构建了一个 Docker 镜像。让我们将其推送到 Docker Hub 上。
登录 Docker Hub
如果您已经拥有了 Docker Hub 账户,在终端上运行以下命令来登录:
$ docker login
推送镜像
运行以下命令来将您的 Docker 镜像推送到 Docker Hub:
$ docker push <your_dockerhub_username>/<your_image_name>
例如:
$ docker push john/golang-webapp
在远程服务器上部署
现在,您已经将 Docker 镜像推送到 Docker Hub 上,可以在任何支持 Docker 的服务器上使用这个镜像来运行应用程序。
在虚拟机中运行
如果您想在本地以及运行 Docker 的服务器(例如云服务器)上部署这个应用程序,那么可以用类似以下命令来运行:
$ docker run -p 8080:8080 -t <your_dockerhub_username>/<your_image_name>
在云服务器上运行
在部署到云服务器上之前,我们需要确保已经在远程服务器上安装了 Docker。您可以通过在终端中运行以下命令来检查 Docker 是否已经安装:
$ docker version
如果看到输出结果,那么说明 Docker 已经安装好了。否则,请参照 Docker 官方文档安装 Docker。
然后,使用以下命令从 Docker Hub 上拉取部署所需的镜像:
$ docker pull <your_dockerhub_username>/<your_image_name>
接下来,使用以下命令来运行容器:
$ docker run -p 8080:8080 -d <your_dockerhub_username>/<your_image_name>
在云服务器上,我们通常使用的是后台运行模式 (-d)。
总结
在本文中,我们介绍了如何使用 Docker 部署 Golang Web 应用程序。我们还演示了如何构建和推送 Docker 镜像,以及如何在某些情况下在远程服务器上部署应用程序。希望本篇文章能够帮助您开始开发自己的 Docker 镜像和部署 Golang Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653208ae7d4982a6eb42fab7