Docker 指令速查

Docker 常用指令速查表,快速查找和使用 Docker 指令


目錄


基本資訊

# 查看 Docker 版本
docker --version
docker version

# 查看 Docker 資訊
docker info

# 查看說明
docker --help
docker <指令> --help

Image(映像檔)管理

搜尋與下載

# 搜尋 image
docker search nginx
docker search --filter stars=100 nginx  # 篩選星星數

# 下載 image
docker pull nginx
docker pull nginx:latest                # 指定標籤
docker pull nginx:1.21                  # 指定版本

# 從其他 registry 下載
docker pull ghcr.io/user/image:tag

查看 Image

# 列出本地所有 image
docker images
docker image ls

# 顯示詳細資訊
docker images -a                        # 包含中繼層
docker images --no-trunc                # 顯示完整 ID
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

# 查看 image 詳細資訊
docker inspect nginx

# 查看 image 歷史
docker history nginx

刪除 Image

# 刪除單個 image
docker rmi nginx
docker rmi nginx:1.21
docker image rm nginx

# 刪除多個 image
docker rmi nginx redis mysql

# 強制刪除
docker rmi -f nginx

# 刪除未使用的 image
docker image prune
docker image prune -a                   # 刪除所有未使用的

# 刪除所有 image
docker rmi $(docker images -q)

建立 Image

# 從 Dockerfile 建立
docker build -t myapp:1.0 .
docker build -t myapp:latest .
docker build -f Dockerfile.prod -t myapp:prod .

# 指定 build context
docker build -t myapp:1.0 ./app

# 不使用快取
docker build --no-cache -t myapp:1.0 .

# 設定 build argument
docker build --build-arg VERSION=1.0 -t myapp .

# 從 container 建立 image
docker commit container-name myapp:1.0

匯出與匯入

# 儲存 image 為檔案
docker save nginx > nginx.tar
docker save -o nginx.tar nginx

# 載入 image 檔案
docker load < nginx.tar
docker load -i nginx.tar

# 匯出 container 為 image
docker export container-name > container.tar

# 匯入為 image
docker import container.tar myapp:1.0

標籤與推送

# 標籤 image
docker tag myapp:1.0 myapp:latest
docker tag myapp:1.0 username/myapp:1.0

# 推送到 Docker Hub
docker login                            # 先登入
docker push username/myapp:1.0
docker push username/myapp:latest

# 登出
docker logout

Container(容器)管理

執行 Container

# 基本執行
docker run nginx
docker run -d nginx                     # 背景執行
docker run --name my-nginx nginx        # 指定名稱

# 埠號映射
docker run -d -p 8080:80 nginx          # 主機:容器
docker run -d -p 127.0.0.1:8080:80 nginx # 指定 IP
docker run -d -P nginx                  # 隨機埠號

# 環境變數
docker run -e MYSQL_ROOT_PASSWORD=secret mysql
docker run -e NODE_ENV=production myapp

# 掛載 Volume
docker run -v /host/path:/container/path nginx
docker run -v myvolume:/data nginx

# 掛載當前目錄
docker run -v $(pwd):/app myapp

# 唯讀掛載
docker run -v /host/path:/container/path:ro nginx

# 互動模式
docker run -it ubuntu bash              # 互動式終端
docker run -it --rm ubuntu bash         # 結束後自動刪除

# 網路設定
docker run --network mynetwork nginx
docker run --network host nginx         # 使用主機網路

# 資源限制
docker run -m 512m nginx                # 限制記憶體
docker run --cpus 2 nginx               # 限制 CPU

# 重啟政策
docker run --restart always nginx       # 總是重啟
docker run --restart unless-stopped nginx
docker run --restart on-failure nginx

# 組合範例
docker run -d \
  --name my-nginx \
  -p 8080:80 \
  -v $(pwd)/html:/usr/share/nginx/html \
  -e NGINX_HOST=example.com \
  --restart unless-stopped \
  nginx:latest

查看 Container

# 列出執行中的 container
docker ps
docker container ls

# 列出所有 container(包含停止的)
docker ps -a
docker ps -a --no-trunc                 # 顯示完整資訊

# 只顯示 ID
docker ps -q
docker ps -aq

# 顯示最近建立的
docker ps -l                            # 最後一個
docker ps -n 5                          # 最近 5 個

# 查看 container 詳細資訊
docker inspect container-name

# 查看 container 統計資訊
docker stats                            # 所有 container
docker stats container-name             # 指定 container

# 查看 container 內的程序
docker top container-name

# 查看埠號映射
docker port container-name

管理執行中的 Container

# 停止 container
docker stop container-name
docker stop container1 container2       # 停止多個
docker stop $(docker ps -q)             # 停止所有

# 啟動已停止的 container
docker start container-name

# 重啟 container
docker restart container-name

