文章目錄
- Docker基礎概念
- 鏡像管理命令
- 鏡像查看和搜索
- 鏡像下載和刪除
- 鏡像構建
- 容器生命周期管理
- 創建和啟動容器
- 容器控制命令
- 容器清理
- 容器交互和調試
- 進入容器
- 文件操作
- 日志和監控
- 數據管理
- 數據卷(Volume)
- 綁定掛載
- 網絡管理
- 網絡基礎操作
- 端口映射
- Dockerfile和Docker Compose的作用說明
- Dockerfile的作用
- Docker Compose的作用
- 兩者的關系
- 總結
Docker基礎概念
在深入命令之前,先理解幾個關鍵概念:
- 鏡像(Image):應用的只讀模板,包含運行應用所需的所有內容
- 容器(Container):鏡像的運行實例,是應用的實際運行環境
- 倉庫(Repository):存儲和分發鏡像的地方,如Docker Hub
簡單類比:鏡像就像是"類",容器就是"類的實例對象"。
鏡像管理命令
鏡像查看和搜索
# 查看本地鏡像列表
docker images
docker image ls# 搜索Docker Hub上的鏡像
docker search nginx
docker search --limit 5 mysql # 限制搜索結果數量
鏡像下載和刪除
# 下載鏡像
docker pull nginx # 下載最新版本
docker pull nginx:1.20 # 下載指定版本
docker pull mysql:8.0 # 下載MySQL 8.0# 刪除鏡像
docker rmi nginx:latest # 刪除指定鏡像
docker rmi $(docker images -q) # 刪除所有鏡像(慎用)
docker image prune # 刪除懸空鏡像(推薦)
鏡像構建
# 從Dockerfile構建鏡像
docker build -t myapp:v1.0 . # 構建并打標簽
docker build -t myapp:latest --no-cache . # 不使用緩存構建# 從容器創建鏡像(不推薦,但有時有用)
docker commit container_name new_image:tag
容器生命周期管理
創建和啟動容器
# 運行容器的基本命令
docker run hello-world # 運行測試容器# 常用參數組合
docker run -d --name mynginx -p 8080:80 nginx
# -d: 后臺運行
# --name: 指定容器名稱
# -p: 端口映射 (主機端口:容器端口)# 交互式運行
docker run -it ubuntu:20.04 /bin/bash
# -i: 交互模式
# -t: 分配偽終端# 掛載數據卷
docker run -d --name myapp -v /host/path:/container/path nginx
docker run -d --name mydb -v myvolume:/var/lib/mysql mysql:8.0
容器控制命令
# 查看容器狀態
docker ps # 查看運行中的容器
docker ps -a # 查看所有容器(包括停止的)
docker ps -q # 只顯示容器ID# 啟動和停止容器
docker start container_name # 啟動已停止的容器
docker stop container_name # 優雅停止容器
docker kill container_name # 強制停止容器
docker restart container_name # 重啟容器# 暫停和恢復容器
docker pause container_name # 暫停容器
docker unpause container_name # 恢復容器
容器清理
# 刪除容器
docker rm container_name # 刪除已停止的容器
docker rm -f container_name # 強制刪除運行中的容器
docker rm $(docker ps -aq) # 刪除所有容器# 自動清理
docker container prune # 刪除所有停止的容器
docker system prune # 清理未使用的鏡像、容器、網絡
docker system prune -a # 更徹底的清理(包括未使用的鏡像)
容器交互和調試
進入容器
# 在運行的容器中執行命令
docker exec -it container_name /bin/bash # 進入容器交互終端
docker exec container_name ls /app # 在容器中執行單條命令
docker exec -u root container_name /bin/bash # 以root用戶身份進入
文件操作
# 容器和主機之間復制文件
docker cp file.txt container_name:/app/ # 從主機復制到容器
docker cp container_name:/app/file.txt ./ # 從容器復制到主機# 查看容器文件系統變化
docker diff container_name
日志和監控
# 查看容器日志
docker logs container_name # 查看容器日志
docker logs -f container_name # 實時跟蹤日志
docker logs --tail 100 container_name # 查看最后100行日志
docker logs -t container_name # 顯示時間戳# 查看容器詳細信息
docker inspect container_name # 查看容器詳細配置
docker stats # 實時查看所有容器資源使用情況
docker stats container_name # 查看指定容器資源使用
數據管理
數據卷(Volume)
# 創建和管理數據卷
docker volume create myvolume # 創建數據卷
docker volume ls # 列出所有數據卷
docker volume inspect myvolume # 查看數據卷詳情
docker volume rm myvolume # 刪除數據卷# 使用數據卷
docker run -d --name webapp -v myvolume:/app/data nginx
綁定掛載
# 掛載主機目錄到容器
docker run -d --name dev-env -v $(pwd):/workspace node:14
docker run -d --name logs -v /var/log:/container/logs nginx# 只讀掛載
docker run -d --name readonly-app -v /host/config:/app/config:ro nginx
網絡管理
網絡基礎操作
# 網絡管理
docker network ls # 列出所有網絡
docker network create mynetwork # 創建自定義網絡
docker network inspect mynetwork # 查看網絡詳情
docker network rm mynetwork # 刪除網絡# 容器連接到網絡
docker run -d --name app1 --network mynetwork nginx
docker network connect mynetwork container_name # 將已存在容器連接到網絡
docker network disconnect mynetwork container_name # 斷開網絡連接
端口映射
# 各種端口映射方式
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 port container_name
Dockerfile和Docker Compose的作用說明
Dockerfile的作用
Dockerfile是什么?
Dockerfile是一個文本文件,包含了一系列指令,用來自動化構建Docker鏡像。它就像是"鏡像的制作配方"。
主要作用:
-
標準化環境構建:確保每次構建的環境完全一致,讓團隊成員使用相同的運行環境。
-
自動化鏡像制作
FROM node:16 # 選擇基礎環境 WORKDIR /app # 設置工作目錄 COPY package.json ./ # 復制依賴文件 RUN npm install # 安裝依賴 COPY . . # 復制源代碼 CMD ["npm", "start"] # 設置啟動命令
Docker Compose的作用
Docker Compose是什么?
Docker Compose是用來定義和管理多容器應用的工具,通過一個YAML文件描述整個應用的架構。
主要作用:
-
多容器編排管理
services:web: # Web服務image: nginxdb: # 數據庫服務image: mysqlcache: # 緩存服務image: redis
-
簡化復雜應用部署:只用一個命令啟動整個應用棧、自動處理容器間依賴關系和統一管理網絡和數據卷。
-
服務間通信管理:自動創建內部網絡、服務間可通過服務名直接通信、統一管理端口映射。
兩者的關系
協作關系:
- Dockerfile負責"如何制作鏡像"
- Docker Compose負責"如何編排容器"
- 通常在docker-compose.yml中引用Dockerfile
使用場景:
場景 | 使用工具 | 原因 |
---|---|---|
單個應用容器化 | Dockerfile | 只需要構建一個鏡像 |
微服務架構部署 | Dockerfile + Docker Compose | 需要編排多個服務 |
開發環境搭建 | Docker Compose | 需要數據庫、緩存等多個服務 |
CI/CD流水線 | 主要用Dockerfile | 構建和推送鏡像 |
總結
- Dockerfile = “制作配方”:告訴Docker如何一步步構建你的應用鏡像
- Docker Compose = “指揮家”:協調多個容器協同工作,形成完整的應用系統
兩者結合使用,能夠實現從單個應用的容器化到復雜系統的自動化部署,是現代軟件開發中不可或缺的工具組合。