Docker命令大全:从入门到精通
·
涵盖Docker核心概念、常用命令及实战技巧,助你成为容器化技术高手!
📖 目录
一、Docker核心概念
1.1 Docker架构
Docker采用客户端-服务器架构:
- Docker客户端:用户通过命令行工具或API与Docker交互
- Docker守护进程:管理容器、镜像、网络等核心对象
- Docker镜像:只读模板,用于创建容器
- Docker容器:镜像的运行实例
- Docker仓库:存放镜像的仓库(Docker Hub、私有仓库)
1.2 Docker三大核心
- 镜像(Image):容器的蓝图,分层存储结构
- 容器(Container):镜像的运行实例
- 仓库(Registry):镜像的集中存储和分发服务
二、镜像管理命令
2.1 镜像搜索与下载
# 搜索Docker Hub上的镜像
docker search nginx
# 拉取镜像(不指定标签默认为latest)
docker pull nginx
docker pull nginx:1.21-alpine
# 从私有仓库拉取镜像
docker pull registry.example.com/myapp:v1.0
2.2 镜像查看与管理
# 列出本地镜像
docker images
docker image ls
# 显示镜像详细信息
docker image inspect nginx:latest
# 查看镜像历史记录
docker history nginx
# 删除镜像
docker rmi nginx:latest
docker image rm nginx
# 强制删除(即使有容器在使用)
docker rmi -f nginx
# 清理悬空镜像(无标签)
docker image prune
docker image prune -a # 删除所有未使用的镜像
# 给镜像打标签
docker tag nginx:latest mynginx:v1.0
2.3 镜像构建
# 构建镜像(当前目录下必须有Dockerfile)
docker build -t myapp:latest .
# 指定Dockerfile路径
docker build -f /path/to/Dockerfile -t myapp:v1 .
# 构建时不使用缓存
docker build --no-cache -t myapp:latest .
# 多阶段构建示例
docker build --target builder -t myapp:builder .
三、容器操作命令
3.1 容器生命周期管理
# 创建并启动容器(最常用)
docker run -d --name mynginx -p 8080:80 nginx:latest
# 常用参数说明:
# -d: 后台运行
# --name: 指定容器名称
# -p: 端口映射(主机端口:容器端口)
# -v: 挂载数据卷
# -e: 设置环境变量
# --network: 指定网络
# 启动已停止的容器
docker start mynginx
# 停止容器
docker stop mynginx
docker stop container_id
# 重启容器
docker restart mynginx
# 暂停容器
docker pause mynginx
# 恢复暂停的容器
docker unpause mynginx
# 删除容器
docker rm mynginx
docker rm -f mynginx # 强制删除运行中的容器
# 删除所有停止的容器
docker container prune
3.2 容器交互与执行
# 进入容器(退出时容器停止)
docker attach container_id
# 在容器内执行命令(推荐方式)
docker exec -it mynginx /bin/bash
docker exec -it mynginx sh
# 执行单条命令
docker exec mynginx ls -la
docker exec -u root mynginx whoami
# 复制文件
docker cp local_file.txt mynginx:/tmp/
docker cp mynginx:/etc/nginx/nginx.conf ./nginx.conf.backup
3.3 容器监控与日志
# 查看运行中的容器
docker ps
docker ps -a # 查看所有容器(包括停止的)
# 查看容器详细信息
docker inspect mynginx
# 查看容器日志
docker logs mynginx
docker logs -f mynginx # 实时跟踪日志
docker logs --tail 100 mynginx # 查看最后100行
docker logs --since 10m mynginx # 查看10分钟内的日志
# 查看容器资源使用情况
docker stats
docker stats --all # 显示所有容器
docker stats --no-stream # 只显示一次
# 查看容器内进程
docker top mynginx
四、网络管理命令
4.1 网络基本操作
# 列出网络
docker network ls
# 创建网络
docker network create mynetwork
docker network create --driver bridge --subnet 172.20.0.0/16 mybridge
# 查看网络详情
docker network inspect mynetwork
# 连接容器到网络
docker network connect mynetwork mynginx
# 从网络断开容器
docker network disconnect mynetwork mynginx
# 删除网络
docker network rm mynetwork
docker network prune # 删除未使用的网络
4.2 网络类型与使用
# 创建不同驱动类型的网络
docker network create --driver bridge bridge_network
docker network create --driver overlay overlay_network
docker network create --driver macvlan macvlan_network
# 运行容器时指定网络
docker run -d --name web --network mynetwork nginx
# 运行容器时指定IP
docker run -d --name app --network mynetwork --ip 172.20.0.10 myapp
五、数据卷管理
5.1 数据卷操作
# 创建数据卷
docker volume create myvolume
# 列出数据卷
docker volume ls
# 查看数据卷详情
docker volume inspect myvolume
# 删除数据卷
docker volume rm myvolume
docker volume prune # 删除未使用的数据卷
# 使用数据卷
docker run -d --name mysql \
-v myvolume:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secret \
mysql:latest
5.2 绑定挂载
# 绑定挂载主机目录
docker run -d --name nginx \
-v /host/path:/container/path \
-v /host/config:/etc/nginx/conf.d \
nginx:latest
# 只读挂载
docker run -d --name nginx \
-v /host/config:/etc/nginx/conf.d:ro \
nginx:latest
六、Docker Compose
6.1 Compose基本命令
# 启动服务
docker-compose up
docker-compose up -d # 后台运行
# 停止服务
docker-compose down
docker-compose down -v # 同时删除数据卷
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs
docker-compose logs -f service_name
# 构建服务镜像
docker-compose build
# 执行命令
docker-compose exec service_name command
# 扩展服务实例
docker-compose up --scale web=3
6.2 Compose文件示例
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- app-network
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: appdb
volumes:
- db-data:/var/lib/mysql
networks:
- app-network
volumes:
db-data:
networks:
app-network:
driver: bridge
七、实用技巧与最佳实践
7.1 批量操作技巧
# 停止所有运行中的容器
docker stop $(docker ps -q)
# 删除所有停止的容器
docker rm $(docker ps -aq)
# 删除所有悬空镜像
docker rmi $(docker images -f "dangling=true" -q)
# 清理所有未使用的资源
docker system prune -a --volumes
# 批量打标签
for image in $(docker images --format "{{.Repository}}:{{.Tag}}"); do
docker tag $image registry.example.com/$image
done
7.2 性能优化命令
# 查看Docker磁盘使用情况
docker system df
# 查看详细磁盘使用情况
docker system df -v
# 导出容器为镜像
docker export container_id > container.tar
# 导入镜像
docker import container.tar myimage:latest
# 保存镜像到文件
docker save -o nginx.tar nginx:latest
# 从文件加载镜像
docker load -i nginx.tar
7.3 安全最佳实践
# 使用非root用户运行容器
docker run -u 1000:1000 myapp
# 限制容器资源
docker run -d \
--name limited \
--memory="512m" \
--cpus="1.5" \
nginx:latest
# 设置容器重启策略
docker run -d \
--name resilient \
--restart=always \
nginx:latest
# 只读根文件系统
docker run -d \
--name secure \
--read-only \
-v /tmp:/tmp \
nginx:latest
八、命令速查表
8.1 常用命令组合
| 场景 | 命令 |
|---|---|
| 开发调试 | docker run -it --rm -v $(pwd):/app -p 3000:3000 node:14 |
| 数据库部署 | docker run -d --name mysql -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:8 |
| Web服务 | docker run -d --name nginx -p 80:80 -v ./nginx.conf:/etc/nginx/nginx.conf nginx |
| 日志分析 | docker logs --tail 50 -f container_name |
| 容器调试 | docker exec -it container_name /bin/sh |
8.2 故障排查命令
# 检查Docker服务状态
systemctl status docker
# 查看Docker版本信息
docker version
docker info
# 查看事件日志
docker events
# 检查容器健康状态
docker inspect --format='{{json .State.Health}}' container_name
# 性能诊断
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
💎 总结
掌握Docker命令是容器化技术的基础。本文涵盖了从基础到进阶的完整命令集,建议:
- 日常使用:熟练掌握镜像、容器、网络的基本操作
- 生产环境:关注资源限制、日志管理、网络配置
- 持续学习:关注Docker新版本特性,实践最佳安全实践
希望这份全面的Docker命令指南能帮助你在开发和运维工作中更加得心应手!
📌 标签:Docker、容器技术、DevOps、云原生、命令大全、运维开发
✨ 小贴士:使用 docker --help 或 docker command --help 查看任何命令的详细帮助信息。随着Docker版本更新,建议定期查看官方文档获取最新特性信息!
更多推荐
所有评论(0)