阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!

Docker 對開發者來說就像是一個神奇的工具箱。它讓他們可以在稱為容器的小型便攜盒子中構建、運送和管理應用程式。容器就像虛擬房間,但比傳統的虛擬機(VM)更快、更有效率。多虧了 Docker,容器已經變得非常受歡迎,現在它們已成為現代軟體開發不可或缺的一部分。


什麼是 Docker?

Docker Container

Docker 是一個開源平台,能自動化應用程式在容器內的部署。容器是隔離的環境,包含運行應用程式所需的一切,包括代碼、執行時、庫和系統工具。Docker 為開發者提供了構建、管理和分發這些容器的工具。


OCI

什麼是 開放容器倡議(OCI)

開放容器倡議(OCI) 是由 Linux 基金會於 2015 年成立的開放治理結構。其目的是創建容器執行時和映像規範的行業標準,確保容器生態系統之間的互操作性。

Docker 最初開發了自己的容器執行時和映像格式。然而,隨著容器的興起和對更廣泛標準化的需求,Docker 將其容器執行時技術 runc 貢獻給 OCI。現在,Docker 的生態系統遵循 OCI 標準,使 Docker 容器與其他符合 OCI 標準的執行時和工具相容。

通過與 OCI 標準對齊,Docker 確保其容器和映像可以在各種平台和工具上運行,促進了更開放和協作的容器生態系統。


為什麼容器有用?

  1. 可攜性:容器可以在任何支持 OCI 合規執行時的系統上運行,確保應用程式在不同環境中的一致性。
  2. 效率:容器共享主系統的核心,使它們比虛擬機更輕量且啟動更快。
  3. 可擴展性:容器可以輕鬆擴展或縮減,以應對不同的負載。
  4. 一致性:容器通過封裝所有依賴項和配置,減少「我這裡可以用」的問題。

容器與虛擬機與裸機的比較

Container vs VMs vs Bare Metal

裸機

  • 直接運行在物理硬體上,沒有任何虛擬化。
  • 提供最高性能和對硬體資源的直接訪問。
  • 最適合需要完全控制硬體的高性能工作負載和應用程式。

Bare Metal

虛擬機(VMs)

  • 包含完整的操作系統,使其更為沉重。
  • 需要更多資源且啟動時間較長。
  • 適合在單一物理機器上運行多個操作系統環境。

Virtual Machines (VMs)

容器

  • 共享主機的操作系統核心,使它們輕量化。
  • 使用較少的內存並快速啟動。
  • 非常適合微服務和快速部署。

Container

方面 容器 虛擬機 裸機
資源效率 適中 最高
啟動時間 分鐘 N/A
隔離性 程序級 完整的操作系統級 完全物理隔離
可攜性 非常高 適中
性能 接近原生 適中 原生
使用案例 微服務、CI/CD 管道 遺留應用程式、操作系統測試 高性能計算

Docker 術語

Docker Terminology

  • Dockerfile:包含構建 Docker 映像的指令的文字檔案。
  • 映像:用於創建容器的唯讀模板。映像是從 Dockerfile 構建的,並遵循 OCI 映像規範。
  • 容器:映像的可運行實例。容器可以啟動、停止和刪除。
  • 註冊中心:Docker 映像的倉庫。Docker Hub 是一個流行的公共註冊中心,其他符合 OCI 的註冊中心包括 Harbor 和 Quay。

Docker 命令列速查表

Docker Command Line Cheat Sheet

0. 基本 Docker 命令

  • docker --version:檢查 Docker 版本。
  • docker help:顯示 Docker 命令和選項。
  • docker info:顯示系統範圍的 Docker 資訊。

1. 映像

  • docker images:列出所有本地映像。
  • docker pull <image>:從 Docker Hub 下載映像。
  • docker build -t <image_name> .:從當前目錄的 Dockerfile 建立映像。
  • docker rmi <image>:移除映像。
  • docker tag <source_image> <new_image>:用新名稱標記映像。

2. 容器

  • docker run <image>:執行來自某映像的容器。
  • docker run -it <image>:在互動模式下執行容器。
  • docker run -d <image>:在分離模式下執行容器。
  • docker ps:列出正在運行的容器。
  • docker ps -a:列出所有容器(包括已停止的容器)。
  • docker stop <container>:停止正在運行的容器。
  • docker start <container>:啟動已停止的容器。
  • docker restart <container>:重啟容器。
  • docker rm <container>:移除已停止的容器。
  • docker exec -it <container> <command>:在正在運行的容器中執行命令。

3. 容器管理

  • docker logs <container>:查看容器的日誌。
  • docker top <container>:顯示容器中運行的進程。
  • docker stats <container>:顯示實時資源使用統計。
  • docker inspect <container>:查看容器或映像的詳細資訊。
  • docker rename <old_name> <new_name>:重新命名容器。

4. 網路

  • docker network ls:列出所有 Docker 網路。
  • docker network create <network_name>:創建新網路。
  • docker network connect <network> <container>:將容器連接到網路。
  • docker network disconnect <network> <container>:將容器從網路中斷開。
  • docker network inspect <network>:查看網路的詳細資訊。

5.

  • docker volume ls:列出所有卷。
  • docker volume create <volume_name>:創建卷。
  • docker volume inspect <volume>:顯示有關卷的詳細資訊。
  • docker volume rm <volume>:移除卷。

範例:創建一個簡單的 Docker 容器

讓我們創建一個簡單的 Docker 容器,運行一個 Python 腳本。

  1. 創建 Python 腳本:將以下代碼保存到名為 app.py 的檔案中:

    print("Hello, Docker!")
  2. 創建 Dockerfile:創建名為 Dockerfile 的檔案,內容如下:

    FROM python:3.9-slim
    COPY app.py /app.py
    CMD ["python", "/app.py"]
  3. 構建 Docker 映像

    docker build -t python-app .
  4. 運行 Docker 容器

    docker run python-app

    這將輸出:

    Hello, Docker!

結論

使用容器構建、部署和運行應用程式對 Docker 來說是輕而易舉的。通過遵循 OCI 標準,Docker 確保在容器世界中一切無縫協作。容器非常高效、可攜帶且可擴展,這就是為什麼它們位於現代軟體開發的核心。如果你了解 Docker 及其如何與 OCI 一起工作,你就可以利用這項技術加快工作流程,並確保你的應用程式在任何平台上都能正常運行。

下週我將深入探討 Docker 架構,敬請期待。


原文出處:https://dev.to/juniourrau/introduction-to-docker-core-concepts-and-basics-for-beginners-4n0h


共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。

阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!