# 暫停/取消暫停
docker pause container-name
docker unpause container-name

# 強制停止
docker kill container-name

# 等待 container 停止
docker wait container-name

刪除 Container

# 刪除已停止的 container
docker rm container-name

# 強制刪除執行中的 container
docker rm -f container-name

# 刪除多個 container
docker rm container1 container2

# 刪除所有已停止的 container
docker container prune

# 刪除所有 container
docker rm -f $(docker ps -aq)

與 Container 互動

# 進入執行中的 container
docker exec -it container-name bash
docker exec -it container-name sh       # 如果沒有 bash

# 執行單一指令
docker exec container-name ls /app
docker exec container-name cat /etc/hosts

# 以 root 身份執行
docker exec -u root -it container-name bash

# Attach 到 container(連接到主程序)
docker attach container-name

# 從 stdin 輸入
docker attach --sig-proxy=false container-name

查看日誌

# 查看 container 日誌
docker logs container-name

# 即時查看(追蹤)
docker logs -f container-name

# 顯示時間戳記
docker logs -t container-name

# 只顯示最後 N 行
docker logs --tail 100 container-name

# 顯示特定時間後的日誌
docker logs --since 2024-01-01 container-name
docker logs --since 1h container-name   # 最近 1 小時

複製檔案

# 從 container 複製到主機
docker cp container-name:/path/file.txt ./

# 從主機複製到 container
docker cp ./file.txt container-name:/path/

# 複製目錄
docker cp container-name:/app ./backup

Volume(資料卷)管理

建立與查看

# 建立 volume
docker volume create myvolume

# 列出所有 volume
docker volume ls

# 查看 volume 詳細資訊
docker volume inspect myvolume

使用 Volume

# 掛載 volume
docker run -v myvolume:/data nginx

# 建立並掛載 volume
docker run -v newvolume:/data nginx

# 匿名 volume
docker run -v /data nginx

# 查看 container 使用的 volume
docker inspect -f '{{ .Mounts }}' container-name

刪除 Volume

# 刪除 volume
docker volume rm myvolume

# 刪除未使用的 volume
docker volume prune

# 刪除所有 volume(危險!)
docker volume rm $(docker volume ls -q)

Network(網路)管理

建立與查看

# 列出網路
docker network ls

# 查看網路詳細資訊
docker network inspect bridge

# 建立網路
docker network create mynetwork
docker network create --driver bridge mynetwork
docker network create --subnet 172.18.0.0/16 mynetwork

連接網路

# 連接 container 到網路
docker network connect mynetwork container-name

# 中斷連接
docker network disconnect mynetwork container-name

# 執行時指定網路
docker run --network mynetwork nginx

刪除網路

# 刪除網路
docker network rm mynetwork

# 刪除未使用的網路
docker network prune

Docker Compose

基本操作

# 啟動服務(背景執行)
docker-compose up -d

# 前景執行(看日誌)
docker-compose up

# 指定檔案
docker-compose -f docker-compose.yml up -d

# 重新建立 container
docker-compose up -d --build

# 強制重新建立
docker-compose up -d --force-recreate

管理服務

# 停止服務
docker-compose stop

# 停止並刪除 container
docker-compose down

# 停止並刪除 container、volume
docker-compose down -v

# 停止並刪除 container、volume、image
docker-compose down -v --rmi all

# 查看服務狀態
docker-compose ps

# 查看日誌
docker-compose logs
docker-compose logs -f                  # 即時追蹤
docker-compose logs service-name        # 指定服務

# 執行指令
docker-compose exec service-name bash
docker-compose exec web npm install

# 重啟服務
docker-compose restart
docker-compose restart service-name

# 暫停/取消暫停服務
docker-compose pause
docker-compose unpause

建立與推送

# 建立 image
docker-compose build

# 重新建立(不使用快取)
docker-compose build --no-cache

# 推送 image
docker-compose push

# Pull image
docker-compose pull

擴展服務

# 擴展服務數量
docker-compose up -d --scale web=3

# 查看服務
docker-compose ps

查看與驗證

# 驗證 compose 檔案
docker-compose config

# 查看 compose 版本
docker-compose version

# 查看服務的環境變數
docker-compose config --services

系統管理

清理資源

# 清理未使用的資源(container、network、image)
docker system prune

# 包含 volume
docker system prune -a --volumes

# 強制清理(不確認)
docker system prune -f

# 查看磁碟使用
docker system df
docker system df -v                     # 詳細資訊

事件與監控

# 查看 Docker 事件
docker events

# 即時查看
docker events --since 1h

# 篩選特定類型
docker events --filter type=container
docker events --filter event=start

Registry 操作

# 登入 registry
docker login
docker login registry.example.com

# 登出
docker logout

# 搜尋 image
docker search ubuntu

# 推送 image
docker push username/image:tag

# Pull image
docker pull username/image:tag

