Docker基础操作与常用命令详解:容器管理必备技能
·
🏗️ 一、Docker基础架构理解
1.1 Docker核心组件关系
Docker采用客户端-服务器架构模式,理解各组件之间的关系对于高效使用Docker至关重要:
1.1.1 Docker Daemon(dockerd)
- 作用:Docker的核心后台进程,负责管理镜像、容器、网络等资源
- 特点:监听Docker API请求,管理Docker对象
- 通信:通过UNIX套接字或网络接口与客户端通信
1.1.2 Docker Client(docker)
- 作用:用户与Docker交互的主要接口
- 特点:命令行工具,将用户命令转换为API调用
- 使用:所有docker命令都通过客户端执行
1.1.3 Docker Registry
- 作用:存储和分发Docker镜像的服务
- 类型:
- 公有仓库:Docker Hub、阿里云容器镜像服务等
- 私有仓库:Harbor、Registry等
1.2 容器生命周期概念
容器的生命周期是理解Docker操作的基础:
创建 → 启动 → 运行 → 停止 → 重启 → 删除
1.2.1 容器状态详解
- Created:已创建但未启动
- Running:正在运行
- Paused:已暂停
- Exited:已停止
- Dead:已死亡,无法重启
1.2.2 状态转换命令
# 创建容器
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
# 启动容器
docker start [OPTIONS] CONTAINER [CONTAINER...]
# 运行容器(创建+启动)
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 停止容器
docker stop [OPTIONS] CONTAINER [CONTAINER...]
# 重启容器
docker restart [OPTIONS] CONTAINER [CONTAINER...]
# 删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
🖼️ 二、镜像管理命令
镜像是Docker的基石,掌握镜像管理命令是使用Docker的第一步。
2.1 镜像搜索与拉取
2.1.1 搜索镜像
# 基本搜索
docker search nginx
# 搜索官方镜像
docker search --filter is-official=true nginx
# 搜索星数超过100的镜像
docker search --filter stars=100 nginx
# 搜索自动化构建的镜像
docker search --filter is-automated=true nginx
2.1.2 拉取镜像
# 拉取最新版本
docker pull nginx
# 拉取指定版本
docker pull nginx:1.21
# 拉取所有版本
docker pull -a nginx
# 从私有仓库拉取
docker pull registry.example.com/private/nginx:latest
2.2 镜像查看与管理
2.2.1 查看本地镜像
# 查看所有镜像
docker images
# 查看镜像详细信息
docker image inspect nginx:latest
# 查看镜像历史
docker history nginx:latest
# 查看镜像摘要
docker image inspect --format='{{index .RepoDigests 0}}' nginx:latest
2.2.2 镜像标签管理
# 为镜像添加标签
docker tag nginx:latest my-nginx:v1.0
# 查看镜像所有标签
docker image ls --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
# 删除指定标签
docker rmi my-nginx:v1.0
2.3 镜像构建与清理
2.3.1 构建自定义镜像
# 使用Dockerfile构建镜像
docker build -t my-app:latest .
# 指定Dockerfile路径
docker build -f /path/to/Dockerfile -t my-app:latest .
# 构建时指定构建参数
docker build --build-arg NODE_VERSION=14 -t my-app:latest .
# 不使用缓存构建
docker build --no-cache -t my-app:latest .
2.3.2 镜像导出与导入
# 导出镜像到文件
docker save -o nginx-backup.tar nginx:latest
# 从文件导入镜像
docker load -i nginx-backup.tar
# 导出容器为镜像
docker export my-container > container-backup.tar
# 从容器备份导入镜像
docker import container-backup.tar my-imported-image:latest
2.3.3 镜像清理
# 删除所有未使用的镜像
docker image prune
# 删除所有悬空镜像
docker image prune --filter "dangling=true"
# 删除所有未使用的镜像(强制)
docker image prune -a
# 按条件删除镜像
docker image prune --filter "until=24h"
2.4 镜像安全检查
# 扫描镜像漏洞(需要Docker Desktop或第三方工具)
docker scan nginx:latest
# 查看镜像签名信息
docker trust inspect nginx:latest
# 验证镜像签名
docker trust verify nginx:latest
📦 三、容器管理核心命令
容器是Docker的核心概念,掌握容器管理命令是日常工作的重点。
3.1 容器创建与启动
3.1.1 创建容器
# 基本创建
docker create --name my-nginx nginx:latest
# 创建时指定端口映射
docker create --name my-nginx -p 8080:80 nginx:latest
# 创建时指定数据卷
docker create --name my-nginx -v /host/path:/container/path nginx:latest
# 创建时指定环境变量
docker create --name my-nginx -e ENV=production nginx:latest
# 创建时指定网络
docker create --name my-nginx --network my-network nginx:latest
3.1.2 启动容器
# 启动已创建的容器
docker start my-nginx
# 启动容器并附加到终端
docker start -i my-nginx
# 启动所有已停止的容器
docker start $(docker ps -aq)
3.1.3 运行容器(创建+启动)
# 后台运行容器
docker run -d --name my-nginx nginx:latest
# 前台运行容器
docker run -it --name my-nginx nginx:latest /bin/bash
# 运行容器并自动删除
docker run --rm --name my-nginx nginx:latest
# 运行容器并限制资源
docker run --memory="512m" --cpus="1.0" --name my-nginx nginx:latest
3.2 容器状态管理
3.2.1 查看容器状态
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 查看最近创建的容器
docker ps -l
# 查看容器详细信息
docker inspect my-nginx
# 查看容器资源使用情况
docker stats my-nginx
# 查看所有容器资源使用情况
docker stats --no-stream
3.2.2 容器生命周期控制
# 停止容器
docker stop my-nginx
# 强制停止容器
docker kill my-nginx
# 暂停容器
docker pause my-nginx
# 恢复暂停的容器
docker unpause my-nginx
# 重启容器
docker restart my-nginx
# 删除容器
docker rm my-nginx
# 强制删除运行中的容器
docker rm -f my-nginx
# 删除所有已停止的容器
docker container prune
3.3 容器交互操作
3.3.1 进入容器
# 使用exec进入运行中的容器
docker exec -it my-nginx /bin/bash
# 使用attach附加到容器
docker attach my-nginx
# 在容器中执行单个命令
docker exec my-nginx nginx -v
# 以特定用户身份执行命令
docker exec -u root my-nginx whoami
3.3.2 文件操作
# 复制文件到容器
docker cp ./local-file.txt my-nginx:/container/path/
# 从容器复制文件
docker cp my-nginx:/container/path/file.txt ./
# 在容器中创建文件
docker exec my-nginx touch /tmp/test.txt
# 在容器中编辑文件
docker exec -it my-nginx vi /etc/nginx/nginx.conf
3.4 容器日志管理
3.4.1 查看日志
# 查看容器日志
docker logs my-nginx
# 实时查看日志
docker logs -f my-nginx
# 查看最近100行日志
docker logs --tail 100 my-nginx
# 查看特定时间段的日志
docker logs --since 1h my-nginx
# 查看带时间戳的日志
docker logs -t my-nginx
3.4.2 日志管理
# 清空容器日志
truncate -s 0 /var/lib/docker/containers/*/*-json.log
# 配置日志驱动(运行时)
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 my-nginx
# 查看日志配置
docker inspect my-nginx --format='{{.HostConfig.LogConfig}}'
📁 四、数据卷与网络管理
数据卷和网络是容器持久化存储和通信的关键组件。
4.1 数据卷管理
4.1.1 数据卷基本操作
# 创建数据卷
docker volume create my-volume
# 查看所有数据卷
docker volume ls
# 查看数据卷详细信息
docker volume inspect my-volume
# 删除数据卷
docker volume rm my-volume
# 删除所有未使用的数据卷
docker volume prune
4.1.2 数据卷挂载
# 使用命名数据卷
docker run -d --name my-nginx -v my-volume:/usr/share/nginx/html nginx:latest
# 使用主机目录挂载
docker run -d --name my-nginx -v /host/path:/container/path nginx:latest
# 使用只读挂载
docker run -d --name my-nginx -v /host/path:/container/path:ro nginx:latest
# 使用绑定挂载
docker run -d --name my-nginx --mount type=bind,source=/host/path,target=/container/path nginx:latest
4.1.3 数据卷备份与恢复
# 备份数据卷
docker run --rm -v my-volume:/volume -v $(pwd):/backup alpine tar cvf /backup/my-volume-backup.tar /volume
# 恢复数据卷
docker run --rm -v my-volume:/volume -v $(pwd):/backup alpine tar xvf /backup/my-volume-backup.tar -C /volume --strip 1
# 复制数据卷
docker run --rm -v source-volume:/from -v target-volume:/to alpine cp -a /from/. /to/
4.2 网络管理
4.2.1 网络基本操作
# 查看所有网络
docker network ls
# 创建桥接网络
docker network create my-network
# 创建自定义桥接网络(指定子网)
docker network create --subnet=192.168.1.0/24 my-network
# 查看网络详细信息
docker network inspect my-network
# 删除网络
docker network rm my-network
# 删除所有未使用的网络
docker network prune
4.2.2 网络模式配置
Docker支持多种网络模式,每种模式适用于不同的场景:
# Bridge模式(默认)
docker run -d --name my-nginx --network bridge nginx:latest
# Host模式(共享主机网络)
docker run -d --name my-nginx --network host nginx:latest
# None模式(无网络)
docker run -d --name my-nginx --network none nginx:latest
# Container模式(共享容器网络)
docker run -d --name my-nginx2 --network container:my-nginx nginx:latest
# 自定义网络
docker run -d --name my-nginx --network my-network nginx:latest
4.2.3 网络连接管理
# 将容器连接到网络
docker network connect my-network my-nginx
# 断开容器与网络的连接
docker network disconnect my-network my-nginx
# 连接时指定别名
docker network connect --alias nginx my-network my-nginx
# 连接时指定IP地址
docker network connect --ip 192.168.1.100 my-network my-nginx
4.2.4 端口映射
# 映射单个端口
docker run -d --name my-nginx -p 8080:80 nginx:latest
# 映射多个端口
docker run -d --name my-nginx -p 8080:80 -p 8443:443 nginx:latest
# 映射到随机端口
docker run -d --name my-nginx -p 80 nginx:latest
# 映射到特定IP地址
docker run -d --name my-nginx -p 192.168.1.100:8080:80 nginx:latest
# 映射UDP端口
docker run -d --name my-nginx -p 53:53/udp dns-server:latest
4.3 容器间通信
4.3.1 DNS解析
# 在自定义网络中,容器可以通过容器名互相访问
docker run -d --name web-app --network my-network nginx:latest
docker run -d --name db-server --network my-network mysql:latest
# 在web-app容器中可以通过容器名访问数据库
docker exec web-app ping db-server
4.3.2 网络安全配置
# 创建网络时启用内部模式(隔离外部访问)
docker network create --internal my-internal-network
# 配置网络别名
docker network connect --alias web --alias app my-network my-container
# 网络隔离配置
docker network create --subnet=192.168.1.0/24 --gateway=192.168.1.1 my-isolated-network
⚡ 五、实用命令技巧
掌握一些实用的命令技巧可以大大提高工作效率。
5.1 批量操作命令
5.1.1 批量容器操作
# 停止所有运行中的容器
docker stop $(docker ps -q)
# 删除所有已停止的容器
docker rm $(docker ps -aq)
# 删除所有容器(包括运行中的)
docker rm -f $(docker ps -aq)
# 启动所有已停止的容器
docker start $(docker ps -q -f "status=exited")
# 重启所有容器
docker restart $(docker ps -q)
5.1.2 批量镜像操作
# 删除所有悬空镜像
docker rmi $(docker images -q -f "dangling=true")
# 删除所有镜像
docker rmi $(docker images -q)
# 删除指定名称的所有镜像
docker rmi $(docker images | grep "nginx" | awk '{print $3}')
# 清理所有未使用的资源
docker system prune -a
5.2 资源限制设置
5.2.1 内存限制
# 限制容器内存使用
docker run -d --memory="512m" --name my-nginx nginx:latest
# 限制内存并设置交换内存
docker run -d --memory="1g" --memory-swap="2g" --name my-nginx nginx:latest
# 限制内存使用率
docker run -d --memory-reservation="256m" --name my-nginx nginx:latest
5.2.2 CPU限制
# 限制CPU使用核心数
docker run -d --cpus="1.5" --name my-nginx nginx:latest
# 限制CPU使用权重
docker run -d --cpu-shares=512 --name my-nginx nginx:latest
# 绑定容器到特定CPU核心
docker run -d --cpuset-cpus="0,1" --name my-nginx nginx:latest
5.2.3 磁盘I/O限制
# 限制磁盘读取速度
docker run -d --device-read-bps=/dev/sda:1mb --name my-nginx nginx:latest
# 限制磁盘写入速度
docker run -d --device-write-bps=/dev/sda:1mb --name my-nginx nginx:latest
# 限制磁盘I/O操作次数
docker run -d --device-read-iops=/dev/sda:1000 --name my-nginx nginx:latest
5.3 容器监控命令
5.3.1 实时监控
# 实时监控容器资源使用
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"
# 监控特定容器
docker stats my-nginx --no-stream
# 自定义监控格式
docker stats --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
5.3.2 健康检查
# 运行容器时设置健康检查
docker run -d --name my-nginx \
--health-cmd="curl -f http://localhost/ || exit 1" \
--health-interval=30s \
--health-timeout=10s \
--health-retries=3 \
nginx:latest
# 查看容器健康状态
docker inspect my-nginx --format='{{.State.Health.Status}}'
# 查看健康检查详细信息
docker inspect my-nginx --format='{{json .State.Health}}'
5.4 实用脚本示例
5.4.1 容器备份脚本
#!/bin/bash
# backup_containers.sh
# 创建备份目录
BACKUP_DIR="/backup/containers/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# 备份所有容器
for container in $(docker ps -aq); do
container_name=$(docker inspect --format='{{.Name}}' $container | sed 's/\///')
echo "Backing up container: $container_name"
# 导出容器
docker export $container > $BACKUP_DIR/${container_name}.tar
# 备份容器配置
docker inspect $container > $BACKUP_DIR/${container_name}.json
# 备份数据卷
docker run --rm -v /var/lib/docker/volumes:/volumes alpine tar czf $BACKUP_DIR/${container_name}_volumes.tar.gz -C /volumes .
done
echo "Backup completed: $BACKUP_DIR"
5.4.2 容器清理脚本
#!/bin/bash
# cleanup_docker.sh
echo "Cleaning up Docker resources..."
# 停止所有容器
echo "Stopping all containers..."
docker stop $(docker ps -q) 2>/dev/null
# 删除已停止的容器
echo "Removing stopped containers..."
docker container prune -f
# 删除未使用的镜像
echo "Removing unused images..."
docker image prune -f
# 删除未使用的网络
echo "Removing unused networks..."
docker network prune -f
# 删除未使用的卷
echo "Removing unused volumes..."
docker volume prune -f
# 清理构建缓存
echo "Cleaning build cache..."
docker builder prune -f
echo "Cleanup completed!"
5.4.3 容器监控脚本
#!/bin/bash
# monitor_containers.sh
while true; do
clear
echo "=== Docker Container Monitor ==="
echo "Time: $(date)"
echo ""
# 显示容器状态
echo "Container Status:"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo ""
echo "Resource Usage:"
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
echo ""
echo "Health Status:"
for container in $(docker ps -q); do
name=$(docker inspect --format='{{.Name}}' $container | sed 's/\///')
health=$(docker inspect --format='{{.State.Health.Status}}' $container 2>/dev/null || echo "no-health-check")
echo "$name: $health"
done
sleep 5
done
📋 六、命令速查表
6.1 镜像管理命令速查
| 命令 | 功能 | 示例 |
|---|---|---|
docker search | 搜索镜像 | docker search nginx |
docker pull | 拉取镜像 | docker pull nginx:latest |
docker images | 查看本地镜像 | docker images |
docker rmi | 删除镜像 | docker rmi nginx:latest |
docker build | 构建镜像 | docker build -t my-app . |
docker save | 导出镜像 | docker save -o app.tar my-app |
docker load | 导入镜像 | docker load -i app.tar |
6.2 容器管理命令速查
| 命令 | 功能 | 示例 |
|---|---|---|
docker run | 运行容器 | docker run -d nginx |
docker ps | 查看容器 | docker ps -a |
docker stop | 停止容器 | docker stop my-container |
docker start | 启动容器 | docker start my-container |
docker restart | 重启容器 | docker restart my-container |
docker rm | 删除容器 | docker rm my-container |
docker exec | 执行命令 | docker exec -it my-container bash |
docker logs | 查看日志 | docker logs -f my-container |
6.3 数据卷与网络命令速查
| 命令 | 功能 | 示例 |
|---|---|---|
docker volume create | 创建数据卷 | docker volume create my-vol |
docker volume ls | 查看数据卷 | docker volume ls |
docker network create | 创建网络 | docker network create my-net |
docker network ls | 查看网络 | docker network ls |
docker network connect | 连接网络 | docker network connect my-net my-container |
docker network disconnect | 断开网络 | docker network disconnect my-net my-container |
更多推荐



所有评论(0)