Docker 全套核心命令详解
核心概念 Docker 全套命令按运维生产场景分层整理,涵盖镜像、容器、网络、存储、信息查询等核心操作。
1. 前置基础概念
- 三大核心对象:镜像(image)、容器(container)、仓库(registry)
- 服务端:
dockerd后台守护进程;客户端:docker命令行,通过socket通信 - 存储驱动:overlay2(默认),写时复制CoW机制
- 通用全局参数
# 指定远程docker daemon
-H tcp://192.168.122.10:2375
# 输出json格式
--format json
# 后台静默
-q 只输出ID
一、Docker 服务与信息类命令
2. 查看docker版本/环境信息
# 客户端+服务端完整版本
docker version
# 详细系统、存储、驱动、网卡、存储路径信息
docker info
# 查看docker daemon配置文件路径
cat /etc/docker/daemon.json
3. 守护进程启停(Linux systemd)
systemctl start docker
systemctl stop docker
systemctl restart docker
# 开机自启
systemctl enable docker
# 查看日志
journalctl -u docker -f
二、镜像 Image 核心命令(拉取、构建、推送、清理)
4. 拉取镜像 pull
# 拉取指定版本,不加tag默认latest
docker pull nginx:1.25-alpine
# 私有仓库镜像
docker pull harbor.example.com/library/mysql:8.0
# 不使用缓存拉取
docker pull --no-cache xxx
5. 本地镜像列表 ls / images
# 列出本地所有镜像
docker images
# 只显示镜像ID(批量删除用)
docker images -q
# 过滤镜像(名称包含nginx)
docker images --filter=reference="*nginx*"
# 显示完整长ID
docker images --no-trunc
# 格式化输出只打印镜像名和大小
docker images --format "{{.Repository}}:{{.Tag}} {{.Size}}"
6. 构建镜像 build(Dockerfile)
# 当前目录Dockerfile构建,指定镜像名tag
docker build -t web:v1.0 .
# 指定Dockerfile文件路径
docker build -f ./docker/Dockerfile.prod -t web-prod:v1.0 .
# 构建时传入环境变量
docker build --build-arg VERSION=1.0 -t web .
# 无缓存构建(重新下载依赖)
docker build --no-cache -t web .
# 构建完成后自动删除中间临时容器
--rm
# 禁止使用缓存
--no-cache
7. 镜像打标签 tag(推送私有仓库必备)
# 本地镜像重命名/新增标签
docker tag web:v1.0 harbor.example.com/library/web:v1.0
8. 推送镜像 push
# 先登录私有仓库
docker login harbor.example.com -u admin -p xxx
# 推送镜像到仓库
docker push harbor.example.com/library/web:v1.0
# 登出仓库
docker logout
9. 镜像删除 rmi
# 删除指定镜像(镜像名:tag)
docker rmi nginx:1.25-alpine
# 根据镜像ID删除
docker rmi 24f603581402
# 强制删除被容器引用的镜像
docker rmi -f xxx
# 批量删除所有未使用悬空镜像 <none>:<none>
docker image prune
# 清理所有无用镜像(无容器使用)
docker image prune -a
# 批量删除全部镜像(谨慎)
docker rmi $(docker images -q)
10. 镜像导出导入(离线环境)
# 导出镜像为tar包
docker save -o web-v1.tar web:v1.0
# 导入本地tar镜像
docker load -i web-v1.tar
11. 查看镜像分层历史 history
# 查看镜像每一层构建记录,排查镜像过大原因
docker history web:v1.0
# 显示完整命令不截断
docker history --no-trunc web:v1.0
三、容器 Container 核心命令(创建、启停、进入、日志、资源)
12. 创建并启动容器 run(最复杂高频)
基础语法:docker run [参数] 镜像 [启动命令] [参数]
12.1. 常用关键参数
-d 后台守护运行
-it 交互式终端(前台进入容器)
--name 指定容器名称,方便管理
-p 宿主机端口:容器端口 端口映射
--network 指定网络(bridge/host/自定义网络)
-v 宿主机目录:容器目录 数据卷挂载
--restart 重启策略:always/unless-stopped/on-failure
--env / -e 设置环境变量
--env-file 从文件加载环境变量
--rm 容器停止自动删除(测试临时容器)
--memory 内存限制 --memory 4g
--cpus CPU核数限制 --cpus 2
--privileged 特权容器(几乎拥有宿主机权限,生产慎用)
--user 指定容器运行用户
--add-host 自定义hosts映射
12.2. 示例
# 后台运行nginx,80端口映射,开机自启
docker run -d --name nginx-web -p 8080:80 --restart always nginx:alpine
# 交互式进入容器(测试调试),退出自动销毁
docker run -it --rm centos:7 /bin/bash
# 挂载数据目录+环境变量+资源限制
docker run -d --name mysql \
-p 3306:3306 \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--memory 8g --cpus 4 \
mysql:8.0
13. 查看容器列表 ps
# 仅运行中容器
docker ps
# 全部容器(含停止的)
docker ps -a
# 只输出容器ID
docker ps -q
# 过滤容器(按名称/镜像)
docker ps --filter "name=mysql"
# 宽格式显示IP、挂载、端口
docker ps --no-trunc
14. 启停/重启容器 start/stop/restart/kill
# 启动停止的容器
docker start mysql
# 优雅停止(10秒超时后强制杀进程)
docker stop mysql
# 立即强制杀死容器(不优雅,丢失缓存数据)
docker kill mysql
# 重启容器
docker restart mysql
# 批量停止所有容器
docker stop $(docker ps -q)
15. 删除容器 rm
# 删除停止的容器
docker rm mysql
# 强制删除运行中容器
docker rm -f mysql
# 删除容器同时清理挂载匿名卷
docker rm -v mysql
# 批量清理所有停止容器
docker container prune
# 删除全部容器(谨慎)
docker rm -f $(docker ps -aq)
16. 进入运行中容器 exec(生产标准)
# 交互式终端进入
docker exec -it mysql /bin/bash
# alpine轻量镜像无bash,用sh
docker exec -it nginx sh
# 一次性执行命令不进入交互
docker exec mysql mysql -uroot -p123456
# 指定容器内用户执行
docker exec -u www-data -it web sh
区分:docker attach 不推荐,退出会直接停止容器;exec独立会话
17. 容器日志 logs(排错核心)
# 实时持续输出日志
docker logs -f nginx
# 只看最后200行
docker logs --tail 200 nginx
# 带时间戳
docker logs -t nginx
# 查看近1小时日志
docker logs --since 1h nginx
# 查看容器崩溃前历史日志(容器已退出)
docker logs mysql
18. 宿主机 <-> 容器 文件拷贝 cp
# 容器文件下载到宿主机
docker cp mysql:/var/lib/mysql/xxx.sql /data/backup/
# 本地文件上传容器
docker cp /data/conf/my.cnf mysql:/etc/mysql/
19. 容器资源实时监控 stats
# 实时刷新所有容器CPU/内存/IO/网络
docker stats
# 只监控指定容器
docker stats mysql nginx
# 单次输出不持续刷新
docker stats --no-stream
20. 容器详情 inspect(获取IP、挂载、环境、端口)
# 输出完整json容器元数据
docker inspect mysql
# 格式化精准提取字段(脚本自动化常用)
# 获取容器IP
docker inspect --format '{{.NetworkSettings.IPAddress}}' mysql
# 获取挂载目录
docker inspect --format '{{.Mounts}}' mysql
# 获取环境变量
docker inspect --format '{{.Config.Env}}' mysql
21. 端口映射查看 port
# 查看容器所有端口映射关系
docker port nginx
22. 临时提交容器为镜像 commit(不推荐生产,仅应急)
# 将运行中容器打包成新镜像
docker commit -m "install jdk" mysql mysql-jdk:8
四、数据卷 Volume 持久化命令
23. volume 管理(持久存储,独立生命周期)
# 列出所有数据卷
docker volume ls
# 创建命名卷
docker volume create mysql-data
# 查看卷详情(挂载路径)
docker volume inspect mysql-data
# 删除未使用匿名卷
docker volume prune
# 删除指定卷(无容器挂载才可删)
docker volume rm mysql-data
24. 挂载三种模式区分:
- 命名volume:
-v mysql-data:/var/lib/mysql由docker管理 - 绑定挂载:
-v /data/mysql:/var/lib/mysql直接映射宿主机目录 - 临时空目录:
--tmpfs /tmp内存临时存储,容器销毁丢失
五、网络 Network 命令
Docker四种默认网络:bridge(默认)、host、none、container共享网络
# 查看所有网络
docker network ls
# 查看网络详情、接入容器
docker network inspect bridge
# 创建自定义隔离网络(推荐业务使用,DNS互通)
docker network create web-net
# 将运行容器加入网络
docker network connect web-net mysql
# 断开容器网络
docker network disconnect web-net mysql
# 删除未使用网络
docker network prune
# 删除自定义网络
docker network rm web-net
24.1. 网络模式说明
- bridge:默认桥接,独立IP,端口映射访问
- host:复用宿主机完整网卡,无端口隔离,性能高
- none:禁用所有网络,隔离容器
- container:xxx 共享另一个容器网络栈(sidecar场景)
六、系统全局清理 prune(磁盘爆满必备)
一键清理无用资源,释放磁盘
# 仅清理停止容器、悬空镜像、未使用网络、匿名卷
docker system prune
# 额外清理所有未被任何容器使用的镜像
docker system prune -a
# 同时清理所有未挂载数据卷(谨慎,会删持久数据)
docker system prune -a --volumes
七、Docker Compose 多容器编排(docker-compose v2 整合进docker)
新版本无需单独安装docker-compose,直接 docker compose
# 前台启动
docker compose up
# 后台守护启动
docker compose up -d
# 查看运行容器
docker compose ps
# 实时日志全部服务
docker compose logs -f
# 重启服务
docker compose restart web
# 停止不删除容器
docker compose stop
# 停止并删除容器、网络(保留卷)
docker compose down
# 停止并删除容器+卷(数据清空,谨慎)
docker compose down -v
# 构建镜像
docker compose build
# 进入指定服务容器
docker compose exec web sh
# 扩容副本
docker compose up -d --scale web=3
八、运维高频场景命令汇总
25. 批量清理磁盘
# 清理停止容器
docker container prune
# 清理无用镜像
docker image prune -a
# 清理无用网络
docker network prune
# 一键综合清理
docker system prune -a
26. 离线迁移镜像
docker save -o backup.tar nginx mysql
docker load -i backup.tar
27. 排查容器网络不通
# 进入容器nslookup/curl
docker exec -it web sh
# 查看容器IP
docker inspect --format '{{.NetworkSettings.IPAddress}}' web
# 查看宿主机端口映射
docker port web
28. 限制容器资源
docker run -d --memory 4G --cpus 2 nginx
九、Docker vs containerd 补充说明
k8s 1.24+废弃dockershim,底层使用containerd;
docker只是封装containerd的上层客户端,底层镜像、容器存储逻辑一致;
ctr/nerdctl为containerd原生命令,功能等价docker。
十、面试背诵分类速记
- 镜像:pull images build tag push rmi save load history
- 容器:run ps start stop restart rm exec logs cp stats inspect port
- 存储:volume create ls inspect rm prune
- 网络:network create ls inspect connect disconnect prune
- 系统清理:system prune
- 多服务编排:docker compose up down logs exec scale