建置並推送您的第一個映像檔

說明

既然您已經更新了 待辦事項應用程式,您就可以為此應用程式建立容器映像檔並將其分享到 Docker Hub。為此,您需要執行下列步驟:

  1. 使用您的 Docker 帳戶登入
  2. 在 Docker Hub 上建立映像檔儲存庫
  3. 建置容器映像檔
  4. 將映像檔推送至 Docker Hub

在進入實作指南之前,您應該先了解以下幾個核心概念。

容器映像檔

如果您是容器映像檔的新手,可以將其視為一種標準化的套件,其中包含執行應用程式所需的一切,包括檔案、設定和相依項目。這些套件隨後可以分發並與他人共享。

Docker Hub

要共享您的 Docker 映像檔,您需要一個儲存它們的地方。這就是註冊中心(registry)的作用。雖然市面上有很多註冊中心,但 Docker Hub 是預設且最常用的映像檔註冊中心。Docker Hub 不僅為您提供儲存自己的映像檔的地方,還可以讓您尋找他人的映像檔來執行,或將其作為您自己映像檔的基礎。

容器開發 中,您使用了來自 Docker Hub 的以下映像檔,它們皆為 Docker 官方映像檔 (Docker Official Images)

  • node - 提供 Node 環境,並用作您開發工作的基礎。此映像檔也用作最終應用程式映像檔的基礎。
  • mysql - 提供 MySQL 資料庫來儲存待辦事項清單。
  • phpmyadmin - 提供 phpMyAdmin,這是一種用於 MySQL 資料庫的網頁介面。
  • traefik - 提供 Traefik,這是一個現代化的 HTTP 反向代理和負載平衡器,根據路由規則將請求發送到適當的容器。

瀏覽完整的 Docker 官方映像檔Docker 驗證發行商 以及 Docker 贊助的開源軟體 目錄,以了解更多可執行和構建的內容。

試試看

在本實作指南中,您將學習如何登入 Docker Hub 並將映像檔推送至 Docker Hub 儲存庫。

使用您的 Docker 帳戶登入

要將映像檔推送至 Docker Hub,您需要使用 Docker 帳戶登入。

  1. 開啟 Docker Dashboard。

  2. 選擇右上角的 Sign in(登入)。

  3. 如有需要,請建立一個帳戶,然後完成登入流程。

完成後,您應該會看到 Sign in 按鈕變成了個人資料圖片。

建立映像檔儲存庫

現在您有了帳戶,可以建立一個映像檔儲存庫了。就像 Git 儲存庫存放原始碼一樣,映像檔儲存庫存放的是容器映像檔。

  1. 前往 Docker Hub

  2. 選擇 Create repository(建立儲存庫)。

  3. Create repository 頁面上,輸入以下資訊:

    • Repository name(儲存庫名稱) - getting-started-todo-app
    • Short description(簡短描述) - 如果您願意,可以隨意輸入描述。
    • Visibility(可見性) - 選擇 Public(公開),讓其他人能夠提取您的自訂待辦事項應用程式。
  4. 選擇 Create(建立)來建立儲存庫。

建置並推送映像檔

現在您已經有了儲存庫,準備好建置並推送您的映像檔了。請注意,您正在建置的映像檔是以 Node 映像檔為基礎進行擴展的,這意味著您不需要安裝或設定 Node、yarn 等。您可以專注於使您的應用程式獨一無二的內容。

什麼是映像檔/Dockerfile?

還不需要深入探究,您可以將容器映像檔視為一個單一的套件,其中包含執行流程所需的一切。在此案例中,它將包含一個 Node 環境、後端程式碼和已編譯的 React 程式碼。

任何使用此映像檔執行容器的機器,都能夠照原樣執行該應用程式,而無需在該機器上預先安裝任何其他內容。

