Docker 命令終極指南
一、引言
Docker徹底改變了我們開發、交付和運行應用程序的方式。通過將軟件封裝在容器中,Docker確保應用程序在從開發者電腦到生產服務器的不同環境中無縫運行。這種一致性消除了“在我機器上能運行”的問題,并簡化了整個軟件開發生命周期。
二、Docker 安裝
在開始前先確保您已正確安裝和配置Docker。在Linux上安裝Docker:
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh
對于其他操作系統,請訪問官方文檔。安裝完成后,驗證Docker是否正常工作:
docker --version
docker run hello-world
要訪問和推送鏡像到Docker Hub:
docker login
docker logout # 完成后登出
三、容器管理
運行容器
- 以后臺運行模式運行容器
docker run -d --name mycontainer -p 8080:80 nginx
- 交互式運行容器
docker run -it ubuntu /bin/bash
- 限制資源運行容器
docker run -d --name mycontainer --cpus 0.5 --memory 512m nginx
列出容器
- 列出正在運行的容器
docker ps
- 列出所有容器(包括已停止的)
docker ps -a
- 列出容器大小
docker ps -s
啟動、停止和重啟容器
- 啟動已停止的容器
docker start mycontainer
- 停止正在運行的容器
docker stop mycontainer
- 重啟容器
docker restart mycontainer
- 暫停正在運行的容器
docker pause mycontainer
- 恢復暫停的容器
docker unpause mycontainer
- 強制終止正在運行的容器
docker kill mycontainer
刪除容器
- 刪除已停止的容器
docker rm mycontainer
- 強制刪除正在運行的容器
docker rm -f mycontainer
- 刪除所有已停止的容器
docker container prune
- 刪除所有容器(包括正在運行和已停止的)
docker rm -f $(docker ps -aq)
在容器中執行命令
- 在運行的容器中執行命令
docker exec -it mycontainer /bin/bash
- 以root身份在運行的容器中執行命令
docker exec -it -u root mycontainer /bin/bash
- 在主機和容器之間復制文件
docker cp /host/path/file.txt mycontainer:/container/path/
docker cp mycontainer:/container/path/file.txt /host/path/
查看容器日志和信息
- 查看容器日志
docker logs mycontainer
- 跟蹤容器日志
docker logs -f mycontainer
- 查看容器日志的最后N行
docker logs --tail <number> mycontainer
- 查看容器資源使用統計信息
docker stats mycontainer
- 查看容器的正在運行的進程
docker top mycontainer
- 查看容器的詳細信息
docker inspect mycontainer
- 查看容器文件系統上文件或目錄的更改
docker diff mycontainer
四、鏡像管理
列出和拉取鏡像
- 列出本地鏡像
docker images
- 從Docker Hub拉取鏡像
docker pull nginx
構建鏡像
- 從Dockerfile構建鏡像
docker build -t myimage:latest.
- 使用特定的Dockerfile構建
docker build -f Dockerfile.dev -t myimage:dev.
- 不使用緩存構建
docker build --no-cache
標記鏡像
對鏡像進行版本管理和組織:
- 標記鏡像
docker tag myimage:latest myrepo/myimage:v1.0
推送鏡像
- 將鏡像推送到Docker Hub
docker push myrepo/myimage:v1.0
刪除鏡像
- 刪除鏡像
docker rmi myimage:latest
- 刪除所有未使用的鏡像
docker image prune -a
- 刪除所有鏡像
docker rmi $(docker images -q)
獲取鏡像信息
- 查看容器的詳細信息
docker image inspect myimage:latest
- 查看鏡像的歷史記錄
docker history myimage:latest
保存和加載鏡像
在不使用鏡像倉庫的情況下在系統之間傳輸鏡像:
- 將鏡像保存為tar歸檔文件
docker save myimage:latest > myimage.tar
- 從tar歸檔文件加載鏡像
docker load < myimage.tar
五、Docker網絡:連接容器
列出和創建網絡
管理Docker網絡以實現容器通信:
- 列出網絡
docker network ls
- 創建網絡
docker network create mynetwork
連接和斷開容器
管理容器網絡連接:
- 將容器連接到指定網絡
docker network connect mynetwork mycontainer
- 從網絡斷開容器連接
docker network disconnect mynetwork mycontainer
檢查網絡
獲取Docker網絡的詳細信息:
- 檢查網絡
docker network inspect mynetwork
刪除網絡
清理未使用的網絡:
- 刪除網絡
docker network rm mynetwork
六、卷管理:持久數據存儲
列出和創建卷
管理Docker卷以實現持久數據存儲:
- 列出卷
docker volume ls
- 創建卷
docker volume create myvolume
使用卷與容器
演示如何在容器中使用卷:
- 運行帶有卷的容器
docker run -d --name mycontainer -v myvolume:/app/data nginx
檢查卷
獲取卷的詳細信息:
- 檢查卷
docker volume inspect myvolume
刪除卷
清理未使用的卷:
- 刪除卷
docker volume rm myvolume
- 刪除所有未使用的卷
docker volume prune
七、Docker Compose
- 啟動docker-compose.yml中定義的服務
docker-compose up -d
- 停止docker-compose.yml中定義的服務
docker-compose down
- 查看服務日志
docker-compose logs
- 擴展服務
docker-compose up -d --scale web=3
- 重建服務
docker-compose build
- 列出由Compose管理的容器
docker-compose ps
- 在服務容器中運行命令
docker-compose exec <service_name> <command>
九、資源管理與監控
監控和管理Docker環境中的資源使用情況:
- 查看Docker磁盤使用情況
docker system df
- 查看詳細的容器資源使用情況
docker stats
- 更新容器的資源限制
docker update --memory <limit> <container_name>
十、清理和修剪
通過定期清理維護健康的Docker環境:
- 刪除所有未使用的容器、網絡、鏡像和卷
docker system prune -a
- 刪除所有已停止的容器
docker container prune
- 刪除所有未使用的鏡像
docker image prune -a
- 刪除所有未使用的卷
docker volume prune
- 刪除所有未使用的網絡
docker network prune
十一、安全與掃描
識別和解決Docker鏡像中的安全漏洞:
- 掃描鏡像中的漏洞
docker scan myimage:latest
- 查看鏡像漏洞詳細信息
docker scout cves myimage:latest
- 比較兩個鏡像的漏洞
docker scout compare --to myimage:latest myimage:v2
十二、高級Docker技術
多階段構建
使用多階段構建創建更小、更高效的鏡像:
- 構建階段
FROM node:14 AS build
WORKDIR /app
COPY package*.json./
RUN npm install
COPY..
RUN npm run build
- 生產階段
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
跨平臺構建
為多個架構構建鏡像:
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest.
健康檢查
在Dockerfile中實現健康檢查以確保容器正確運行:
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/ || exit 1
使用Docker作為開發環境
創建一個一次性的開發環境:
docker run -it --rm -v $(pwd):/app -w /app node:14 bash
十三、故障排除與調試
用于解決Docker相關問題的寶貴命令:
- 實時查看Docker事件
docker events
- 獲取容器退出代碼
docker wait <container>
- 運行網絡故障排除工具包
docker run --net=host --privileged -it nicolaka/netshoot
- 調試容器文件系統
docker export <container> > container.tar
docker import container.tar
- 以調試模式運行Docker守護進程
dockerd --debug
十四、Docker最佳實踐
- 使用官方基礎鏡像
- 最小化Dockerfile中的層數
- 使用多階段構建來減小鏡像大小
- 實施適當的標記策略
- 定期更新和修補鏡像
- 對多容器應用程序使用Docker Compose
- 實施日志記錄和監控解決方案
- 定期對鏡像進行安全掃描
- 使用卷存儲持久數據
- 對容器實施資源限制