Docker常用命令学习笔记
Docker 常用指令学习笔记:完整整合版
内容覆盖 Docker 日常开发、部署和运维中最常用的指令合集,涵盖镜像、容器、数据卷、网络、离线传输、Compose 编排、系统清理等完整工作流。
目录
- 一、镜像管理命令
- 二、容器管理命令
- 三、数据卷管理命令
- 四、网络管理命令
- 五、Docker Compose 命令
- 六、系统与清理命令
- 七、批量操作与实用技巧
- 八、完整速查总表
- 九、最佳实践建议
- 十、更新单个容器的完整流程
一、镜像管理命令
1. 镜像搜索与获取
# 搜索镜像
docker search <镜像名>
# 拉取镜像(从远程仓库)
docker pull [镜像名[:标签]]
# 示例
docker pull nginx:1.21.0
docker pull registry.cn-hangzhou.aliyuncs.com/myapp/web:v1.0
2. 镜像构建
# 通过 Dockerfile 构建镜像
docker build [选项] <上下文路径>
# 常用选项:
# -t : 指定镜像名称和标签
# -f : 指定 Dockerfile 文件名
# --no-cache : 不使用缓存重新构建
# 示例
docker build -t myapp:v1.0 .
docker build -f Dockerfile.prod -t myapp:prod .
docker build --no-cache -t myapp:v2.0 .
3. 查看本地镜像
docker images
# 或
docker image ls
# 常用选项:
# -q : 只显示镜像 ID
docker images -q
4. 删除镜像
docker rmi <镜像ID或名称:标签>
# 常用选项:
# -f : 强制删除
docker rmi -f nginx:1.21.0
# 清理所有未使用的镜像
docker image prune -a
5. 镜像导出与导入(离线传输)
导出镜像到文件
# 导出单个镜像(推荐)
docker save -o <文件名>.tar <镜像名:标签>
# 示例
docker save -o nginx-1.21.0.tar nginx:1.21.0
# 导出多个镜像到同一个文件
docker save -o app-bundle.tar nginx:1.21.0 mysql:8.0 redis:6.0
# 导出并直接压缩(大幅减少体积)
docker save myapp:v2.0 | gzip > myapp-v2.0.tar.gz
从文件导入镜像
# 加载镜像(推荐)
docker load -i <文件名>.tar
# 示例
docker load -i nginx-1.21.0.tar
# 从压缩文件导入
gunzip -c myapp-v2.0.tar.gz | docker load
# 验证导入
docker images | grep myapp
完整离线传输流程示例
# 步骤 1:开发服务器导出并压缩
docker save -o myapp-v2.0.tar myapp:v2.0
gzip myapp-v2.0.tar
# 步骤 2:传输到生产服务器
scp myapp-v2.0.tar.gz user@prod-server:/tmp/
# 步骤 3:生产服务器解压并加载
ssh user@prod-server "gunzip -c /tmp/myapp-v2.0.tar.gz | docker load"
# 步骤 4:运行容器
docker run -d --name myapp-prod -p 8080:80 myapp:v2.0
二、容器管理命令
6. 创建与运行容器
docker run [选项] <镜像> [命令]
# 核心参数:
# -d : 后台运行(detached)
# -p : 端口映射(主机端口:容器端口)
# -v : 卷挂载(主机目录:容器目录)
# -e : 设置环境变量
# --name : 指定容器名称
# --rm : 退出时自动删除容器
# -it : 交互式终端(-i 交互 + -t 伪终端)
# 示例
docker run -d -p 8080:80 --name web nginx
docker run -it --name myubuntu ubuntu bash
docker run --rm -it ubuntu ls -l
# 带环境变量和数据卷的复杂示例
docker run -d \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/mysql:/var/lib/mysql \
-p 3306:3306 \
--name mysql-server \
mysql:8.0
7. 查看容器
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止)
docker ps -a
# 只显示容器 ID
docker ps -q
docker ps -aq # 所有容器的 ID
8. 启停容器
docker start <容器名/ID>
docker stop <容器名/ID> # 优雅停止(先 SIGTERM,后 SIGKILL)
docker restart <容器名/ID>
docker pause <容器名/ID> # 暂停
docker unpause <容器名/ID> # 恢复
9. 进入运行中容器
# 执行交互式命令(推荐)
docker exec -it <容器> bash
docker exec -it <容器> sh # 如果 bash 不可用
# 示例
docker exec -it web bash
docker exec mysql-server mysql -uroot -p
10. 查看容器日志
docker logs [选项] <容器>
# 常用选项:
# -f : 实时跟踪
# --tail : 显示最后 N 行
# -t : 显示时间戳
# 示例
docker logs web
docker logs -f --tail 100 web # ctrl + z 退出日志跟踪
docker logs -t web
11. 删除容器
docker rm <容器名/ID>
# 常用选项:
# -f : 强制删除运行中的容器
# -v : 同时删除关联的匿名卷
# 示例
docker rm web
docker rm -f web
# 清理所有已停止的容器
docker container prune
# 删除所有容器(包含运行中的)
docker rm -f $(docker ps -aq)
12. 容器与主机间复制文件
# 从容器复制到主机
docker cp <容器>:/容器路径 /主机路径
# 从主机复制到容器
docker cp /主机路径 <容器>:/容器路径
# 示例
docker cp web:/etc/nginx/nginx.conf ./nginx.conf
docker cp ./app.js web:/usr/share/nginx/html/
三、数据卷管理命令
13. 卷操作
docker volume [子命令]
# 创建卷
docker volume create mysql-data
# 列出所有卷
docker volume ls
# 查看卷详情
docker volume inspect mysql-data
# 删除未使用的卷
docker volume prune
# 删除指定卷
docker volume rm mysql-data
四、网络管理命令
14. 网络操作
docker network [子命令]
# 创建自定义网络
docker network create my-network
# 列出网络
docker network ls
# 查看网络详情
docker network inspect my-network
# 运行容器时指定网络
docker run -d --name app1 --network my-network nginx
# 将运行中容器连接到网络
docker network connect my-network app2
# 断开网络
docker network disconnect my-network app2
# 删除网络
docker network rm my-network
五、Docker Compose 命令
15. 多容器编排
docker-compose [选项] [命令]
# 新版用 docker compose
# 核心命令:
# up : 启动所有服务
# down : 停止并删除所有服务
# ps : 查看服务状态
# logs : 查看服务日志
# exec : 在服务中执行命令
# 示例(必须在 docker-compose.yml 所在目录)
docker-compose up -d # 后台启动
docker-compose up -d --build # 记住口诀:改代码了才 --build,没改代码直接用 up -d
docker-compose down # 停止并删除
docker-compose down -v
docker-compose ps # 查看状态
docker-compose logs -f web # 实时查看 web 服务日志
docker-compose exec db bash # 进入 db 服务容器
docker-compose restart web # 重启 web 服务
docker-compose pull # 拉取所有服务镜像
down 与 down -v 的区别:
| 命令 | 删除内容 | 数据卷 | 适用场景 |
|---|---|---|---|
docker-compose down |
容器 + 网络 | 保留 | 日常重启服务,保留数据 |
docker-compose down -v |
容器 + 网络 + 卷 | 删除 | 彻底清理环境,重置数据 |
六、系统与清理命令
16. 系统管理
docker system [子命令]
# 查看磁盘使用情况
docker system df
# 清理未使用的对象(容器、网络、悬空镜像)
docker system prune
# 彻底清理(包括所有未使用的镜像和构建缓存)
docker system prune -a
# 查看 Docker 信息
docker info
17. 查看详细信息
# 查看容器/镜像/网络/卷的详细 JSON 信息
docker inspect <对象名/ID>
# 格式化输出(例如只显示容器 IP)
docker inspect -f '{{.NetworkSettings.IPAddress}}' web
docker inspect -f '{{.Mounts}}' mysql-server
七、批量操作与实用技巧
18. 批量操作命令
# 停止所有运行中的容器
docker stop $(docker ps -q)
# 删除所有容器
docker rm -f $(docker ps -aq)
# 删除所有镜像
docker rmi -f $(docker images -q)
# 删除所有悬空镜像(dangling images)
docker image prune
# 删除所有未使用的数据卷
docker volume prune
# 一键清理所有未使用资源(镜像、容器、卷、网络)
docker system prune -a --volumes
19. 资源监控
# 实时查看容器资源占用
docker stats
# 查看容器进程
docker top <容器>
# 查看容器内文件系统变化
docker diff <容器>
八、完整速查总表
| 功能分类 | 命令 | 常用示例 |
|---|---|---|
| 镜像操作 | docker pull <镜像> |
docker pull nginx:1.21.0 |
docker build -t <名称> . |
docker build -t myapp:v1.0 . |
|
docker images |
docker images -q |
|
docker rmi <镜像> |
docker rmi -f nginx:1.21.0 |
|
| 镜像导出/导入 | docker save -o file.tar <镜像> |
docker save -o app.tar myapp:v1.0 |
docker load -i file.tar |
docker load -i app.tar |
|
docker save | gzip > file.tar.gz |
docker save myapp | gzip > app.tar.gz |
|
gunzip -c file.tar.gz | docker load |
gunzip -c app.tar.gz | docker load |
|
| 容器操作 | docker run [选项] <镜像> |
docker run -d -p 80:80 --name web nginx |
docker ps |
docker ps -a |
|
docker start/stop <容器> |
docker stop web |
|
docker exec -it <容器> bash |
docker exec -it web bash |
|
docker logs <容器> |
docker logs -f --tail 100 web |
|
docker rm <容器> |
docker rm -f web |
|
| 文件复制 | docker cp <源> <目标> |
docker cp web:/app/logs ./ |
| 卷操作 | docker volume [命令] |
docker volume create mysql-data |
| 网络操作 | docker network [命令] |
docker network create my-net |
| Compose | docker-compose up/down |
docker-compose up -d |
| 系统清理 | docker system prune |
docker system prune -a --volumes |
| 查看详情 | docker inspect <对象> |
docker inspect web |
| 资源监控 | docker stats |
docker stats |
| 批量清理 | docker rm -f $(docker ps -aq) |
删除所有容器 |
docker rmi -f $(docker images -q) |
删除所有镜像 |
九、最佳实践建议
- 命名规范:始终使用
--name为容器命名,便于管理; - 数据持久化:重要数据务必使用
-v挂载卷,避免容器删除后数据丢失; - 端口映射:生产环境避免使用随机端口,明确指定主机端口;
- 镜像管理:定期执行
docker system prune清理无用资源; - 离线部署:生产环境建议预先导出镜像,使用
save/load而非直接pull; - 日志管理:使用
--log-driver和--log-opt配置日志轮转,防止磁盘占满; - 资源限制:生产环境使用
--memory和--cpus限制容器资源。
十、更新单个容器的完整流程
场景: 只替换某一个服务的镜像/容器,其它服务不动。可按以下流程操作:
# 1. 加载新镜像
docker load -i app.tar
sudo docker tag 453d60bfdbb9 my-service-backend:latest
# 2. 停止并删除旧容器
sudo docker stop my-backend
sudo docker rm my-backend
# 3. 用 Compose 单独重建该服务(不影响其他服务)
sudo docker compose up -d --no-deps --force-recreate my-backend
生产环境完整升级流程(含离线打包):
# ① 开发环境:强制重新构建指定服务镜像(读取最新代码,不用先删旧容器,不影响其他服务)
cd 到 docker-compose.yml 文件所在目录
docker compose up -d --build my-backend
docker compose logs -f my-backend # 检查日志确认构建成功
# ② 打包镜像并压缩,传输到生产服务器
docker save my-backend:latest | gzip > my-backend.tar.gz
# 传输后在生产服务器加载
sudo docker load -i my-backend.tar.gz
# ③ 生产服务器:停止并移除旧容器
docker compose stop my-backend
docker compose rm -f my-backend
# ④ 修改 compose 配置:用 image 替代 build,然后强制重建(不影响 MySQL 等其他容器)
sudo docker compose up -d --force-recreate --pull never my-backend
# 确保旧容器被彻底销毁,新容器应用所有最新的环境变量和配置
临时修改容器内文件的场景:
# 将修改后的文件复制进容器并重启
sudo docker cp /local/path/file.py <容器ID>:/app/module/utils/file.py
sudo docker restart <容器ID>
# 容器内导出 MySQL 备份
docker exec my-mysql mysqldump -uroot -p1234 MyDB > backup.sql
从零开始用 WSL 部署后端的参考流程(首次部署):
# 1. 将项目后端文件夹整个复制到 WSL 的用户目录下(虚拟环境和 IDE 配置不需要复制)
# 2. 启动 WSL,cd 到 docker-compose.yml 文件所在目录
docker compose up -d --build backend # backend 是服务名,不是 container_name
# --build: 强制重新构建镜像(读取最新代码),不用先删除旧容器,不影响其他服务
docker compose logs -f backend # 检查日志
# 3. 打包后端镜像
docker save my-backend:latest | gzip > my-backend.tar.gz
# 4. 加载镜像
gunzip -c my-backend.tar.gz | sudo docker load
# 5. 删除所有悬空镜像(无标签且无容器引用)
docker image prune -f
# 6. 使用 image 版 compose 文件启动(第一次全部启动 / 后续只更新后端)
sudo docker compose -f docker-compose.image.yml up -d # 第一次全部
sudo docker compose -f docker-compose.image.yml up -d --build backend # 只更新后端
要点:
docker compose up -d --build <服务名>只会重建指定的服务,其他服务(如 MySQL、Redis)保持原样不受影响;--no-deps确保不连带启动依赖服务;--force-recreate强制销毁旧容器、用最新配置创建新容器。

浙公网安备 33010602011771号