Golang 如何应用Docker化
Docker是一个容器化平台,可以在隔离环境中构建、运行和管理应用程序。在容器中,软件、库和配置文件被捆绑在一起并相互隔离。Golang是一种开源、过程化和静态类型的编程语言。本文将讨论如何使用Docker开发和部署Golang应用程序。
将Golang应用程序容器化
作为本教程的一部分,我们将创建一个简单的Golang应用程序作为REST API。
步骤1: 运行以下命令创建一个新的Golang项目。
$ mkdir docker-go
$ cd docker-go
$ go mod init dockergo

步骤2: 将以下内容复制到新文件main.go中。
$ touch main.go
package main
// 导入 http 和 mux 包
import (
"encoding/json"
"log"
"net/http"
"github.com/gorilla/mux"
)
func main()
{
// 创建一个新的路由器实例
router := mux.NewRouter()
// 创建一个新的控制器以处理“/”端点的响应
router.HandleFunc("/", func(rw http.ResponseWriter, r *http.Request)
{
response := map[string]string{
"response": "Dockerizing Go Application",
}
// 设置响应
json.NewEncoder(rw).Encode(response)
})
// 在控制台上输出日志
log.Println("⚡️[bootup]: Server is running at port: 5000")
http.ListenAndServe(":5000", router)
// 在端口5000上启动服务器
}
步骤3: 您可以通过运行以下命令启动应用程序。
$ go run main.go

项目结构: 此时的项目结构如下所示。

用于开发的Dockerfile: 为我们的React项目的开发阶段创建一个Dockerfile。让我们将其命名为Dockerfile.dev。
$ touch Dockerfile.dev

步骤4: 将以下命令粘贴到新创建的文件中。
# Latest golang image on apline linux
FROM golang:1.17-alpine
# 工作目录
WORKDIR /docker-go
# 安装依赖项
COPY go.mod go.sum ./
RUN go mod download
# 复制所有文件
COPY . .
# 启动我们的应用程序
CMD ["go", "run", "main.go"]
# 暴露服务器端口
EXPOSE 5000
步骤5: 现在,使用docker build命令创建一个docker镜像。
$ docker build -f Dockerfile.dev -t [name:tag] .
这里,
- -f: docker文件的路径
- -t: 图像的名称和标记
- **.:
构建过程完成后,您将收到新镜像的ID和标签。

步骤6: 通过运行以下命令创建一个docker容器。
$ docker run -d -it –-rm -p [host_port]:[container_port] --name [container_name] [image_id/image_tag]

这里,
- -d: 后台运行容器并打印容器ID
- -it: 创建交互式容器
- -p: 映射主机端口到容器端口
- –name: 为容器指定名称
- –rm: 当容器退出时删除容器。
步骤7: 运行以下命令以验证容器是否已成功创建
$ docker container ps

步骤8: 打开http://localhost:5001/ 以验证构建过程。

生产Dockerfile: 观察Docker映像,您将看到我们的简单go应用程序占用了一半的存储空间。因此,我们将减小图像的大小以进行生产部署。
$ docker images

步骤9: 下一步是创建生产模式的Dockerfile。
$ touch Dockerfile

# 最新版本的alpine linux的golang镜像
FROM golang:1.17 as builder
# 环境变量
ENV GOOS linux
ENV CGO_ENABLED 0
# 工作目录
WORKDIR /docker-go
# 安装依赖项
COPY go.mod go.sum ./
RUN go mod download
# 复制所有文件
COPY . .
# 构建应用程序
RUN go build -o docker-go
# 获取最新的nginx镜像
FROM alpine:3.16 as production
# 证书
RUN apk add --no-cache ca-certificates
# 从builder复制已构建的资源
COPY --from=builder docker-go .
# 启动我们的应用程序
CMD ./docker-go
# 暴露服务器端口
EXPOSE 5000
步骤10: 使用更新后的Dockerfile构建镜像并创建容器。
$ docker build -t [name:tag] .


$ docker run -d -it -–rm -p [host_port]:[container_port] –name [container_name] [image_id/image_tag]

步骤11: 应用程序的大小现在已经减小到13MB。
$ docker images

步骤12: 打开http://localhost:5002/ 以查看docker化的golang应用程序。

项目结构: 现在,项目的结构应该如下所示。

注意: 如果您在按照上述步骤时遇到困难,请参考本教程中使用的Dockerfile。
极客教程