Dockerfile 是一個文字指令碼,提供了關於如何建置映像檔的說明集。對於此快速入門,儲存庫中已經包含該 Dockerfile。

  1. 要開始使用,請從 GitHub 克隆或 將專案作為 ZIP 檔案下載 到您的本機機器。

    $ git clone https://github.com/docker/getting-started-todo-app
    

    克隆專案後,導覽至該克隆所建立的新目錄。

    $ cd getting-started-todo-app
    
  2. 執行以下指令來建置專案,將 DOCKER_USERNAME 替換為您的使用者名稱。

    $ docker build -t <DOCKER_USERNAME>/getting-started-todo-app .
    

    例如,如果您的 Docker 使用者名稱是 mobydock,您將執行以下指令:

    $ docker build -t mobydock/getting-started-todo-app .
    
  3. 要驗證映像檔是否存在於本機,您可以使用 docker image ls 指令。

    $ docker image ls
    

    您將看到類似於以下的輸出:

    REPOSITORY                          TAG       IMAGE ID       CREATED          SIZE
    mobydock/getting-started-todo-app   latest    1543656c9290   2 minutes ago    1.12GB
    ...
    
  4. 要推送映像檔,請使用 docker push 指令。請務必將 DOCKER_USERNAME 替換為您的使用者名稱:

    $ docker push <DOCKER_USERNAME>/getting-started-todo-app
    

    根據您的上傳速度,推送可能需要一些時間。

  1. 開啟 Visual Studio Code。確保已從 擴充功能市集 (Extension Marketplace) 安裝 Docker extension for VS Code

    Screenshot of VS code extension marketplace
  2. File(檔案)選單中,選擇 Open Folder(開啟資料夾)。選擇 Clone Git Repository(克隆 Git 儲存庫)並貼上此 URL:https://github.com/docker/getting-started-todo-app

    Screenshot of VS code showing how to clone a repository
  3. Dockerfile 按右鍵並選擇 Build Image...(建置映像檔...)選單項目。

    Screenshot of VS Code showing the right-click menu and "Build Image" menu item
  4. 在出現的對話框中,輸入名稱 DOCKER_USERNAME/getting-started-todo-app,並將 DOCKER_USERNAME 替換為您的 Docker 使用者名稱。

  5. 按下 Enter 後,您將看到一個終端機出現,建置將在此進行。完成後,您可以關閉該終端機。

  6. 透過選擇左側導覽選單中的 Docker 標誌,開啟 VS Code 的 Docker 擴充功能。

  7. 找到您建立的映像檔。它的名稱將會是 docker.io/DOCKER_USERNAME/getting-started-todo-app

  8. 展開映像檔以查看其標籤(或不同版本)。您應該會看到一個名為 latest 的標籤,這是分配給映像檔的預設標籤。

  9. latest 項目按右鍵並選擇 Push...(推送...)選項。

    Screenshot of the Docker Extension and the right-click menu to push an image
  10. 按下 Enter 確認,然後觀察您的映像檔被推送至 Docker Hub。根據您的上傳速度,推送映像檔可能需要一些時間。

    上傳完成後,您可以關閉該終端機。

重點回顧

在繼續下一步之前,花點時間思考一下這裡發生了什麼。在短短幾分鐘內,您就成功建置了一個包含您的應用程式的容器映像檔,並將其推送到了 Docker Hub。

展望未來,您需要記住:

  • Docker Hub 是尋找受信任內容的首選註冊中心。Docker 提供了一系列受信任的內容,包括 Docker 官方映像檔、Docker 驗證發行商和 Docker 贊助的開源軟體,可供直接使用或作為您自己映像檔的基礎。

  • Docker Hub 提供了一個分發您自己應用程式的市場。任何人都可以建立一個帳戶並分發映像檔。雖然您是公開分發您建立的映像檔,但私有儲存庫可以確保您的映像檔僅對授權使用者開放。

使用其他註冊中心

雖然 Docker Hub 是預設的註冊中心,但註冊中心已透過 開放容器倡議 (Open Container Initiative) 實現了標準化和互通性。這允許企業和組織執行自己的私有註冊中心。通常,受信任的內容會從 Docker Hub 鏡像(或複製)到這些私有註冊中心。

下一步

現在您已經建置了一個映像檔,是時候討論為什麼您作為開發人員應該深入了解 Docker,以及它將如何幫助您處理日常任務。

接下來是什麼
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.