Concept
Docker 是什麼
Docker 是一個開源平台,用於自動化應用程式的部署、縮放和管理。它允許開發人員將應用程式及其依賴項打包到一個名為「容器」的輕量級、可移植的單元中。
Docker 優缺點
優點 | 缺點 |
---|---|
一致性:確保應用在不同環境中的行為一致 | 學習曲線:需要學習和掌握新的工具和概念 |
便攜性:容器可以在任何支持 Docker 的環境中運行 | 性能開銷:儘管比虛擬機輕量,但仍有少量性能開銷 |
隔離性:容器之間相互隔離,增強安全性 | 持久化存儲:處理數據持久化和存儲稍有複雜 |
高效性:比虛擬機更加高效,啟動速度快,資源佔用少 | 網絡複雜性:多容器應用的網絡配置可能較為複雜 |
快速部署和擴展:幾秒鐘內啟動新容器 | 安全漏洞:雖然隔離性強,但仍需防範容器逃逸等安全漏洞 |
版本控制和回滾:輕鬆管理和回滾應用版本 | 管理:隨著 image 增加,管理和存儲空間需求增加 |
簡化 CI/CD 過程:提高自動化水平 | 依賴主機內核:需依賴主機的操作系統內核,某些情況下可能受限 |
擴展性和彈性:輕鬆管理和擴展多個容器 | 監控和調試:需要專門的工具來監控和調試容 器化應用 |
核心概念
Container
容器是 Docker 的基礎單位,它包含應用程式及其運行時環境。你可以把容器看作是一個輕量級、獨立的虛擬機,具有以下特點:
- 輕量:容器共享主機操作系統的內核,不像虛擬機那樣需要完整的操作系統,因此更加輕量。
- 便攜:容器可以在任何支持 Docker 的環境中運行,無論是開發機、測試機還是生產環境。
Image
映像檔是容器的靜態模板,它包含了運行容器所需的一切文件和設置。映像檔是不可變的,一旦創建就不會更改。從映像檔可以創建多個容器。
Dockerfile
Dockerfile 是用來定義映像檔的一個文本文件。它包含了一系列指令,每個指令對應一個步驟,這些指令會被 Docker 引擎逐行執行以構建映像檔。常見的指令有:
- FROM:指定基礎映像
- COPY:將文件從主機系統複製到映像檔
- RUN:在映像檔內運行命令
Docker Hub
Docker Hub 是一個雲 端庫,可以存儲和分享 Docker 映像檔。開發者可以從 Docker Hub 上拉取(下載)他們需要的映像檔,也可以將自己的映像檔推送(上傳)到 Docker Hub。
Volume
Volume 是一種專門用來存儲和管理容器數據的方法。它們獨立於容器的文件系統,具有以下特點:
- 持久性:Volume 可以在容器刪除後保留數據,確保數據不丟失。
- 共享性:多個容器可以共享同一個 Volume,實現數據的共享和持久化。
- 高效性:Volume 的性能通常比將數據存儲在容器文件系統中更高效。
Network
Docker 提供了多種網絡模式,幫助容器之間以及容器與外部世界之間的通信:
- Bridge 網絡:預設模式,每個容器都有一個虛擬網絡接口,可以與同一橋接網絡中的其他容器通信。
- Host 網絡:容器直接使用主機的網絡接口,性能較高但隔離性較低。
- Overlay 網絡:用於 Docker Swarm 集群,跨多個主機實現容器通信。
- None 網絡:容器有自己的網絡接口,但不進行任何網絡配置,適合需要完全自定義網絡配置的情況。
Orchestration
當需要管理多個容器時,Docker 提供了編排工具,如 Docker Compose 和 Docker Swarm。這些工具幫助你管理多個容器之間的協作和通信。Docker Compose 使用 YAML 文件定義多個容器的應用服務,Docker Swarm 則提供了集群管理和容錯功能。