Docker 概念與容器化技術
Docker 是一種容器化平臺,能夠將應用程序及其依賴項打包成一個容器,確保在任何環境中都能一致運行。容器化技術通過操作系統級別的虛擬化,為應用程序提供了一個獨立的運行環境。
容器化技術的核心優勢
- 一致性:Docker 容器確保了開發、測試和生產環境的一致性,減少了環境差異帶來的問題。
- 隔離性:每個容器都是獨立運行的,互不影響,提升了系統的安全性和穩定性。
- 便攜性:Docker 鏡像可以在任何支持 Docker 的環境中運行,無需額外配置。
- 高效性:Docker 容器共享宿主機的內核,資源占用更少,啟動速度更快。
Docker 架構概述
Docker 的架構包括以下幾個核心組件:
- Docker Client:用戶與 Docker 交互的接口,用于發送命令。
- Docker Daemon:后臺運行的進程,負責創建、運行和管理容器。
- Docker Hub:Docker 鏡像的中央倉庫,用戶可以從中拉取或推送鏡像。
Docker 鏡像
Docker 鏡像是容器運行的基礎,一個只讀的模板,包含了構建容器所需的代碼、配置文件和依賴項。
鏡像的結構
Docker 鏡像由多個層組成,每一層都是只讀的,通過聯合文件系統(UnionFS)疊加在一起,形成最終的文件系統。這種分層結構使得鏡像的構建、存儲和傳輸更加高效。
鏡像的命名規則
Docker 鏡像的命名格式為:倉庫名/鏡像名:標簽
。其中:
- 倉庫名:鏡像所屬的倉庫,通常是用戶名或組織名。
- 鏡像名:鏡像的名稱,通常是應用程序或服務的名稱。
- 標簽:用于標識鏡像的版本或特定配置,默認為
latest
。
構建 Docker 鏡像
Docker 鏡像可以通過 Dockerfile
構建。Dockerfile
是一個文本文件,包含了一系列構建鏡像的指令。
Dockerfile 示例
# 使用官方 Python 鏡像作為基礎
FROM python:3.9-slim# 設置工作目錄
WORKDIR /app# 復制當前目錄的 requirements.txt 到工作目錄
COPY requirements.txt .# 安裝依賴項
RUN pip install --no-cache-dir -r requirements.txt# 復制應用程序代碼
COPY . .# 暴露端口
EXPOSE 8000# 設置環境變量
ENV PYTHONUNBUFFERED=1# 運行命令
CMD ["python", "app.py"]
構建鏡像命令
docker build -t my-python-app:latest .
鏡像的存儲與分發
Docker 鏡像可以存儲在本地,也可以推送到 Docker 倉庫(如 Docker Hub)中,以便在其他環境中使用。
查看本地鏡像
docker images
刪除鏡像
docker rmi <image-id>
Docker 容器
Docker 容器是從 Docker 鏡像創建的運行實例,每個容器都是一個獨立的進程,擁有自己的文件系統、網絡棧和進程空間。
創建與運行容器
從鏡像創建容器并運行
docker run -it --name my-container my-image:latest /bin/bash
-it
:允許交互式 shell。--name
:指定容器名稱。/bin/bash
:容器啟動時執行的命令。
后臺運行容器
docker run -d --name my-container my-image:latest
-d
:后臺運行。
容器的生命周期管理
查看運行中的容器
docker ps
停止容器
docker stop my-container
啟動容器
docker start my-container
重啟容器
docker restart my-container
刪除容器
docker rm my-container
容器的資源限制
Docker 提供了多種方式來限制容器的資源使用,例如 CPU、內存等。
限制 CPU 資源
docker run -it --cpus=2 my-image:latest
限制內存資源
docker run -it --memory=512m my-image:latest
容器的網絡配置
Docker 提供了多種網絡模式,包括:
- bridge:默認模式,容器運行在獨立的網絡棧中,通過 Docker 的網橋進行通信。
- host:容器使用宿主機的網絡棧。
- none:容器沒有網絡棧,適用于不需要網絡通信的場景。
示例:暴露端口
docker run -p 8000:8000 my-image:latest
-p
:將容器的 8000 端口映射到宿主機的 8000 端口。
Docker 倉庫
Docker 倉庫是存儲和分發 Docker 鏡像的地方,常用的有 Docker Hub 和私有倉庫。
Docker Hub
Docker Hub 是 Docker 官方提供的公共倉庫,用戶可以在其中拉取和推送鏡像。
從 Docker Hub 拉取鏡像
docker pull python:3.9-slim
推送鏡像到 Docker Hub
docker tag my-image:latest <your-username>/my-image:latest
docker push <your-username>/my-image:latest
私有倉庫
私有倉庫可以用于存儲內部的鏡像,確保安全性和控制權。
使用 Docker Registry
Docker Registry 是一個官方提供的私有倉庫鏡像,可以用于搭建私有倉庫。
docker run -d -p 5000:5000 --name registry registry:2
推送鏡像到私有倉庫
docker tag my-image:latest localhost:5000/my-image:latest
docker push localhost:5000/my-image:latest