一、容器核心操作(日常用得最多)
1. docker run:创建并启动容器(核心命令)
语法:docker run [选项] 镜像[:标签] [容器内执行命令]核心选项:
-d:后台守护式运行,终端不阻塞
-it:交互式终端,适合调试容器
--name:指定容器名称,替代随机生成名
-p 宿主机端口:容器端口:端口映射,外部访问容器服务
-v 宿主机路径:容器路径[:权限]:挂载目录 / 数据卷,实现数据持久化
--rm:容器停止后自动删除,适合临时任务
示例:
bash
# 后台启动Nginx,映射80端口到宿主机8080,命名为nginx-web
docker run -d -p 8080:80 --name nginx-web nginx:latest
# 交互式启动Ubuntu,进入bash,退出即删除容器
docker run -it --rm ubuntu:22.04 /bin/bash
# 启动MySQL,挂载数据卷持久化数据,设置root密码
docker run -d -p 3306:3306 --name mysql-db \
-v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0
使用要点:本地无镜像时会自动拉取;默认命令为镜像的CMD,可手动覆盖(如/bin/bash)。
2. docker ps:查看容器状态
语法:docker ps [选项]核心选项:
-a:显示所有容器(含已停止)
-l:显示最近创建的容器
-q:仅输出容器 ID,用于批量操作
--filter "status=exited":筛选已停止的容器
示例:
bash
# 查看所有运行中的容器
docker ps
# 查看所有容器(含停止),快速定位已退出容器
docker ps -a
# 仅获取所有容器ID,用于批量删除/停止
docker ps -aq
使用要点:STATUS字段关键:Up xxx(运行中)、Exited (0)(正常退出)、Exited (1)(异常退出)。
3. docker exec:进入运行中的容器(调试必备)
语法:docker exec [选项] 容器名/ID 执行命令核心选项:
-it:交互式进入终端,必选
示例:
bash
# 进入nginx-web容器,操作bash终端
docker exec -it nginx-web /bin/bash
# 容器内执行单条命令,无需进入终端(查看Nginx配置)
docker exec nginx-web cat /etc/nginx/nginx.conf
使用要点:退出终端不影响容器运行;区别于docker attach,后者退出会终止容器。
4. 容器启停与删除
(1)docker stop/kill:停止容器
语法:docker stop/kill 容器名/ID区别:stop优雅停止(发SIGTERM,允许收尾),kill强制停止(发SIGKILL,立即终止)
示例:
bash
# 优雅停止nginx-web
docker stop nginx-web
# 强制停止所有运行中的容器
docker kill $(docker ps -q)
(2)docker rm:删除容器
语法:docker rm [选项] 容器名/ID核心选项:
-f:强制删除运行中的容器
-v:删除容器关联的匿名数据卷
示例:
bash
# 删除已停止的nginx-web容器
docker rm nginx-web
# 强制删除运行中的容器
docker rm -f nginx-web
# 批量删除所有已停止的容器
docker rm $(docker ps -aqf "status=exited")
5. docker logs:查看容器日志(排障核心)
语法:docker logs [选项] 容器名/ID核心选项:
• -f:实时跟踪日志,类似tail -f
• -t:显示日志时间戳
• --tail N:仅显示最后 N 行日志
示例:
bash
# 查看nginx-web完整日志
docker logs nginx-web
# 实时跟踪日志并显示时间戳,排查运行问题
docker logs -ft nginx-web
# 仅查看最后100行日志
docker logs --tail 100 nginx-web
二、镜像全生命周期管理
1. docker pull:拉取镜像
语法:docker pull 镜像[:标签]
示例:
bash
# 拉取官方最新版Nginx
docker pull nginx
# 拉取指定版本Python(轻量版,体积更小)
docker pull python:3.10-slim
2. docker images:查看本地镜像
语法:docker images [选项] [镜像名]核心选项:
-q:仅输出镜像 ID
--filter "dangling=true":筛选悬空镜像(无标签、无容器引用)
示例:
bash
# 查看所有本地镜像
docker images
# 查看所有悬空镜像(可清理释放空间)
docker images -f dangling=true
# 仅获取镜像ID,用于批量删除
docker images -q
3. docker rmi:删除本地镜像
语法:docker rmi [选项] 镜像名/ID核心选项:
-f:强制删除,即使镜像被容器引用
示例:
bash
# 删除指定版本的Ubuntu镜像
docker rmi ubuntu:22.04
# 批量删除所有悬空镜像
docker rmi $(docker images -qf dangling=true)
# 强制删除被容器引用的镜像(先删容器再删镜像更安全)
docker rmi -f nginx:latest
4. docker build:基于 Dockerfile 构建自定义镜像
语法:docker build [选项] 构建上下文路径核心选项:
-t 镜像名:标签:指定镜像名称和版本,必选
-f:指定非默认名称的 Dockerfile(如-f Dockerfile.prod)
示例:
bash
# 基于当前目录Dockerfile,构建名为my-app:v1的镜像
docker build -t my-app:v1 .
# 使用指定路径的Dockerfile构建
docker build -t my-app:v2 -f ./docker/prod.Dockerfile .
使用要点:上下文路径(.)是 Docker 可访问的文件目录,无关文件可通过.dockerignore排除,提升构建速度。
5. 镜像标签与推送
(1)docker tag:为镜像打标签
语法:docker tag 源镜像 目标镜像
示例:
bash
# 给本地镜像打标签,适配私有仓库推送
docker tag my-app:v1 harbor.example.com/my-app:v1
(2)docker push:推送镜像到仓库
语法:docker push 镜像名:标签
示例:
bash
# 推送镜像到私有仓库(需先登录)
docker push harbor.example.com/my-app:v1
(3)docker volume ls/rm/prune:管理数据卷
示例:
bash
# 查看所有数据卷
docker volume ls
# 删除未被使用的数据卷
docker volume rm mysql-data
# 批量清理所有无用数据卷(强制,无需确认)
docker volume prune -f
2. 挂载数据卷(核心用法)
两种挂载方式:
1.匿名 / 具名卷挂载:-v 卷名:容器路径,推荐用于持久化数据(如 MySQL、Redis)
2.宿主机目录挂载:-v 宿主机绝对路径:容器路径,推荐用于代码、配置文件映射
示例:
bash
# 具名卷挂载MySQL数据卷,实现数据持久化
docker run -d -v mysql-data:/var/lib/mysql --name mysql-db mysql:8.0
# 宿主机目录挂载,本地代码实时同步到容器
docker run -d -p 8080:80 -v ./app:/usr/share/nginx/html --name nginx-web nginx
四、网络管理(容器间通信)
1. docker network create:创建自定义网络
语法:docker network create [选项] 网络名核心选项:--driver bridge(默认桥接网络,容器间可通过名称互通)
示例:
bash
# 创建名为app-net的桥接网络,用于业务容器互联
docker network create --driver bridge app-net
2. 网络关联与查看
(1)docker network ls/connect:管理网络
示例:
bash
# 查看所有Docker网络
docker network ls
# 将容器加入自定义网络(实现容器间通信)
docker network connect app-net nginx-web
docker network connect app-net mysql-db
(2)docker network rm:删除网络
示例:
bash
# 删除未被使用的自定义网络
docker network rm app-net
使用要点:同一自定义网络内的容器,无需端口映射即可通过容器名直接访问。
五、系统运维与实用命令
1. 系统信息查看
示例:
bash
# 查看Docker版本(客户端+服务端)
docker version
# 查看Docker系统整体信息(存储驱动、镜像加速器、容器数等)
docker info
# 实时查看容器资源占用(CPU、内存、网络IO)
docker stats
2. 资源清理(释放磁盘空间)
语法:docker system prune [选项]核心选项:
-a:清理所有无用镜像(含无标签镜像)
--volumes:同时清理无用数据卷
示例:
bash
# 一键清理停止容器、无用网络、悬空镜像(安全常用)
docker system prune -f
# 深度清理,含无用镜像和数据卷(谨慎使用,避免误删数据)
docker system prune -af --volumes
3. 其他实用命令
(1)docker cp:容器与宿主机互传文件
示例:
bash
# 从容器复制日志到宿主机
docker cp nginx-web:/var/log/nginx/access.log ./
# 从宿主机复制配置文件到容器
docker cp ./nginx.conf nginx-web:/etc/nginx/conf.d/
(2)docker inspect:查看详细元数据
示例:
bash
# 查看容器详细信息(IP、挂载、端口、环境变量等)
docker inspect nginx-web
# 查看镜像构建历史与层信息
docker inspect nginx:latest
核心总结
容器操作:run(核心参数-d/-p/-v/--name)、exec、logs是日常高频,优先掌握;
镜像管理:pull/build/push覆盖全生命周期,prune定期清理冗余镜像节省空间;
数据持久化:优先用具名数据卷,避免宿主机目录挂载的权限与跨平台问题;
容器互联:自定义网络替代默认桥接网络,提升容器间通信安全性与便捷性。
所有命令均可通过docker 命令 --help查看完整参数,根据场景灵活调整即可。