天天看點

Docker 快速入門(二)- 建構并運作您的鏡像

現在已經安裝了開發環境,可以開始開發容器化的應用程式了。一般來說,開發工作流是這樣的:

1. 通過首先建立 Docker 鏡像,為應用程式的每個元件建立和測試單獨的容器。

2. 将容器和支援基礎設施(supporting infrastructure)組裝成一個完整的應用程式。

3. 測試、共享并部署完整的容器化應用程式。

前提條件

完成第一部分的情況介紹和安裝

介紹

現在您已經安裝了開發環境,可以開始開發容器化的應用程式了。一般來說,開發工作流是這樣的:

  1. 首先建立 Docker 鏡像,為應用程式的每個元件建立和測試單獨的容器。
  2. 将容器和支援基礎設施(supporting infrastructure)組裝成一個完整的應用程式。
  3. 測試、共享并部署完整的容器化應用程式。

在本教程的這一階段,讓我們集中讨論此工作流的第一步:建立容器将基于的鏡像。請記住,Docker 鏡像捕獲您的容器化程序将在其中運作的私有檔案系統;您需要建立一個鏡像,其中僅包含應用程式運作所需的内容。

配置

讓我們下載下傳

node-bulletin-board

示例項目。這是一個用 Node.js 寫的簡單的公告欄應用程式。

Git

如果您使用的是 Git,您可以從GitHub克隆示例項目:

git clone https://github.com/dockersamples/node-bulletin-board
cd node-bulletin-board/bulletin-board-app
           

Windows (沒有 Git)

如果你使用的是 Windows 機器,喜歡下載下傳示例項目而不安裝 Git,在 PowerShell 運作以下指令:

curl.exe -LO https://github.com/dockersamples/node-bulletin-board/archive/master.zip
tar.exe xf master.zip
cd node-bulletin-board-master\bulletin-board-app
           

Mac 或 Linux (沒有 Git)

如果您使用的是 Mac 或 Linux 機器,并且喜歡下載下傳示例項目而不安裝 Git,請在終端運作以下指令:

curl -LO https://github.com/dockersamples/node-bulletin-board/archive/master.zip
unzip master.zip
cd node-bulletin-board-master/bulletin-board-app
           

用 Dockerfile 定義一個容器

下載下傳項目後,檢視公告欄應用程式中名為

Dockerfile

的檔案。Dockerfiles 描述了如何為容器組裝私有檔案系統,還可以包含描述如何基于此鏡像運作容器的一些中繼資料。

有關公告欄應用程式中使用的 Dockerfile 的更多資訊,請參閱 Dockerfile 示例。

建構并測試您的鏡像

現在您已經有了一些源代碼和 Dockerfile,是時候建構您的第一個鏡像了,并確定從鏡像中啟動的容器按預期工作。

在終端或者 PowerShell 中使用指令

cd

確定您在

node-bulletin-board/bulletin-board-app

目錄中。運作以下指令來建構您的公告欄鏡像:

docker build --tag bulletinboard:1.0 .
           

您将看到 Docker 一步步完成 Dockerfile 中的每條指令,并在此過程中建構您的鏡像。如果成功,建構過程應該以一條消息

Successfully tagged bulletinboard:1.0

結束。

Windows 使用者:

本例使用 Linux 容器。右鍵單擊系統托盤中的 Docker 圖示,然後單擊 Switch to Linux containers,確定您的環境正在運作 Linux 容器。不必擔心——本教程中的所有指令對于 Windows 容器工作方式完全一樣。

在運作鏡像後,您可能會收到一條标題為“安全警告”的消息,提示正在為添加到鏡像中的檔案設定讀、寫和執行權限。在本示例中,我們不處理任何敏感資訊,是以可以忽略本示例中的警告。

