6.1 映像檔 (Images)
想要有效率地使用Docker,需要理解幾個關鍵術語:映像檔,容器
和註冊表
。現在我們來分析它們的用途以及它們如何相互作用。
Docker映像檔——這是一個模板,用來創建容器。映像檔包含應用程式執行所需的一切:作業系統、應用程式、庫和依賴項,以及配置文件。如果以OOP作比喻:Docker映像檔是類,而容器是類的對象。映像檔使用Dockerfile創建——一個描述創建映像檔步驟的文本文件。
映像檔的主要特點:
- 分層結構:映像檔由多個層組成。存在一個基礎層,每個後續層表示相對於前一層的更改。這能節省空間並縮短加載時間。
- 可重複使用:一個映像檔可用於創建多個容器。
- 可攜性:映像檔可以在不同系統之間傳輸,這使其非常適合在不同環境下開發、測試和部署應用程式。
映像檔的使用範例:
創建自己的映像檔:你可以編寫自己的Dockerfile,指定你的應用程式與其依賴項的設定,來創建自己的映像檔。
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/app.py"]
使用現有的映像檔:你可以使用Docker Hub中的映像檔,快速部署標準應用例如web伺服器或資料庫。
docker pull nginx
此指令會從Docker Hub公有存儲庫中下載nginx映像檔。
6.2 Containers (容器)
Docker 容器就是一個啟動了的映像實例。容器把應用程序及其依賴關係隔離在一個單獨的運行環境中,這樣就可以不依賴於主機系統或其他容器獨立運行。容器很輕量,因為它們使用的是主機操作系統的內核,而不像虛擬機那樣需要創建單獨的內核。
容器的主要特點:
- 隔離性: 容器把應用程序隔離起來,保證它們的獨立運行並防止依賴衝突。
- 輕量性: 容器相比虛擬機消耗更少的資源,因為它們不需要單獨的操作系統。
- 快速啟動: 容器的啟動和停止比虛擬機快很多,這使得它們在動態環境和擴展中非常理想。
容器的使用示例:
啟動容器: 你可以用 docker run 指令從映像啟動一個容器。
docker run -d -p 80:80 --name mynginx nginx
管理容器: Docker 提供了管理容器的指令,比如 start, stop, restart, rm 和 exec。
docker stop mynginx
docker rm mynginx
在接下來的講座中,你將學到所有命令及其參數。
6.3 註冊中心 (Registries)
Docker 註冊中心 是 Docker 映像檔的存儲庫。註冊中心允許開發者和組織存儲、管理和分發容器映像。註冊中心分為公共和私有類型。
註冊中心的主要特性:
- 公共註冊中心: 例如 Docker Hub,提供社群和官方開發者創建的多種映像檔訪問。
- 私有註冊中心: 用於在組織內存儲和管理映像,確保訪問控制和安全性。
- 與 CI/CD 整合: 註冊中心可以輕鬆與連續整合和部署系統整合,從而實現自動化映像創建和部署過程。
註冊中心的使用範例:
1. Docker Hub: 一個公開的(也是最受歡迎的)Docker 映像註冊中心。提供多種現成的(常常已通過驗證,能從下載統計中看到)映像訪問。
docker pull nginx
docker push myusername/myimage:tag
2. 私有註冊中心: 你可以使用 Docker Registry 設置和使用你自己的註冊中心。
docker run -d -p 5000:5000 --name registry registry:2
docker tag myimage localhost:5000/myimage
docker push localhost:5000/myimage
映像、容器和註冊中心之間的交互
這三個組件之間緊密相關,形成了使用 Docker 的基礎:
- 創建映像: 開發者使用 Dockerfile 創建映像並將其本地存儲。
- 將映像上傳到註冊中心: 映像上傳到註冊中心(例如 Docker Hub 或私有註冊中心),在那裡存儲並為其他用戶或系統提供訪問。
- 運行容器: 用戶從註冊中心下載映像並啟動容器,容器將應用程序隔離並提供其運行環境。
6.4 管理 (Orchestration)
管理 是在分散環境中管理多個容器的過程。管理工具幫助自動化部署、擴展和管理容器。
- Kubernetes: 最受歡迎的容器管理平台,允許管理位於不同節點上的容器叢集。
- Docker Swarm: Docker 內建的管理平台,用於創建和管理 Docker 叢集。
- 管理功能: 自動擴展、自我修復、網路管理和負載均衡。
6.5 網絡 (Networks)
Docker中的網絡允許容器彼此之間以及與外部世界互相交互。Docker為不同的使用場景提供了幾種類型的網絡。
- Bridge: Docker默認創建的網絡。橋接網絡中的容器可以彼此互相交互。
- Host: 容器使用主機機器的網絡介面,直接訪問它們。
- Overlay: 用於在多個Docker daemon之間創建網絡。這對於編排非常重要。
- None: 禁用容器的所有網絡介面。適合隔離任務的情況。
6.6 卷 (Volumes)
卷 (Volumes) 是一種用於持久存儲容器數據的機制。它們可以將數據存儲在容器之外,這樣在重新啟動或刪除容器後,信息不會丟失。
- 創建卷: 可以使用命令 docker volume create 來創建卷。
- 掛載卷: 可以在啟動容器時使用
-v
標誌將卷掛載到容器中。 - 優點: 卷可以提供方便的數據保存和容器之間的數據交換,並且比綁定目錄 (bind mounts) 的性能更高。
重要!
卷是一個虛擬硬碟,可以連接到虛擬機或容器。通常以普通文件的形式存儲在主機操作系統上。
GO TO FULL VERSION