什麼是容器?
說明
想像您正在開發一個超級實用的網頁應用程式,它包含三個主要元件:一個 React 前端、一個 Python API,以及一個 PostgreSQL 資料庫。如果您想在這個專案上工作,就必須安裝 Node、Python 和 PostgreSQL。
您該如何確保自己使用的版本與團隊中的其他開發人員一致?或是與您的 CI/CD 系統一致?又或是與生產環境中使用的版本一致呢?
您該如何確保您的應用程式所需的 Python(或 Node 或資料庫)版本,不會受到機器上既有軟體的影響?您又該如何管理潛在的衝突呢?
這時候,容器就派上用場了!
什麼是容器?簡單來說,容器是針對應用程式每個元件所提供的隔離處理序。每個元件(React 前端應用程式、Python API 引擎和資料庫)都在各自獨立的環境中執行,與您機器上的其他所有項目完全隔離。
以下是容器的迷人之處:
- 自給自足。每個容器都包含其運作所需的一切,無需依賴主機上預先安裝的任何相依性套件。
- 隔離性。由於容器是在隔離狀態下執行,因此對主機和其他容器的影響降至最低,進而提高了應用程式的安全性。
- 獨立性。每個容器皆可獨立管理。刪除一個容器不會影響其他任何容器。
- 可移植性。容器可以在任何地方執行!在您的開發機器上執行的容器,在資料中心或雲端的任何地方都能以相同方式運作!
容器與虛擬機器 (VMs)
簡單來說,虛擬機器 (VM) 是一個完整的作業系統,擁有自己的核心、硬體驅動程式、程式和應用程式。僅為了隔離單一應用程式而啟動一個 VM,其額外開銷非常大。
容器僅是一個隔離的處理序,其中包含了它執行所需的所有檔案。如果您執行多個容器,它們都會共享相同的核心,讓您能在較少的基礎架構上執行更多的應用程式。
同時使用 VM 與容器
您經常會看到容器和 VM 被同時使用。例如,在雲端環境中,佈建的機器通常是 VM。然而,與其佈建一台機器來執行單一應用程式,現在可以透過具有容器執行環境的 VM 來執行多個容器化應用程式,從而提高資源利用率並降低成本。
試試看
在這個實作練習中,您將了解如何使用 Docker Desktop GUI 來執行一個 Docker 容器。
請依照下列指示執行容器。
開啟 Docker Desktop 並選擇上方導覽列中的搜尋 (Search) 欄位。
在搜尋輸入框中指定
welcome-to-docker,然後選擇拉取 (Pull) 按鈕。

映像檔成功拉取後,請選擇執行 (Run) 按鈕。
展開選用設定 (Optional settings)。
在容器名稱 (Container name) 中,指定
welcome-to-docker。在主機連接埠 (Host port) 中,指定
8080。

選擇執行 (Run) 來啟動您的容器。
恭喜!您剛剛執行了您的第一個容器!🎉
查看您的容器
您可以透過進入 Docker Desktop 儀表板的容器 (Containers) 檢視畫面來查看所有的容器。

此容器執行了一個網頁伺服器,用來顯示一個簡單的網站。當您處理更複雜的專案時,您將會在不同的容器中執行不同的部分。例如,您可能會為前端、後端和資料庫分別執行不同的容器。
存取前端
當您啟動容器時,您將容器的一個連接埠曝露到了您的機器上。將此視為建立配置,讓您可以透過容器的隔離環境進行連線。
對於此容器,前端可透過連接埠 8080 存取。若要開啟網站,請選取容器連接埠 (Port(s)) 欄位中的連結,或在瀏覽器中前往 https://:8080。

探索您的容器
Docker Desktop 讓您能夠探索並與容器的不同層面進行互動。親自試試看吧。
前往 Docker Desktop 儀表板中的容器 (Containers) 檢視畫面。
選取您的容器。
選取檔案 (Files) 頁籤,以探索您容器的隔離檔案系統。

停止您的容器
docker/welcome-to-docker 容器將持續執行,直到您將其停止。
前往 Docker Desktop 儀表板中的容器 (Containers) 檢視畫面。
找到您想要停止的容器。
在動作 (Actions) 欄位中,選取停止 (Stop) 動作。

請依照下列指示,使用 CLI 執行容器
開啟您的 CLI 終端機,並使用
docker run指令啟動容器$ docker run -d -p 8080:80 docker/welcome-to-docker此指令的輸出即為完整的容器 ID。
恭喜!您剛剛啟動了您的第一個容器!🎉
查看您正在執行的容器
您可以使用 docker ps 指令來驗證容器是否已啟動並執行中
docker ps
您將會看到類似下方的輸出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1f7a4bb3a27 docker/welcome-to-docker "/docker-entrypoint.…" 11 seconds ago Up 11 seconds 0.0.0.0:8080->80/tcp gracious_keldysh
此容器執行了一個網頁伺服器,用來顯示一個簡單的網站。當您處理更複雜的專案時,您將會在不同的容器中執行不同的部分。例如,為 frontend(前端)、backend(後端)和 database(資料庫)分別執行不同的容器。
提示
docker ps指令僅會顯示執行中的容器。若要查看已停止的容器,請加上-a旗標來列出所有容器:docker ps -a
存取前端
當您啟動容器時,您將容器的一個連接埠曝露到了您的機器上。將此視為建立配置,讓您可以透過容器的隔離環境進行連線。
對於此容器,前端可透過連接埠 8080 存取。若要開啟網站,請選取容器連接埠 (Port(s)) 欄位中的連結,或在瀏覽器中前往 https://:8080。

停止您的容器
docker/welcome-to-docker 容器將持續執行,直到您將其停止。您可以使用 docker stop 指令來停止容器。
執行
docker ps以取得容器的 ID將容器 ID 或名稱提供給
docker stop指令docker stop <the-container-id>
提示當透過 ID 參考容器時,您不需要提供完整的 ID,只需要提供足以使其具有唯一性的 ID 長度即可。舉例來說,上一個容器可以透過執行下列指令來停止
docker stop a1f
其他資源
下列連結提供了有關容器的進階指南
下一步
既然您已經學會了 Docker 容器的基礎知識,現在是時候了解 Docker 映像檔了。
什麼是映像檔?