以下是 Docker 日常开发、部署和运维中最常用的指令合集,涵盖镜像、容器、数据卷、网络、离线传输等完整工作流。


一、镜像管理命令

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           # 拉取所有服务镜像

命令删除内容数据卷适用场景
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 imagesdocker 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.tardocker load -i app.tar
docker save | gzip > file.tar.gzdocker save myapp | gzip > app.tar.gz
gunzip -c file.tar.gz | docker loadgunzip -c app.tar.gz | docker load
容器操作docker run [选项] <镜像>docker run -d -p 80:80 --name web nginx
docker psdocker ps -a
docker start/stop <容器>docker stop web
docker exec -it <容器> bashdocker 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
Composedocker-compose up/downdocker-compose up -d
系统清理docker system prunedocker system prune -a --volumes
查看详情docker inspect <对象>docker inspect web
资源监控docker statsdocker stats
批量清理docker rm -f $(docker ps -aq)删除所有容器
docker rmi -f $(docker images -q)删除所有镜像

九、最佳实践建议

  1. 命名规范:始终使用 --name 为容器命名,便于管理
  2. 数据持久化:重要数据务必使用 -v 挂载卷,避免容器删除后数据丢失
  3. 端口映射:生产环境避免使用随机端口,明确指定主机端口
  4. 镜像管理:定期执行 docker system prune 清理无用资源
  5. 离线部署:生产环境建议预先导出镜像,使用 save/load 而非直接 pull
  6. 日志管理:使用 --log-driver 和 --log-opt 配置日志轮转,防止磁盘占满
  7. 资源限制:生产环境使用 --memory 和 --cpus 限制容器资源

十、更新单个容器(只替换某一个服务的镜像/容器,其它服务不动)可按这个流程

docker load -i app.tar
sudo docker tag 453d60bfdbb9 flux-backend-banked-backend:latest
sudo docker stop banked-backend-AT133
sudo docker rm banked-backend-AT133
sudo docker compose up -d --no-deps --force-recreate banked-backend
 pip download -d packages -r requirements.txt  # 下载 wheel
 
 C:\Program Files\MySQL\MySQL Workbench 8.0\mysqldump.exe -u root -p mvcheck > "%USERPROFILE%\mvcheck_backup.sql" # 导出开发环境的数据库
 
 cd 到docker-compose.yml文件的目录 
docker compose up -d --build banked 
# --build: 强制重新构建 banked-backend 的镜像(读取你最新的代码),而且不用先删除旧的运行中的容器,同时不会影响其他例如 docker-compose.yml文件中的其他服务,例如MySQL等。

docker compose logs -f banked-backend

docker save flux-backend-banked-backend:latest | gzip > flux-backend-banked-backend.tar.gz

docker compose stop banked-backend

docker compose rm -f banked-backend 

sudo docker load -i flux-backend-banked-backend.tar.gz
#修改 compose:用 image,去掉 build
sudo docker compose up -d --force-recreate --pull never banked-backend # 不会对MySQL容器造成影响, 确保旧容器被彻底销毁,新容器应用所有最新的环境变量和配置。
# 可以将临时修改docker里面的内容
# 重新启动docker容器

sudo docker cp /home/lasahub/AT133_QS_MV_safety_Check/backend/sharepoint_pdf_parser.py 363b4cf0dd29:/app/module_certification/pdf/utils/sharepoint_pdf_parser.py 
sudo docker restart 363b4cf0dd29

# docker 容器导出MySQL备份
docker exec banked-mysql-AT133 mysqldump -uroot -p1234 MVCheck > backup.sql

# 从零开始从WSL使用docker 部署后端,然后打包image到服务器部署

第一次部署
1. 将项目的后端文件夹内容(D:\xujiamiao\AT133_QS_MV_safety_Check\ruoyi-fastapi-backend)整个复制到WSL的里面的个人用户下面(\\wsl.localhost\Ubuntu-22.04\home\xjm,虚拟环境和idea不需要复制哈)
2. 启动WSL,进入到后端文件夹路径里面:xjm@Mo:~/ruoyi-fastapi-backend$, cd 到docker-compose.yml文件的目录 
docker compose up -d --build backend(这个是服务名 不是容器名container_name) 
# --build: 强制重新构建 banked的镜像(读取你最新的代码),而且不用先删除旧的运行中的容器,同时不会影响其他例如 docker-compose.yml文件中的其他服务,例如MySQL等。
可以通过 docker compose logs -f backend进行检查
3. 打包后端镜像docker save ruoyi-fastapi-backend-backend:latest | gzip > ruoyi-fastapi-backend-backend.tar.gz
4. gunzip -c ruoyi-fastapi-backend-backend.tar.gz | sudo docker load
5. # 删除所有悬空镜像(无标签且无容器引用)
docker image prune -f
6. sudo docker compose -f docker-compose.image.yml up -d(第一次全部)
sudo docker compose -f docker-compose.image.yml up -d --build backend(只更新后端)

更多推荐