作为一名技术工程师,掌握Docker命令是现代软件开发和运维中不可或缺的技能。Docker作为容器技术的领军者,其强大的命令行工具为我们提供了高效的容器管理能力。本文将系统性地介绍Docker的常用命令,帮助您在容器管理工作中事半功倍。
一、Docker命令基础概念
1.1 Docker命令结构解析
Docker命令遵循统一的格式规范:
docker [OPTIONS] COMMAND [ARG...]
基本组成部分:
docker:Docker客户端程序[OPTIONS]:全局选项,如--version、--helpCOMMAND:具体的操作命令,如run、build、pull[ARG...]:命令参数
获取帮助信息:
# 查看Docker版本和基本信息
docker --version
docker version
# 获取命令帮助
docker --help
docker run --help
1.2 Docker命令分类概览
Docker命令可以按功能分为五大类:
- 镜像管理命令:pull、push、build、images、rmi等
- 容器生命周期命令:run、start、stop、rm、exec等
- 网络管理命令:network create、network ls等
- 存储管理命令:volume create、volume ls等
- 系统信息命令:info、stats、system等
二、镜像管理核心命令
2.1 镜像获取与查看
拉取镜像:
# 拉取最新版本镜像
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"
2.2 镜像构建与管理
构建镜像:
# 从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
三、容器生命周期管理命令
3.1 容器创建与启动
创建并运行容器:
# 基本运行命令
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:指定网络模式
3.2 容器状态管理
查看容器状态:
# 查看运行中的容器
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
3.3 容器操作与维护
进入运行中的容器:
# 在容器中执行命令
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
四、网络与存储管理命令
4.1 网络管理
查看网络:
# 列出所有网络
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
4.2 数据卷管理
查看数据卷:
# 列出所有数据卷
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
五、系统监控与信息查看命令
5.1 系统状态监控
查看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
5.2 系统清理与维护
系统清理:
# 清理系统(删除所有未使用的资源)
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
六、实战场景应用案例
6.1 Web应用部署场景
部署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
6.2 开发环境搭建场景
快速搭建开发数据库:
# 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
七、命令组合与高效技巧
7.1 命令组合使用技巧
管道操作示例:
# 查找并删除特定镜像
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"
7.2 提升效率的最佳实践
设置别名和快捷命令:
# 在 ~/.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
八、总结与进阶建议
8.1 命令学习路径总结
新手必掌握的基础命令:
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- 容器备份恢复
8.2 持续学习建议
Docker Compose进阶:
掌握基础Docker命令后,建议学习Docker Compose来管理多容器应用:
version: '3.8'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
Kubernetes命令对比:
了解Docker命令与Kubernetes命令的对应关系,为容器编排做准备:
docker run↔kubectl rundocker ps↔kubectl get podsdocker logs↔kubectl logs
容器最佳实践参考:
- 安全性:使用非root用户运行容器
- 资源限制:设置内存和CPU限制
- 健康检查:配置容器健康检查
- 日志管理:合理配置日志驱动和轮转
- 镜像优化:使用多阶段构建减小镜像体积
持续学习资源:
- Docker官方文档
- 容器技术社区博客
- 实际项目实践
- 云原生技术栈学习
通过本文的系统介绍,相信您已经对Docker的常用命令有了全面的了解。Docker命令虽然众多,但只要掌握其规律和分类,配合实际项目练习,就能够熟练运用这些工具来提升容器管理效率。
记住,工具只是手段,真正的价值在于如何将这些命令组合起来解决实际问题。建议您在学习过程中多动手实践,从简单的单容器应用开始,逐步过渡到复杂的多容器架构,这样才能真正掌握Docker的精髓,让容器管理工作事半功倍。