如何构建 Go 应用的 Docker 镜像 | 您所在的位置:网站首页 › 制作docker镜像 › 如何构建 Go 应用的 Docker 镜像 |
在部署 Go 应用时,我们通常会使用 Docker 镜像来部署,那么如何构建一个 Go 应用的 Docker 镜像呢?镜像构建过程中有没有什么最佳实践呢? 这正是本文想要讲解的内容。总的来说,本文会包含 Dockerfile 编写、镜像构建、多阶段构建、交叉编译以及使用 Makefile 简化构建流程等知识点。 创建一个简单的 Go 应用为了说明整个镜像构建流程,让我们先从一个简单的 Go REST 应用开始。 该应用主要有以下功能: 访问 /,返回 Hello, Docker! => transferring dockerfile: 37B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => resolve image config for docker.io/docker/dockerfile:1 15.2s => CACHED docker-image://docker.io/docker/dockerfile:1@sha256:42399d4635eddd7a9b8a24be879d2f9a930d0ed040a61324cfdf59ef1357b3b2 0.0s => [internal] load build definition from Dockerfile 0.0s => [internal] load .dockerignore 0.0s => [internal] load metadata for docker.io/library/golang:1.16-alpine 15.6s => [1/7] FROM docker.io/library/golang:1.16-alpine@sha256:45412fe3f5016509fc448b83faefc34e6f9e9bcc8ca1db1c54505d5528264e16 0.0s => [internal] load build context 0.1s => => transferring context: 80B 0.0s => CACHED [2/7] WORKDIR /app 0.0s => CACHED [3/7] COPY go.mod ./ 0.0s => CACHED [4/7] COPY go.sum ./ 0.0s => CACHED [5/7] RUN go mod download 0.0s => CACHED [6/7] COPY *.go ./ 0.0s => CACHED [7/7] RUN go build -o /docker-go-server-ping 0.0s => exporting to image 0.1s => => exporting layers 0.0s => => writing image sha256:17fa05342ccef20e73abc48210fff449cc49683ffd817ccc6aef35500cf91ae2 0.0s => => naming to docker.io/library/docker-go-server-ping构建完成后可以通过 docker image ls (或 docker images 简写)来查看镜像列表: $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE docker-go-server-ping latest 17fa05342cce 9 minutes ago 407MB 为镜像设置标签我们也可以通过 docker image tag 命令来为镜像设置新的标签,例如: $ docker image tag docker-go-server-ping:latest docker-go-server-ping:v1.0.0这时通过 docker image ls 就可以看到 docker-go-server-ping 镜像的两个标签: $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE docker-go-server-ping latest 17fa05342cce 12 minutes ago 407MB docker-go-server-ping v1.0.0 17fa05342cce 1 minutes ago 407MB我们还可以通过 docker image rm (简写为 docker rmi)删除镜像: $ docker image rm docker-go-server-ping:v1.0.0 Untagged: docker-go-server-ping:v1.0.0这时再查看镜像列表,v1.0.0 版本的镜像已被删除,只剩下 latest 版本了: $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE docker-go-server-ping latest 17fa05342cce 15 minutes ago 407MB 单元测试既然本文主要将 Go 的 Docker 镜像,这样就顺便简单说明如何使用 dockertest 对 Go 应用进行单元测试。 dockertest 可以在 Docker 容器中启动 Go 应用镜像并执行测试用例。 相关测试用例可以参考 main_test.go 。 在 main_test.go 中我们使用了 docker-go-server-ping:latest 镜像来运行 Go 应用: resource, err := pool.Run("docker-go-server-ping", "latest", []string{})所以在执行 go test 之前,需要先构建 docker-go-server-ping:latest 镜像: $ docker build --tag docker-go-server-ping:latest . ... $ go test -v ./ === RUN TestRespondsWithLove body Hello, Docker! |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |