
- Docker 教程
- Docker - 首頁
- Docker - 概述
- Docker - Linux安裝
- Docker - 安裝
- Docker - Hub
- Docker - 映象
- Docker - 容器
- Docker - 映象倉庫
- Docker - Compose
- Docker - 容器操作
- Docker - 架構
- Docker - 層
- Docker - 容器與主機
- Docker - 配置
- Docker - 容器與Shell
- Docker - Dockerfile
- Docker - 構建檔案
- Docker - 公共倉庫
- Docker - 埠管理
- Docker - Web伺服器
- Docker - 命令
- Docker - 容器連結
- Docker - 資料儲存
- Docker - 卷
- Docker - 網路
- Docker - 安全
- Docker - 工具箱
- Docker - 雲
- Docker - 雲構建
- Docker - 日誌
- Docker - 持續整合
- Docker - Kubernetes 架構
- Docker - Kubernetes 工作原理
- Docker - 生成式AI
- Docker - 託管
- Docker - 最佳實踐
- Docker 服務設定
- Docker - Node.js 設定
- Docker - MongoDB 設定
- Docker - NGINX 設定
- Docker - ASP.Net 設定
- Docker - MySQL 設定
- Docker - Go 設定
- Docker - Rust 設定
- Docker - Apache 設定
- Docker - MariaDB 設定
- Docker - Jupyter 設定
- Docker - Portainer 設定
- Docker - Rstudio 設定
- Docker - Plex 設定
- Docker 設定 - Flame
- Docker 設定 - PostgreSQL
- Docker 設定 - Mosquitto
- Docker 設定 - Grafana
- Docker 設定 - Nextcloud
- Docker 設定 - Pawns
- Docker 設定 - Ubuntu
- Docker 設定 - RabbitMQ
- Docker - Python 設定
- Docker - Java 設定
- Docker - Redis 設定
- Docker - Alpine 設定
- Docker - BusyBox 設定
- Docker 設定 - Traefik
- Docker 設定 - WordPress
- Docker 有用資源
- Docker - 快速指南
- Docker - 有用資源
- Docker - 討論
Docker - 映象
什麼是Docker映象?
Docker 映象是用於構建容器的獨立模板。它們使用分層檔案系統來有效儲存資料。每一層都包含指令,例如下載軟體包或傳輸配置檔案,代表映象生成過程中的一個特定階段。只有更新的層需要重新建立和交付,這使得分層成為共享和更新映象的有效方法。
一個稱為 Dockerfile 的文字檔案構成了 Docker 映象的基礎。此檔案中包含逐層建立映象的指令。大多數情況下,指令以“FROM”之類的術語開頭以標識基礎映象,該映象通常是最小化的 Linux 發行版。然後使用“RUN”之類的命令在層內執行特定操作。因此,可以精確地管理容器內的環境。

Docker 映象是隻讀模板,因此您對正在執行的程式所做的任何更改都會發生在容器內,而不是映象本身。透過這樣做,在執行時狀態(容器)和應用程式定義(映象)之間保持了清晰的劃分。此外,由於可以使用有針對性的修改建立新版本而不會影響已存在的容器,因此簡化了映象版本控制和維護。
Docker 映象的關鍵元件和概念
以下是構成 Docker 映象的一些關鍵元件。
層
Docker 映象由多個層組成。每一層都表示一組檔案系統修改。在構建 Docker 映象時,每個 Dockerfile 指令都會在上一層之上新增一層。
一旦生成,層就是不可更改的,這使得它們是不可變的。由於其不可變性,Docker 可以在映象構建和部署期間有效地重用層,從而加快構建時間並減少磁碟空間的使用。
基礎映象
基礎映象是構建自定義 Docker 映象的基礎。它通常包含執行應用程式所需的最小執行時環境和作業系統。
經常使用來自 CentOS、Ubuntu、Debian 和 Alpine Linux 的基礎映象。為了確保相容性和最小化映象大小,選擇合適的基礎映象至關重要。
Dockerfile
Dockerfile 是一個文字文件,其中包含一組用於建立 Docker 映象的指令。這些指令描述瞭如何建立基本映象、新增檔案和目錄、安裝依賴項、調整設定以及定義容器的入口點。
透過在 Dockerfile 中指定構建過程,您可以自動化和複製映象建立過程,確保跨環境的一致性。
映象倉庫
Docker 映象可以儲存在公共或私有註冊中心中,例如 Azure Container Registry (ACR)、Google Container Registry (GCR)、Amazon Elastic Container Registry (ECR) 和 Docker Hub。
註冊中心提供了一個集中式區域來管理、共享和分發 Docker 映象。它們還提供映象掃描以查詢安全漏洞、版本控制和訪問控制。
標籤
倉庫名稱和標籤組合起來構成 Docker 映象的唯一標識。標籤用於區分不同映象版本。如果沒有指定標籤,Docker 預設使用“latest”標籤。建議使用語義版本控制或其他相關標籤來維護可重複性和跟蹤映象版本。
映象拉取和推送
可以使用 docker pull 命令從註冊中心下載 Docker 映象到本地系統。類似地,可以使用 docker push 命令將映象從本地機器推送到註冊中心。這使您可以將映象分發到不同的環境或與他人共享。
層快取
為了效能最佳化,Docker 在構建映象時使用層快取。當您構建映象時,如果相關的 Dockerfile 指令沒有更改,Docker 會利用先前構建的快取層。這會大大減少構建時間,特別是對於具有複雜依賴關係的大型專案。
有用的 Docker 映象命令
既然我們已經討論了什麼是 Docker 映象,讓我們來看看您將非常頻繁使用的基本且最有用的 Docker 映象命令。
列出所有 Docker 映象
要檢視本地計算機上所有 Docker 映象的列表,可以使用“docker images”命令。它提供重要的詳細資訊,例如大小、建立時間、映象 ID、標籤和倉庫名稱。使用此命令,您可以快速檢視哪些映象可用於在您的系統上執行容器。
$ docker images

如果您只想顯示映象 ID,可以使用“–quiet”標誌。
$ docker image ls -q

拉取 Docker 映象
要將 Docker 映象從註冊中心下載到本地計算機,請使用 Docker pull 命令。如果沒有指定標籤,Docker 將自動拉取映象的“latest”版本。在基於映象啟動容器之前,此命令對於從公共或私有註冊中心獲取映象是必要的。
$ docker pull ubuntu:20.04

從 Dockerfile 構建 Docker 映象
docker build 命令從位於提供的路徑的 Dockerfile 建立 Docker 映象。在構建過程中,Docker 遵循 Dockerfile 中的指令來生成層並組裝最終映象。此命令對於建立針對您的應用程式特定需求量身定製的自定義映象至關重要。
Dockerfile
# Use a base image from Docker Hub FROM alpine:3.14 # Set the working directory inside the container WORKDIR /app # Copy the application files from the host machine to the container COPY . . # Expose a port for the application (optional) EXPOSE 8080 # Define the command to run when the container starts CMD ["./myapp"]
對於上述 Dockerfile,您可以使用以下命令構建映象。
$ docker build -t myapp:latest .

標記 Docker 映象
docker tag 命令為現有的 Docker 映象建立一個新標籤。標籤允許您標記和引用映象的多個版本。此命令通常在將映象上傳到註冊中心到不同的標籤下之前使用。
$ docker tag myapp:latest myrepo/myapp:v1.0

推送 Docker 映象
docker push 命令將 Docker 映象從您的本地機器傳輸到註冊中心,例如 Docker Hub 或私有註冊中心。在推送映象之前,請確保您已使用“docker login”命令登入到註冊中心。
$ docker push myrepo/myapp:v1.0
刪除 Docker 映象
docker rmi 命令從您的本地機器刪除一個或多個 Docker 映象。您可以提供映象名稱或映象 ID。此命令會永久刪除映象及其關聯的層,因此請謹慎使用。
$ docker rmi myapp:latest

清理 Docker 映象
docker image prune 命令從您的本地機器刪除未使用的 Docker 映象。此命令可用於透過刪除不再與任何容器或標籤關聯的映象來釋放磁碟空間。
選項
- -a, --all − 刪除所有未使用的映象,而不僅僅是懸空映象。
- -f, --force − 不在清理前詢問確認。
$ docker image prune -a
檢視 Docker 映象歷史記錄
docker image history 命令顯示 Docker 映象的歷史記錄,包括在映象構建過程中使用的命令和指令。這對於確定映象的形成方式和診斷問題很有用。
$ docker image history myimage:latest

檢查 Docker 映象
docker image inspect 命令以 JSON 格式返回有關 Docker 映象的詳細資訊。這包括設定、層、標籤和環境變數。您可以使用 --format 選項使用 Go 模板格式化輸出。
$ docker image inspect myimage:latest

如何一次刪除所有 Docker 映象?
如果您想使用單個命令刪除所有 Docker 映象,可以使用兩個命令的鏈,這兩個命令在列出所有映象 ID 後刪除所有映象。
$ docker rmi $(docker image ls -q)

結論
總之,Docker 映象允許開發人員和系統管理員以統一且可移植的方式打包和部署應用程式。由於映象使用分層檔案系統和透過 Dockerfile 的宣告式方法,它們是構建、共享和跨不同環境執行程式的強大技術。
廣泛的 Docker 命令生態系統進一步擴充套件了此功能,允許使用者管理完整的映象生命週期,從建立和檢查到拉取、執行和操作容器。透過掌握這些概念,您將能夠利用 Docker 的潛力來加快您的開發工作流程並確保可靠的應用程式部署。
常見問題
Q1. Docker 映象和容器有什麼區別?
Docker 映象充當構建容器的藍圖或模板。它包含執行特定應用程式或服務所需的所有依賴項、庫和配置。
本質上,映象是檔案系統快照以及執行程式所需的引數。相比之下,容器是 Docker 映象的執行時例項。它是一個輕量級、獨立的、可執行的包,它封裝了程式及其依賴項,同時將其與主機系統和其他容器隔離開來。
容器基本上是從映象例項化的,可以從單個映象生成多個容器,每個容器都有其自己的環境和資源。
Q2. 什麼是 Docker 層,為什麼它們很重要?
Docker 映象由許多層組成。每一層代表一組檔案系統更改。這些層在映象構建過程中形成,並層層堆疊形成最終的映象。
層是不可變的且被快取的。這使得映象分發和重用更高效。當映象發生更改時,只有受影響的層會被重建,從而減少構建時間並降低磁碟空間使用率。
理解 Docker 層對於最小化映象大小、提高構建效能以及成功管理映象依賴至關重要。
Q3. 如何構建 Docker 映象?
您可以使用 Dockerfile 構建 Docker 映象。Dockerfile 是包含一組構建映象指令的文字檔案。這些指令包括指定基礎映象、複製檔案到映象中、執行命令來安裝依賴項或配置環境以及設定應用程式的執行時行為。建立 Dockerfile 後,執行 docker build 命令即可根據指令構建映象。