簡介
本指南的起始資源包括一個簡單的 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 和構建。您已經成功構建了一個容器映象並從中建立了一個容器。
相關資訊
下一步
下一節將探討如何使用層快取來提高構建速度。