什麼是容器?

解釋

想象一下,你正在開發一個很棒的 Web 應用,它有三個主要元件——一個 React 前端、一個 Python API 和一個 PostgreSQL 資料庫。如果你想進行這個專案,你就必須安裝 Node、Python 和 PostgreSQL。

你如何確保你使用的版本與團隊中其他開發人員的版本相同?或者你的 CI/CD 系統的版本?或者生產環境中使用的版本?

你如何確保應用所需的 Python(或 Node 或資料庫)版本不受你機器上已安裝版本的影響?你如何管理潛在的衝突?

容器登場了!

什麼是容器?簡單來說,容器是你應用中每個元件的獨立程序。每個元件——前端 React 應用、Python API 引擎和資料庫——都在各自獨立的環境中執行,與你機器上的其他任何東西完全隔離。

這就是它們厲害之處。容器是:

  • 自包含的。每個容器都擁有其執行所需的一切,不依賴於宿主機上任何預先安裝的依賴項。
  • 隔離的。由於容器在隔離環境中執行,它們對宿主機和其他容器的影響極小,從而提高了應用程式的安全性。
  • 獨立的。每個容器都是獨立管理的。刪除一個容器不會影響任何其他容器。
  • 可移植的。容器可以在任何地方執行!在你的開發機器上執行的容器,在資料中心或雲中的任何地方都會以同樣的方式工作!

容器與虛擬機器 (VM) 的對比

簡單來說,虛擬機器(VM)是一個完整的作業系統,擁有自己的核心、硬體驅動程式、程式和應用程式。僅僅為了隔離一個應用程式而啟動一個虛擬機器,開銷是很大的。

容器只是一個隔離的程序,包含了它執行所需的所有檔案。如果你執行多個容器,它們都共享同一個核心,這使你能夠在更少的基礎設施上執行更多的應用程式。

同時使用虛擬機器和容器

通常,你會看到容器和虛擬機器一起使用。例如,在雲環境中,分配的機器通常是虛擬機器。然而,不是分配一臺機器來執行一個應用程式,而是讓一臺帶有容器執行時的虛擬機器可以執行多個容器化應用程式,從而提高資源利用率並降低成本。

試一試

在這個實踐環節中,你將看到如何使用 Docker Desktop 圖形使用者介面(GUI)來執行一個 Docker 容器。

使用以下說明來執行一個容器。

  1. 開啟 Docker Desktop,並選擇頂部導航欄中的搜尋欄位。

  2. 在搜尋輸入框中指定 `welcome-to-docker`,然後選擇拉取 (Pull) 按鈕。

    A screenshot of the Docker Desktop Dashboard showing the search result for welcome-to-docker Docker image
  3. 映象成功拉取後,選擇執行 (Run) 按鈕。

  4. 展開可選設定 (Optional settings)

  5. 容器名稱 (Container name) 中,指定 `welcome-to-docker`。

  6. 主機埠 (Host port) 中,指定 `8080`。

    A screenshot of Docker Desktop Dashboard showing the container run dialog with welcome-to-docker typed in as the container name and 8080 specified as the port number
  7. 選擇執行 (Run) 來啟動你的容器。

恭喜!你剛剛運行了你的第一個容器!🎉

檢視你的容器

你可以透過進入 Docker Desktop 儀表盤的容器 (Containers) 檢視來檢視你所有的容器。

Screenshot of the container view of the Docker Desktop GUI showing the welcome-to-docker container running on the host port 8080

這個容器執行一個 Web 伺服器,顯示一個簡單的網站。在處理更復雜的專案時,你將在不同的容器中執行不同的部分。例如,你可能會為前端、後端和資料庫執行不同的容器。

訪問前端

當你啟動容器時,你將容器的一個埠暴露到了你的機器上。可以把它想象成建立了一個配置,讓你能夠連線到容器的隔離環境中。

對於這個容器,前端可以在埠 `8080` 上訪問。要開啟網站,請選擇你容器的埠 (Port(s)) 列中的連結,或在瀏覽器中訪問 https://:8080

Screenshot of the landing page coming from the running container

探索你的容器

Docker Desktop 讓你能夠探索和與容器的不同方面進行互動。自己試試吧。

  1. 在 Docker Desktop 儀表盤中進入容器 (Containers) 檢視。

  2. 選擇你的容器。

  3. 選擇檔案 (Files) 標籤頁來探索你容器的隔離檔案系統。

    Screenshot of the Docker Desktop Dashboard showing the files and directories inside a running container

停止你的容器

`docker/welcome-to-docker` 容器會一直執行,直到你停止它。

  1. 在 Docker Desktop 儀表盤中進入容器 (Containers) 檢視。

  2. 找到你想要停止的容器。

  3. 操作 (Actions) 列中選擇停止 (Stop) 操作。

    Screenshot of the Docker Desktop Dashboard with the welcome container selected and being prepared to stop

按照說明使用命令列介面 (CLI) 執行容器

  1. 開啟你的 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

此容器執行一個 Web 伺服器,顯示一個簡單的網站。在處理更復雜的專案時,你將在不同的容器中執行不同的部分。例如,為 `frontend`、`backend` 和 `database` 分別使用不同的容器。

提示

`docker ps` 命令只會顯示*正在執行的*容器。要檢視已停止的容器,請新增 `-a` 標誌以列出所有容器:`docker ps -a`

訪問前端

當你啟動容器時,你將容器的一個埠暴露到了你的機器上。可以把它想象成建立了一個配置,讓你能夠連線到容器的隔離環境中。

對於這個容器,前端可以在埠 `8080` 上訪問。要開啟網站,請選擇你容器的埠 (Port(s)) 列中的連結,或在瀏覽器中訪問 https://:8080

Screenshot of the landing page of the Nginx web server, coming from the running container

停止你的容器

`docker/welcome-to-docker` 容器會一直執行,直到你停止它。你可以使用 `docker stop` 命令來停止一個容器。

  1. 執行 `docker ps` 來獲取容器的 ID

  2. 將容器 ID 或名稱提供給 `docker stop` 命令

    docker stop <the-container-id>
    
提示

當透過 ID 引用容器時,你不需要提供完整的 ID。你只需要提供足以使其唯一的 ID 部分即可。例如,前一個容器可以透過執行以下命令來停止:

docker stop a1f

其他資源

以下連結提供了有關容器的更多指導:

後續步驟

現在你已經瞭解了 Docker 容器的基礎知識,是時候學習 Docker 映象了。

什麼是映象?