Dockerfile 常用指令

# 基礎 image
FROM node:18-alpine

# 設定工作目錄
WORKDIR /app

# 複製檔案
COPY package.json .
COPY . .

# 執行指令
RUN npm install
RUN npm run build

# 設定環境變數
ENV NODE_ENV=production
ENV PORT=3000

# 開放埠號
EXPOSE 3000

# 設定 volume
VOLUME /data

# 設定使用者
USER node

# 設定啟動指令
CMD ["npm", "start"]
# 或
ENTRYPOINT ["node"]
CMD ["app.js"]

# 設定標籤
LABEL version="1.0"
LABEL maintainer="your@email.com"

# 健康檢查
HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

# Build argument
ARG VERSION=latest

.dockerignore 範例

# Node.js
node_modules
npm-debug.log

# Git
.git
.gitignore

# Docker
Dockerfile
docker-compose.yml
.dockerignore

# 文件
README.md
*.md

# 測試
test
*.test.js
coverage

# 環境變數
.env
.env.local

# IDE
.vscode
.idea

# 日誌
logs
*.log

# 暫存檔案
*.tmp
*.swp

Docker Compose 範例

基本結構

version: '3.8'

services:
  # Web 服務
  web:
    build: .
    image: myapp:latest
    container_name: myapp-web
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
    volumes:
      - ./app:/app
      - /app/node_modules
    depends_on:
      - db
      - redis
    restart: unless-stopped
    networks:
      - mynetwork

  # 資料庫
  db:
    image: postgres:15-alpine
    container_name: myapp-db
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - mynetwork

  # Redis
  redis:
    image: redis:7-alpine
    container_name: myapp-redis
    networks:
      - mynetwork

volumes:
  db-data:

networks:
  mynetwork:
    driver: bridge

完整範例(含更多選項)

version: '3.8'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        - VERSION=1.0
    image: myapp:latest
    container_name: myapp-web
    hostname: web
    ports:
      - "3000:3000"
    expose:
      - "3000"
    environment:
      NODE_ENV: production
      DB_HOST: db
    env_file:
      - .env
    volumes:
      - ./app:/app
      - logs:/var/log
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped
    networks:
      mynetwork:
        ipv4_address: 172.20.0.10
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 1G
        reservations:
          cpus: '1'
          memory: 512M

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - db-data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - mynetwork
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  db-data:
    driver: local
  logs:
    driver: local

networks:
  mynetwork:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

實用組合指令

# 停止並刪除所有 container
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

# 刪除所有未使用的資源
docker system prune -a --volumes -f

# 查看所有 container 的 IP
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

# 查看 container 佔用的磁碟空間
docker ps -s

# 進入最新建立的 container
docker exec -it $(docker ps -lq) bash

# 備份 volume
docker run --rm -v myvolume:/source -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /source .

# 還原 volume
docker run --rm -v myvolume:/target -v $(pwd):/backup alpine tar xzf /backup/backup.tar.gz -C /target

# 查看 container 的環境變數
docker exec container-name env

# 查看 image 的層次結構
docker history --no-trunc image-name

除錯指令

# 查看 container 為什麼停止
docker logs container-name
docker inspect container-name | grep -A 10 State

# 查看 container 的資源使用
docker stats container-name --no-stream

# 查看 network 連接
docker network inspect bridge

# 測試 network 連通性
docker run --rm --network mynetwork alpine ping container-name

# 查看 volume 位置
docker volume inspect myvolume | grep Mountpoint

# 進入 volume 目錄
docker run --rm -v myvolume:/data alpine ls -la /data

效能優化

# 使用 BuildKit 加速建立
DOCKER_BUILDKIT=1 docker build -t myapp .

# 多階段建立(在 Dockerfile)
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/main.js"]

# 限制資源
docker run -m 512m --cpus 1 myapp

# 使用本地快取
docker build --cache-from myapp:latest -t myapp:new .

安全最佳實踐

# 不使用 root 執行
docker run -u 1000:1000 myapp

# 唯讀檔案系統
docker run --read-only myapp

# 限制權限
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myapp

# 掃描漏洞
docker scan myapp:latest

# 使用 secrets(Compose)
docker-compose --env-file .env.secret up -d

總結

核心要點

  • Docker 指令分為 Image、Container、Volume、Network 四大類
  • 使用 -d 背景執行,-it 互動模式,-p 映射 Port
  • 定期使用 prune 指令清理未使用的資源
  • 善用組合指令提高效率

快速參考

類別 常用指令 說明
Image docker pull / docker build 下載 / 建立
Container docker run / docker ps 執行 / 查看
Volume docker volume create / ls 建立 / 列表
Network docker network create / ls 建立 / 列表
清理 docker system prune 清理資源

建立日期:2025-10-28 最後更新:2025-11-18

🔗相關文章