Docker常用命令

Docker常用命令的整理,按功能分类,方便快速查阅:

1. 基础命令

命令 说明
docker version 查看Docker版本信息
docker info 显示Docker系统信息

2. 镜像管理

命令 说明
docker search <镜像名> 从Docker Hub搜索镜像(如 docker search nginx
docker pull <镜像名:标签> 拉取镜像(默认标签为 latest,如 docker pull ubuntu:20.04
docker images 列出本地所有镜像
docker rmi <镜像ID>docker image rm <镜像ID> 删除镜像(加 -f 强制删除,如 docker rmi -f abc123
docker build -t <镜像名:标签> 构建镜像(如 docker build -t myapp:v1 .
docker image prune 删除未被使用的镜像

3. 容器操作

启动容器
docker run [参数] <镜像名>
# 常用参数:
-d        # 后台运行(守护态)
-p        # 端口映射(如 `-p 8080:80` 将主机8080映射到容器80端口)
-v        # 挂载数据卷(如 `-v /宿主机路径:/容器路径`)
-e        # 设置环境变量(如 `-e MYSQL_ROOT_PASSWORD=123`)
--name    # 指定容器名称(如 `--name my_container`)
-it       # 交互模式(通常与 `/bin/bash` 结合使用)
管理容器
命令 说明
docker ps 查看运行中的容器(加 -a 显示所有容器)
docker start/stop/restart <容器ID或名称> 启动/停止/重启容器
docker rm <容器ID> 删除容器(加 -f 强制删除正在运行的容器)
docker logs <容器ID> 查看容器日志(加 -f 实时跟踪日志)
docker exec -it <容器ID> /bin/bash 进入运行中的容器(退出时输入 exit
docker inspect <容器ID> 查看容器详细信息(如IP地址、配置等)
docker top <容器ID> 查看容器内进程
docker stats 实时查看容器资源使用情况

4. 网络管理

命令 说明
docker network ls 列出所有网络
docker network create <网络名> 创建自定义网络(如 docker network create mynet --driver bridge
docker network inspect <网络名> 查看网络详情
docker network connect/disconnect <网络名> <容器ID> 连接/断开容器到网络

5. 数据卷管理

命令 说明
docker volume create <卷名> 创建数据卷
docker volume ls 列出所有数据卷
docker volume inspect <卷名> 查看数据卷详情
docker volume rm <卷名> 删除数据卷
docker volume prune 删除未使用的数据卷

6. 镜像打包

1. 镜像打包与加载(推荐:保留完整镜像信息)
方法说明
  • docker savedocker load
    用于将镜像完整保存为 .tar 文件(保留镜像的层结构、标签、历史记录等元数据),适合迁移或备份完整镜像。
操作步骤
  1. 打包镜像为 .tar 文件

    # 语法
    docker save -o <输出文件名>.tar <镜像名:标签>
    
    # 示例:将 nginx:latest 打包为 nginx_image.tar
    docker save -o nginx_image.tar nginx:latest
    
    # 支持同时打包多个镜像到同一文件
    docker save -o all_images.tar nginx:latest redis:alpine
    
  2. 加载镜像到本地仓库

    # 语法
    docker load -i <输入文件名>.tar
    
    # 示例:从 nginx_image.tar 加载镜像
    docker load -i nginx_image.tar
    
验证结果
docker images  # 查看镜像是否加载成功(保留原镜像名称和标签)
2. 容器文件系统打包与加载(仅保留当前文件快照)
方法说明
  • docker exportdocker import
    将容器的当前文件系统状态导出为 .tar 文件(不保留历史记录、元数据),生成的镜像是一个“快照”,适合仅需容器当前数据场景。
操作步骤
  1. 运行一个临时容器(若容器未运行)

    docker run -d --name temp_container nginx:latest
    
  2. 导出容器文件系统为 .tar 文件

    # 语法
    docker export <容器ID或名称> > <输出文件名>.tar
    
    # 示例:将容器导出为 container_fs.tar
    docker export temp_container > container_fs.tar
    
  3. .tar 文件导入为新镜像

    # 语法(必须指定新镜像名称和标签)
    docker import <输入文件名>.tar <新镜像名:标签>
    
    # 示例:导入为 my_nginx:v1
    docker import container_fs.tar my_nginx:v1
    
  4. 清理临时容器

    docker rm -f temp_container
    
验证结果
docker images  # 查看新镜像 my_nginx:v1
3. 两种方法的对比
特性 docker save/load docker export/import
保留镜像层历史 ❌(仅保留当前文件系统)
保留元数据(标签) ❌(需手动指定新标签)
适用场景 完整镜像迁移、备份 容器快照导出、快速创建基础镜像
文件体积 较大(包含所有层) 较小(仅当前文件系统)
4. 实用技巧
  1. 压缩镜像文件

    # 使用 gzip 压缩(节省空间)
    docker save nginx:latest | gzip > nginx_image.tar.gz
    
    # 加载时解压
    gunzip -c nginx_image.tar.gz | docker load
    
  2. 批量操作

    # 导出多个镜像
    docker save -o all_images.tar image1:v1 image2:v2
    
    # 导入后自动解包
    docker load -i all_images.tar
    
  3. 跨机器传输

    # 将镜像文件复制到目标机器(如使用 scp)
    scp nginx_image.tar user@remote_host:/path/
    
    # 在目标机器加载
    ssh user@remote_host "docker load -i /path/nginx_image.tar"
    
5. 常见问题
Q: docker load 后镜像名称变为
  • 原因:原始镜像文件在导出时未包含标签信息。
  • 解决:使用 docker tag <镜像ID> <新名称:标签> 重新标记镜像。
Q: 导出后的 .tar 文件无法加载?
  • 检查步骤
    1. 确认文件完整性(如传输过程中是否损坏)。
    2. 验证导出命令是否正确(如使用 docker save 而非 docker export)。
    3. 检查 Docker 版本是否兼容。

7. 其他实用命令

命令 说明
docker cp <容器ID>:<容器内路径> <宿主机路径> 从容器复制文件到主机(反之亦然)
docker system df 查看Docker磁盘使用情况
docker system prune 清理无用资源(镜像、容器、网络、缓存等)
docker logindocker logout 登录/退出Docker仓库
docker tag <旧镜像名> <新镜像名> 重命名镜像标签
docker history <镜像名> 查看镜像构建历史

常用示例

  1. 启动Nginx容器并映射端口:

    docker run -d -p 80:80 --name my_nginx nginx
    
  2. 进入运行中的容器:

    docker exec -it my_nginx /bin/bash
    
  3. 构建自定义镜像:

    docker build -t myapp:v1 -f Dockerfile .
    
  4. 清理所有未使用的资源:

    docker system prune -a -f
    

覆盖日常开发、测试和部署中的大部分Docker操作需求。建议搭配Docker文档使用以深入理解参数细节。

你可能感兴趣的:(Docker,docker,容器)