将鏡像作為容器運作

  1. 運作以下的指令來啟動基于新鏡像的一個容器:
    docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0
               
    這裡有幾個常見的标記:
    • --publish

      要求 Docker 将主機端口8000上傳入的流量轉發到容器端口8080。容器有自己的私有端口集,是以如果您希望從網絡通路一個端口,就必須以這種方式将流量轉發給它。否則,作為預設的安全情形,防火牆規則将阻止所有網絡流量到達您的容器。
    • --detach

      要求 Docker 在背景運作此容器。
    • --name

      指定可以在後續指令中引用你的容器的名稱,在本例中是

      bb

  2. 在浏覽器中通路您的應用程式,位址是 localhost:8000。您應該會看到您的公告欄應用程式啟動并運作了。在此步驟中,您通常會盡一切可能確定容器按照預期的方式工作;例如,現在是運作單元測試的時候了。
  3. 一旦您确信您的公告欄容器工作正常,您可以删除它:
docker rm --force bb
           

--force

選項會停止正在運作的容器,是以可以将其删除。 如果您先用

docker stop bb

停止運作的容器,那麼您不需要使用

--force

來删除它。

結論

此時,您已經成功地建構了一個鏡像,執行了一個應用程式的簡單容器化,并确認了您的應用程式在其容器中成功運作。下一步是在 Docker Hub 上分享您的鏡像,以便它們可以被輕松地下載下傳和運作在任意目标機器上。

Dockerfile 示例

編寫 Dockerfile 是容器化一個應用程式的第一步。您可以将這些 Dockerfile 指令看作是如何建構鏡像的逐漸配方。公告欄應用程式中的 Dockerfile 是這樣的:

# 使用官方鏡像作為父鏡像。
FROM node:current-slim

# 設定工作目錄。
WORKDIR /usr/src/app

# 将檔案從主機複制到目前位置。
COPY package.json .

# 在鏡像檔案系統中運作該指令。
RUN npm install

# 通知 Docker 容器在運作時監聽指定的端口。
EXPOSE 8080

# 在容器中運作指定的指令。
CMD [ "npm", "start" ]

# 将應用程式的其餘源代碼從主機複制到鏡像檔案系統。
COPY . .
           

本例中定義的 dockerfile 執行以下步驟:

  • FROM

    預先存在的

    node:current-slim

    鏡像開始。這是一個官方鏡像,由 node.js 供應商建構,經過 Docker 驗證是一個高品質的鏡像,包含了 Node.js 的長期支援(LTS)解釋器和基本依賴項。
  • 使用

    WORKDIR

    指定所有後續操作都應該從鏡像檔案系統中的目錄

    /usr/src/app

    執行(永遠不要從主機的檔案系統執行)。
  • 從您的主機複制(

    COPY

    ) 檔案

    package.json

    到鏡像中的目前位置 (

    .

    ) (在本示例中, 是到

    /usr/src/app/package.json

    )。
  • 在鏡像檔案系統中運作(

    RUN

    ) 指令

    npm install

    (它将讀取

    package.json

    确定應用程式的節點依賴項并安裝它們)。
  • 将應用程式的其餘源代碼從主機複制(

    COPY

    ) 到鏡像檔案系統。

您可以看到,這些步驟與您在主機上設定和安裝應用程式時所采取的步驟基本相同。但是,将這些捕獲為 Dockerfile,允許您在一個可移植的、獨立的 Docker 鏡像中做同樣的事情。

上面的步驟建構了鏡像的檔案系統,但是 Dockerfile 中還有其他行。

CMD

指令是在鏡像中指定一些中繼資料的第一個示例,這些中繼資料描述如何基于此鏡像運作容器。在本例中,它表示此鏡像要支援的容器化程序是

npm start

EXPOSE 8080

通知 Docker 容器在運作時監聽端口 8080。

上面的内容是組織一個簡單 Dockerfile 的好方法;始終從

FROM

指令開始,按照它的步驟建構您的私有檔案系統,并以任何中繼資料指定結束。還有更多的 Dockerfile 指令,而不僅僅是您在上面看到幾個。有關完整清單,請參閱 Dockerfile 參考。

CLI 參考文獻

有關本文中使用的所有 CLI 指令的進一步文檔可以在這裡找到:

  • docker image
  • docker container
  • Dockerfile reference

作者 : Docker 官網

譯者 : 技術譯民

出品 : 技術譯站

連結 : 英文原文

© 轉載請标明出處   https://www.cnblogs.com/ittranslator

不做标題黨,隻分享技術幹貨

公衆号『技術譯站』,

歡迎掃碼關注
Docker 快速入門(二)- 建構并運作您的鏡像