
作为一名技术工程师,掌握Docker命令是现代软件开发和运维中不可或缺的技能。Docker作为容器技术的领军者,其强大的命令行工具为我们提供了高效的容器管理能力。本文将系统性地介绍Docker的常用命令,帮助您在容器管理工作中事半功倍。
Docker命令遵循统一的格式规范:
docker [OPTIONS] COMMAND [ARG...]基本组成部分:
docker:Docker客户端程序[OPTIONS]:全局选项,如--version、--helpCOMMAND:具体的操作命令,如run、build、pull[ARG...]:命令参数获取帮助信息:
# 查看Docker版本和基本信息
docker --version
docker version
# 获取命令帮助
docker --help
docker run --helpDocker命令可以按功能分为五大类:
拉取镜像:
# 拉取最新版本镜像
docker pull nginx
# 拉取指定版本镜像
docker pull nginx:1.20.1
# 拉取指定仓库的镜像
docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx查看本地镜像:
# 列出所有镜像
docker images
# 查看镜像详细信息
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
# 过滤特定镜像
docker images nginx搜索镜像:
# 在Docker Hub搜索镜像
docker search nginx
# 限制搜索结果数量
docker search --limit 5 nginx查看镜像详细信息:
# 查看镜像完整信息
docker inspect nginx:latest
# 查看镜像的环境变量
docker inspect nginx:latest | grep -A 10 "Env"构建镜像:
# 从Dockerfile构建镜像
docker build -t myapp:1.0 .
# 指定Dockerfile路径
docker build -t myapp:1.0 -f /path/to/Dockerfile .
# 构建时传递参数
docker build --build-arg ENV=production -t myapp:1.0 .镜像标签管理:
# 为镜像添加新标签
docker tag nginx:latest my-nginx:v1.0
# 为镜像添加多个标签
docker tag myapp:1.0 myapp:latest
docker tag myapp:1.0 registry.example.com/myapp:1.0删除镜像:
# 删除单个镜像
docker rmi nginx:latest
# 删除多个镜像
docker rmi nginx:latest mysql:8.0
# 强制删除镜像(即使有容器使用)
docker rmi -f nginx:latest
# 删除所有悬空镜像
docker rmi $(docker images -f "dangling=true" -q)查看镜像历史:
# 查看镜像构建历史
docker history nginx:latest
# 显示完整的命令
docker history --no-trunc nginx:latest创建并运行容器:
# 基本运行命令
docker run nginx
# 后台运行容器
docker run -d nginx
# 指定容器名称
docker run -d --name my-nginx nginx
# 端口映射
docker run -d -p 8080:80 --name my-nginx nginx
# 挂载数据卷
docker run -d -p 8080:80 -v /host/path:/container/path nginx
# 设置环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
# 交互式运行
docker run -it ubuntu:20.04 /bin/bash创建容器(不启动):
# 只创建容器
docker create --name my-container nginx
# 后续启动容器
docker start my-container常用参数详解:
-d:后台运行(detached模式)-p:端口映射,格式为宿主机端口:容器端口-v:数据卷挂载,格式为宿主机路径:容器路径--name:指定容器名称-e:设置环境变量-it:交互式终端(-i保持输入开放,-t分配伪终端)--rm:容器停止后自动删除--network:指定网络模式查看容器状态:
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 查看最近创建的容器
docker ps -l
# 自定义显示格式
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# 查看容器详细信息
docker inspect my-nginx停止容器:
# 优雅停止容器
docker stop my-nginx
# 强制停止容器
docker kill my-nginx
# 停止所有运行中的容器
docker stop $(docker ps -q)重启容器:
# 重启单个容器
docker restart my-nginx
# 重启多个容器
docker restart container1 container2暂停和恢复容器:
# 暂停容器
docker pause my-nginx
# 恢复容器
docker unpause my-nginx进入运行中的容器:
# 在容器中执行命令
docker exec -it my-nginx /bin/bash
# 执行单个命令
docker exec my-nginx nginx -t
# 以root用户身份进入容器
docker exec -it --user root my-nginx /bin/bash查看容器日志:
# 查看容器日志
docker logs my-nginx
# 实时查看日志
docker logs -f my-nginx
# 查看最近的日志行数
docker logs --tail 100 my-nginx
# 查看指定时间段的日志
docker logs --since "2023-01-01" --until "2023-01-02" my-nginx文件拷贝:
# 从容器拷贝文件到宿主机
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
# 从宿主机拷贝文件到容器
docker cp ./index.html my-nginx:/usr/share/nginx/html/
# 拷贝整个目录
docker cp my-nginx:/var/log ./logs删除容器:
# 删除停止的容器
docker rm my-nginx
# 强制删除运行中的容器
docker rm -f my-nginx
# 删除所有停止的容器
docker rm $(docker ps -a -q)
# 运行完成后自动删除容器
docker run --rm -it ubuntu:20.04 /bin/bash查看网络:
# 列出所有网络
docker network ls
# 查看网络详细信息
docker network inspect bridge创建网络:
# 创建桥接网络
docker network create my-network
# 创建指定子网的网络
docker network create --subnet=172.20.0.0/16 my-custom-network
# 创建overlay网络(用于Swarm)
docker network create -d overlay my-overlay-network网络连接管理:
# 将容器连接到网络
docker network connect my-network my-container
# 断开容器网络连接
docker network disconnect my-network my-container
# 创建容器时指定网络
docker run -d --network my-network --name web nginx查看端口映射:
# 查看容器端口映射
docker port my-nginx
# 查看指定端口映射
docker port my-nginx 80查看数据卷:
# 列出所有数据卷
docker volume ls
# 查看数据卷详细信息
docker volume inspect my-volume创建数据卷:
# 创建命名数据卷
docker volume create my-volume
# 创建带驱动的数据卷
docker volume create --driver local my-local-volume使用数据卷:
# 挂载命名数据卷
docker run -d -v my-volume:/data nginx
# 挂载宿主机目录
docker run -d -v /host/data:/container/data nginx
# 只读挂载
docker run -d -v /host/data:/container/data:ro nginx删除数据卷:
# 删除指定数据卷
docker volume rm my-volume
# 删除所有未使用的数据卷
docker volume prune查看Docker系统信息:
# 查看Docker详细信息
docker info
# 查看Docker版本信息
docker version
# 检查Docker系统状态
docker system info实时监控容器资源:
# 查看所有容器的资源使用情况
docker stats
# 查看指定容器的资源使用
docker stats my-nginx
# 只显示一次统计信息
docker stats --no-stream
# 自定义显示格式
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"查看磁盘使用情况:
# 查看Docker磁盘使用情况
docker system df
# 查看详细的磁盘使用信息
docker system df -v系统清理:
# 清理系统(删除所有未使用的资源)
docker system prune
# 强制清理(包括未使用的镜像)
docker system prune -a
# 清理指定时间前的资源
docker system prune --filter "until=24h"分类清理:
# 清理停止的容器
docker container prune
# 清理悬空镜像
docker image prune
# 清理所有未使用的镜像
docker image prune -a
# 清理未使用的数据卷
docker volume prune
# 清理未使用的网络
docker network prune部署Nginx服务器:
# 1. 拉取Nginx镜像
docker pull nginx:latest
# 2. 创建自定义配置目录
mkdir -p /opt/nginx/{conf,html,logs}
# 3. 运行Nginx容器
docker run -d \
--name production-nginx \
-p 80:80 \
-p 443:443 \
-v /opt/nginx/conf:/etc/nginx/conf.d \
-v /opt/nginx/html:/usr/share/nginx/html \
-v /opt/nginx/logs:/var/log/nginx \
--restart unless-stopped \
nginx:latest
# 4. 查看运行状态
docker ps | grep nginx
docker logs production-nginx多容器应用编排示例:
# 1. 创建自定义网络
docker network create webapp-network
# 2. 启动MySQL数据库
docker run -d \
--name mysql-db \
--network webapp-network \
-e MYSQL_ROOT_PASSWORD=secret123 \
-e MYSQL_DATABASE=webapp \
-v mysql-data:/var/lib/mysql \
mysql:8.0
# 3. 启动应用服务器
docker run -d \
--name app-server \
--network webapp-network \
-e DB_HOST=mysql-db \
-e DB_PASSWORD=secret123 \
my-app:latest
# 4. 启动Nginx反向代理
docker run -d \
--name nginx-proxy \
--network webapp-network \
-p 80:80 \
-v ./nginx.conf:/etc/nginx/nginx.conf \
nginx:latest快速搭建开发数据库:
# Redis开发环境
docker run -d \
--name dev-redis \
-p 6379:6379 \
redis:alpine
# MongoDB开发环境
docker run -d \
--name dev-mongo \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=password \
mongo:latest
# PostgreSQL开发环境
docker run -d \
--name dev-postgres \
-p 5432:5432 \
-e POSTGRES_PASSWORD=password \
-e POSTGRES_DB=devdb \
-v postgres-data:/var/lib/postgresql/data \
postgres:13开发工具容器化:
# Node.js开发环境
docker run -it --rm \
-v $(pwd):/app \
-w /app \
-p 3000:3000 \
node:16-alpine \
sh
# Python开发环境
docker run -it --rm \
-v $(pwd):/workspace \
-w /workspace \
python:3.9-slim \
python app.py管道操作示例:
# 查找并删除特定镜像
docker images | grep "nginx" | awk '{print $3}' | xargs docker rmi
# 停止所有运行中的容器
docker ps -q | xargs docker stop
# 删除所有退出状态的容器
docker ps -a | grep "Exited" | awk '{print $1}' | xargs docker rm
# 查看容器占用的端口
docker ps --format "table {{.Names}}\t{{.Ports}}" | grep "80"批量操作技巧:
# 批量拉取镜像
images=("nginx:latest" "mysql:8.0" "redis:alpine")
for image in "${images[@]}"; do
docker pull "$image"
done
# 批量删除特定标签的镜像
docker images | grep "^<none>" | awk '{print $3}' | xargs docker rmi
# 批量导出镜像
for image in $(docker images --format "{{.Repository}}:{{.Tag}}"); do
docker save "$image" -o "${image//\//_}.tar"
done条件过滤与格式化:
# 查看占用内存最多的容器
docker stats --no-stream --format "table {{.Container}}\t{{.MemUsage}}" | sort -k2 -hr
# 查看特定时间启动的容器
docker ps --filter "since=2023-01-01" --format "table {{.Names}}\t{{.CreatedAt}}"
# 查看健康检查失败的容器
docker ps --filter "health=unhealthy"
# 查看指定网络中的容器
docker ps --filter "network=my-network"设置别名和快捷命令:
# 在 ~/.bashrc 或 ~/.zshrc 中添加
alias dps='docker ps'
alias dpa='docker ps -a'
alias di='docker images'
alias dex='docker exec -it'
alias dlog='docker logs -f'
alias dstop='docker stop'
alias drm='docker rm'
alias drmi='docker rmi'
# 复合别名
alias dclean='docker system prune -f'
alias dstopall='docker stop $(docker ps -q)'
alias drmall='docker rm $(docker ps -a -q)'脚本自动化管理:
#!/bin/bash
# docker-manage.sh - Docker管理脚本
case "$1" in
"clean")
echo "清理Docker系统..."
docker system prune -f
docker volume prune -f
;;
"backup")
echo "备份Docker镜像..."
docker images --format "{{.Repository}}:{{.Tag}}" | while read image; do
docker save "$image" | gzip > "backup_${image//\//_}.tar.gz"
done
;;
"monitor")
echo "监控容器状态..."
watch -n 1 'docker stats --no-stream'
;;
*)
echo "使用方法: $0 {clean|backup|monitor}"
;;
esac常见问题排查命令:
# 检查容器健康状态
docker inspect --format='{{.State.Health.Status}}' container_name
# 查看容器启动失败原因
docker logs --details container_name
# 检查端口占用情况
docker ps --format "table {{.Names}}\t{{.Ports}}" | grep ":80"
# 查看容器资源限制
docker inspect container_name | grep -A 10 "Resources"
# 检查网络连通性
docker exec container_name ping -c 3 google.com
# 查看容器进程
docker exec container_name ps aux新手必掌握的基础命令:
docker run - 运行容器的核心命令docker ps - 查看容器状态docker images - 管理镜像docker logs - 查看日志docker exec - 进入容器docker stop/start - 控制容器状态进阶使用的高级命令:
docker build - 构建自定义镜像docker network - 网络管理docker volume - 数据卷管理docker stats - 性能监控docker system - 系统管理生产环境的关键命令:
docker inspect - 详细信息查看docker logs --since --until - 日志分析docker system prune - 系统清理docker save/load - 镜像备份恢复docker export/import - 容器备份恢复Docker Compose进阶:
掌握基础Docker命令后,建议学习Docker Compose来管理多容器应用:
version: '3.8'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secretKubernetes命令对比:
了解Docker命令与Kubernetes命令的对应关系,为容器编排做准备:
docker run ↔ kubectl rundocker ps ↔ kubectl get podsdocker logs ↔ kubectl logs容器最佳实践参考:
持续学习资源:
通过本文的系统介绍,相信您已经对Docker的常用命令有了全面的了解。Docker命令虽然众多,但只要掌握其规律和分类,配合实际项目练习,就能够熟练运用这些工具来提升容器管理效率。
记住,工具只是手段,真正的价值在于如何将这些命令组合起来解决实际问题。建议您在学习过程中多动手实践,从简单的单容器应用开始,逐步过渡到复杂的多容器架构,这样才能真正掌握Docker的精髓,让容器管理工作事半功倍。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。