共享應用程式

現在你已經構建了一個映象,你可以共享它。要共享 Docker 映象,你必須使用 Docker registry。預設的 registry 是 Docker Hub,你使用過的所有映象都來自這裡。

Docker ID

Docker ID 讓你能夠訪問 Docker Hub,這是全球最大的容器映象庫和社群。如果你還沒有 Docker ID,可以免費建立一個 Docker ID

建立一個倉庫

要推送一個映象,你首先需要在 Docker Hub 上建立一個倉庫。

  1. 註冊或登入到 Docker Hub

  2. 選擇 Create Repository 按鈕。

  3. 對於倉庫名稱,使用 getting-started。確保 Visibility(可見性)是 Public(公開)。

  4. 選擇 Create (建立)。

在下圖中,你可以看到一個來自 Docker Hub 的示例 Docker 命令。此命令將推送到此倉庫。

Docker command with push example

推送映象

讓我們嘗試將映象推送到 Docker Hub。

  1. 在命令列中,執行以下命令

    docker push docker/getting-started
    

    你會看到類似這樣的錯誤

    $ docker push docker/getting-started
    The push refers to repository [docker.io/docker/getting-started]
    An image does not exist locally with the tag: docker/getting-started
    

    這個失敗是預期的,因為映象還沒有被正確地標記。Docker 正在尋找一個名為 docker/getting-started 的映象,但你的本地映象仍然名為 getting-started

    你可以透過執行以下命令來確認

    docker image ls
    
  2. 要解決這個問題,首先使用你的 Docker ID 登入到 Docker Hub:docker login YOUR-USER-NAME

  3. 使用 docker tag 命令給 getting-started 映象一個新名稱。用你的 Docker ID 替換 YOUR-USER-NAME

    $ docker tag getting-started YOUR-USER-NAME/getting-started
    
  4. 現在再次執行 docker push 命令。如果你是從 Docker Hub 複製的值,可以去掉 tagname 部分,因為你沒有給映象名稱新增標籤。如果你不指定標籤,Docker 會使用一個名為 latest 的標籤。

    $ docker push YOUR-USER-NAME/getting-started
    

在新例項上執行映象

現在你的映象已經構建並推送到一個 registry 中,嘗試在一個全新的、從未見過此容器映象的例項上執行你的應用程式。為此,你將使用 Play with Docker。

注意

Play with Docker 使用 amd64 平臺。如果你使用的是帶有 Apple silicon 的基於 ARM 的 Mac,你需要重新構建映象以與 Play with Docker 相容,並將新映象推送到你的倉庫。

要為 amd64 平臺構建映象,請使用 --platform 標誌。

$ docker build --platform linux/amd64 -t YOUR-USER-NAME/getting-started .

Docker buildx 也支援構建多平臺映象。要了解更多資訊,請參閱多平臺映象

  1. 在你的瀏覽器中開啟 Play with Docker

  2. 選擇 Login,然後從下拉列表中選擇 docker

  3. 用你的 Docker Hub 帳戶登入,然後選擇 Start

  4. 選擇左側邊欄上的 ADD NEW INSTANCE 選項。如果你看不到它,請讓你的瀏覽器更寬一些。幾秒鐘後,一個終端視窗會在你的瀏覽器中開啟。

    Play with Docker add new instance
  5. 在終端中,啟動你剛剛推送的應用程式。

    $ docker run -dp 0.0.0.0:3000:3000 YOUR-USER-NAME/getting-started
    

    你應該會看到映象被拉取下來並最終啟動。

    提示

    你可能已經注意到,此命令將埠對映繫結到不同的 IP 地址。之前的 docker run 命令將埠釋出到主機的 127.0.0.1:3000 上。這一次,你使用的是 0.0.0.0

    繫結到 127.0.0.1 只會將容器的埠暴露給環回介面。然而,繫結到 0.0.0.0 會將容器的埠暴露在主機的所有介面上,使其對外部世界可用。

    有關埠對映如何工作的更多資訊,請參閱網路

  6. 當 3000 徽章出現時,選擇它。

    如果 3000 徽章沒有出現,你可以選擇 Open Port 並指定 3000

摘要

在本節中,你學習瞭如何透過將映象推送到 registry 來共享你的映象。然後,你到了一個全新的例項上,並能夠執行剛剛推送的映象。這在 CI 管道中很常見,管道會建立映象並將其推送到 registry,然後生產環境可以使用最新版本的映象。

相關資訊

後續步驟

在下一節中,你將學習如何在容器化應用程式中持久化資料。

持久化資料庫