容器 vs 虛擬機
傳統虛擬機包含 Guest OS,需要 Hypervisor,啟動慢、資源佔用高。容器共享 Host Kernel,僅包含應用程式與相依函式庫,啟動快、資源使用更有效率。
核心元件
- Image(映像檔):唯讀模板,定義容器內容
- Container(容器):Image 的執行實例
- Registry(倉庫):存放和分發 Image(Docker Hub、ECR、GCR)
- Dockerfile:定義 Image 建置指令
基本指令
# Image 操作
docker pull ubuntu:22.04
docker images
docker build -t my-app:1.0 .
docker push registry.example.com/my-app:1.0
# Container 操作
docker run -d --name my-container -p 8080:80 nginx
docker ps
docker ps -a
docker stop my-container
docker rm my-container
# 其他
docker exec -it my-container bash
docker logs my-container
docker compose up -d
Dockerfile 範例
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]
Docker Compose
使用 YAML 定義多容器應用,適合本地開發環境。可一次啟動多個服務(Web、資料庫、快取等),並配置網路與磁碟掛載。