簡介

本指南的起始資源包括一個簡單的 Go 專案和一個 Dockerfile。從這個起點開始,本指南將說明您可以透過各種方式改進使用 Docker 構建應用程式的方式。

環境設定

要遵循本指南

  1. 安裝 Docker Desktop 或 Docker Engine
  2. 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 的作用

  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

執行以下命令構建映象。

$ docker build --tag=buildme .

這將建立一個標記為 buildme 的映象。映象標籤是映象的名稱。

執行容器

您剛剛構建的映象包含兩個二進位制檔案,一個用於伺服器,一個用於客戶端。要檢視翻譯服務的實際效果,請執行一個託管伺服器元件的容器,然後執行另一個呼叫客戶端的容器。

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

  1. 從映象中以分離模式執行一個容器。

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

    這將啟動一個名為 buildme 的容器。

  2. buildme 容器中執行一個新命令,呼叫客戶端二進位制檔案。

    $ docker exec -it buildme /bin/client
    

docker exec 命令將開啟一個終端使用者介面,您可以在其中提交訊息以供後端(伺服器)程序翻譯。

完成測試後,您可以停止容器

$ docker stop buildme

總結

本節概述了本指南中使用的示例應用程式,並介紹了 Dockerfile 和構建。您已經成功構建了一個容器映象並從中建立了一個容器。

相關資訊

下一步

下一節將探討如何使用層快取來提高構建速度。