Skip to content

介绍

原文:https://docs.docker.com/build/guide/intro/

本指南的起始资源包括一个简单的 Go 项目和一个 Dockerfile。从这个起点开始,本指南将展示多种方法来改进您使用 Docker 构建应用程序的方式。

环境设置

要遵循本指南:

  1. 安装 Docker Desktop 或 Docker Engine
  2. GitHub 上的应用示例 克隆或创建新的仓库

应用程序

本指南的示例项目是一个用于将消息翻译成虚构语言的客户端-服务器应用程序。

以下是项目中包含的文件概览:

text
.
├── Dockerfile
├── cmd
│   ├── client
│   │   ├── main.go
│   │   ├── request.go
│   │   └── ui.go
│   └── server
│       ├── main.go
│       └── translate.go
├── go.mod
└── go.sum

cmd/ 目录包含了两个应用组件的代码:客户端和服务器。客户端是一个用于编写、发送和接收消息的用户界面。服务器从客户端接收消息,将它们翻译后发送回客户端。

Dockerfile

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 的作用如下:

  1. # syntax=docker/dockerfile:1

    此注释是 Dockerfile 解析器指令。它指定使用哪个版本的 Dockerfile 语法。此文件使用 dockerfile:1 语法,这是最佳实践:它确保您可以使用最新的 Docker 构建功能。

  2. FROM golang:1.21-alpine

    FROM 指令使用 golang 官方镜像的 1.21-alpine 版本。

  3. WORKDIR /src

    在容器内创建 /src 工作目录。

  4. COPY . .

    将构建上下文中的文件复制到容器中的工作目录。

  5. RUN go mod download

    将必要的 Go 模块下载到容器中。Go 模块是 Go 编程语言的依赖管理工具,类似于 JavaScript 的 npm install 或 Python 的 pip install

  6. RUN go build -o /bin/client ./cmd/client

    client 二进制文件构建到 /bin 目录,用于发送要翻译的消息。

  7. RUN go build -o /bin/server ./cmd/server

    server 二进制文件构建到 /bin 目录,用于监听客户端的翻译请求。

  8. ENTRYPOINT [ "/bin/server" ]

    指定容器启动时运行的命令。启动服务器进程。

构建镜像

使用 Dockerfile 构建镜像时,您需要使用 docker 命令行工具。构建镜像的命令是 docker build

运行以下命令来构建镜像。

console
docker build --tag=buildme .

这将创建一个带有 buildme 标签的

镜像。镜像标签是镜像的名称。

运行容器

您刚刚构建的镜像包含两个二进制文件,一个用于服务器,另一个用于客户端。要看到翻译服务的实际效果,请运行托管服务器组件的容器,然后运行另一个调用客户端的容器。

要运行容器,您需要使用 docker run 命令。

  1. 以分离模式运行来自镜像的容器。

    console
    docker run --name=buildme --rm --detach buildme

    这将启动名为 buildme 的容器。

  2. buildme 容器中运行一个新命令以调用客户端二进制文件。

    console
    docker exec -it buildme /bin/client

docker exec 命令打开一个终端用户界面,您可以在其中提交消息以供后端(服务器)进程翻译。

完成测试后,您可以停止容器:

console
docker stop buildme

总结

本节为您提供了本指南中使用的示例应用程序的概览,介绍了 Dockerfiles 和构建过程。您已成功构建了一个容器镜像并从中创建了一个容器。

相关信息:

下一步

下一节将探讨如何使用层缓存来提高构建速度。