简介
本指南的起始资源包括一个简单的 Go 项目和一个 Dockerfile。从这个起点开始,本指南将说明您可以通过各种方式改进使用 Docker 构建应用程序的方式。
环境设置
要遵循本指南
- 安装 Docker Desktop 或 Docker Engine
- 从 GitHub 上的应用程序示例克隆或创建一个新的仓库。
应用程序
本指南的示例项目是一个用于将消息翻译成虚构语言的客户端-服务器应用程序。
以下是项目中包含的文件概述
.
├── Dockerfile
├── cmd
│ ├── client
│ │ ├── main.go
│ │ ├── request.go
│ │ └── ui.go
│ └── server
│ ├── main.go
│ └── translate.go
├── go.mod
└── go.sum
cmd/
目录包含两个应用程序组件的代码:客户端和服务器。客户端是用于编写、发送和接收消息的用户界面。服务器接收来自客户端的消息,对其进行翻译,并将它们发送回客户端。
Dockerfile
Dockerfile 是一个文本文件,您可以在其中定义应用程序的构建步骤。您使用称为 Dockerfile 语法的特定领域语言编写 Dockerfile。
以下是本指南作为起点使用的 Dockerfile
# syntax=docker/dockerfile:1
FROM golang:1.21-alpine
WORKDIR /src
COPY . .
RUN go mod download
RUN go build -o /bin/client ./cmd/client
RUN go build -o /bin/server ./cmd/server
ENTRYPOINT [ "/bin/server" ]
以下是此 Dockerfile 的作用
# syntax=docker/dockerfile:1
此注释是 Dockerfile 解析器指令。它指定要使用的 Dockerfile 语法版本。此文件使用
dockerfile:1
语法,这是最佳实践:它确保您可以访问最新的 Docker 构建功能。FROM golang:1.21-alpine
FROM
指令使用golang
官方镜像的1.21-alpine
版本。WORKDIR /src
在容器内创建
/src
工作目录。COPY . .
将构建上下文中的文件复制到容器中的工作目录。
RUN go mod download
将必要的 Go 模块下载到容器。Go 模块是 Go 编程语言的依赖项管理工具,类似于 JavaScript 的
npm install
或 Python 的pip install
。RUN go build -o /bin/client ./cmd/client
构建
client
二进制文件,用于将消息发送到翻译,并将其放入/bin
目录。RUN go build -o /bin/server ./cmd/server
构建
server
二进制文件,用于监听客户端翻译请求,并将其放入/bin
目录。ENTRYPOINT [ "/bin/server" ]
指定容器启动时要运行的命令。启动服务器进程。
构建镜像
要使用 Dockerfile 构建镜像,您需要使用 docker
命令行工具。构建镜像的命令是 docker build
。
运行以下命令构建镜像。
$ docker build --tag=buildme .
这将创建一个标记为 buildme
的镜像。镜像标签是镜像的名称。
运行容器
您刚刚构建的镜像包含两个二进制文件,一个用于服务器,一个用于客户端。要查看翻译服务的实际效果,请运行一个托管服务器组件的容器,然后运行另一个调用客户端的容器。
要运行容器,您需要使用 docker run
命令。
从镜像中以分离模式运行一个容器。
$ docker run --name=buildme --rm --detach buildme
这将启动一个名为
buildme
的容器。在
buildme
容器中运行一个新命令,调用客户端二进制文件。$ docker exec -it buildme /bin/client
docker exec
命令将打开一个终端用户界面,您可以在其中提交消息以供后端(服务器)进程翻译。
完成测试后,您可以停止容器
$ docker stop buildme
总结
本节概述了本指南中使用的示例应用程序,并介绍了 Dockerfile 和构建。您已经成功构建了一个容器镜像并从中创建了一个容器。
相关信息
下一步
下一节将探讨如何使用层缓存来提高构建速度。