在当今云原生和微服务架构盛行的时代,Docker已成为开发者与运维工程师不可或缺的利器。它通过容器化技术,实现了应用及其依赖环境的标准化打包与隔离运行,极大地简化了部署流程,提升了开发与运维效率。然而,要真正驾驭Docker,熟练运用其命令行工具是第一步。本文将系统性地梳理Docker的核心命令,涵盖镜像、容器、仓库等关键概念,并提供实用的操作技巧与最佳实践,助你从Docker新手快速进阶为高效使用者。

一、启航:掌握基础帮助与信息获取

任何技术栈的学习都始于了解如何获取帮助。Docker命令行工具提供了完善的帮助系统,让你在遇到陌生命令时能快速上手。使用 docker --help 可以列出所有Docker命令的分类概览,如管理镜像的 image、管理容器的 container 等。当你需要了解某个具体命令的详细用法、参数选项及示例时,具体命令 --help 是你的最佳伙伴。例如,想深入了解如何运行容器,只需执行 docker run --help。善用帮助命令,是摆脱死记硬背、实现自主探索的关键。

# 查看Docker整体帮助文档
docker --help
# 查看指定命令的详细用法(以cp命令为例)
docker cp --help

二、基石:镜像的高效管理与维护

镜像是Docker世界的基石,是一个轻量级、可执行的独立软件包,包含了运行某个应用所需的所有内容。高效管理镜像是容器化工作流的核心。

  • 查看与搜索:使用
    # 列出本地所有镜像(默认隐藏中间层镜像)
    docker images
    # 列出本地所有镜像(包含历史映像层)
    docker images -a
    # 只显示镜像ID(常用于批量操作)
    docker images -q
    # 列出指定仓库的镜像(如只看redis镜像)
    docker images redis
    # 显示镜像的摘要信息
    docker images --digests
    可以列出本地所有镜像及其详细信息(仓库、标签、ID、大小)。当需要从Docker Hub等公共仓库寻找特定软件时,
    # 搜索指定名称的镜像(如搜索redis)
    docker search redis
    # 搜索镜像并限制结果数量(如只显示前5个)
    docker search --limit 5 redis
    命令非常有用,它能返回相关镜像的星级、官方认证等信息,帮助你做出选择。
  • 拉取与清理:选定镜像后,使用 docker pull 镜像名[:TAG] 语法将其下载到本地,例如
    # 下载最新版本的镜像(不指定TAG默认latest)
    docker pull mysql
    # 下载指定版本的镜像(如redis 6.0.8)
    docker pull redis:6.0.8
    。随着时间推移,本地会积累许多不再使用的镜像和容器,占用大量磁盘空间。定期使用
    # 查看镜像、容器、数据卷的空间占用情况
    docker system df
    查看资源占用情况,并使用
    # 根据镜像名称删除(如删除hello-world镜像)
    docker rmi hello-world
    # 根据镜像ID删除
    docker rmi feb5d9fea6a5
    # 强制删除镜像
    docker rmi -f 镜像ID/镜像名
    # 删除多个镜像(空格分隔)
    docker rmi -f ubuntu:latest redis:6.0.8
    # 删除所有本地镜像
    docker rmi -f $(docker images -qa)
    或结合 $(docker images -qa)-f 进行批量清理至关重要。特别要注意清理那些名为 <none>虚悬镜像,它们通常由构建过程产生,已无用处:
    # 查看所有虚悬镜像
    docker images -f dangling=true
    # 删除所有虚悬镜像
    docker image prune
[AFFILIATE_SLOT_1]

三、核心:容器的全生命周期管理

容器是镜像的运行实例。管理容器的生命周期是日常工作的重点。

  • 创建与运行docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 是最核心的命令。通过组合不同的参数,可以灵活控制容器的行为。例如,-d 让容器后台运行,-p 映射端口,-v 挂载数据卷,--name 指定容器名。一个典型的启动命令如:
    # 交互式启动Ubuntu容器,进入bash终端
    docker run -it ubuntu /bin/bash
    # 指定容器名启动(如命名为u1)
    docker run -it --name=u1 ubuntu /bin/bash
    # 后台启动Redis容器,指定端口映射(主机6379映射容器6379)
    docker run -d -p 6379:6379 --name=myredis redis:6.0.8
    # 启动守护式容器(后台运行,不占用终端)
    docker run -d redis:6.0.8
  • 状态监控与交互:使用
    # 查看正在运行的容器
    docker ps
    # 查看所有容器(包括停止的)
    docker ps -a
    # 查看最近创建的容器(默认最近1个)
    docker ps -l
    # 查看最近创建的n个容器(如最近2个)
    docker ps -n 2
    # 只显示容器ID
    docker ps -q
    # 查看容器详细信息(如查看u1容器详情)
    docker inspect u1
    查看容器状态。对于后台运行的容器,需要进入其内部进行操作,可以使用 docker exec -it(推荐,因为可以开启新终端)或 docker attach(附加到原输入流)。查看容器内部进程和输出日志分别使用
    # 查看容器运行日志
    docker logs 容器ID/容器名
    # 实时查看日志
    docker logs -f 容器ID/容器名
    # 查看容器内运行的进程
    docker top 容器ID/容器名
  • 启停与删除:使用
    # 启动已停止的容器
    docker start 容器ID/容器名
    # 重启容器
    docker restart 容器ID/容器名
    # 停止容器
    docker stop 容器ID/容器名
    # 强制停止容器
    docker kill 容器ID/容器名
    控制容器运行。删除容器时需注意,运行中的容器需先停止或使用 -f 强制删除:
    # 删除已停止的容器
    docker rm 容器ID/容器名
    # 强制删除容器(无论是否运行)
    docker rm -f 容器ID/容器名
    # 批量删除所有停止的容器
    docker rm -f $(docker ps -a -q)
    # 批量删除所有容器
    docker rm -f $(docker ps -qa)

参数作用
- -name=“容器名”指定容器名称(如- -name=u1),避免默认随机名称
-d后台运行容器(守护式容器),返回容器ID
-it交互式(前台)运行容器(:交互模式,:分配伪终端)
-P随机端口映射(大写P),Docker自动分配主机端口映射到容器端口
-p指定端口映射(小写p),格式:主机端口:容器端口(如-p 8080:80)
–privileged=true扩大容器权限(解决CentOS7中目录挂载权限问题)
-v数据卷挂载(如-v 宿主机目录:容器目录)

四、进阶:数据管理、迁移与仓库交互

掌握基础命令后,一些进阶操作能让你应对更复杂的场景。

  • 数据备份与迁移:这是容器化部署中保证数据持久性和可移植性的关键。你可以从容器内拷贝文件到主机(
    # 语法:docker cp 容器ID:容器内路径 主机目标路径
    # 示例:将容器内/tmp/a.txt拷贝到主机/tmp目录
    docker cp 608d2057e7e5:/tmp/a.txt /tmp/a.txt
    ),或将整个容器导出为tar包进行迁移(
    # 语法:docker export 容器ID > 文件名.tar
    docker export 608d2057e7e5 > ubuntu.tar.gz
    ),再导入为镜像(
    # 语法:cat 文件名.tar | docker import - 镜像用户/镜像名:版本号
    cat ubuntu.tar.gz | docker import - wen/ubuntu:1.0
    )。对于生产环境,更推荐使用Docker Volume或绑定挂载来实现数据的持久化存储。
  • 仓库交互:Docker Hub或私有仓库是镜像的集散地。你需要登录(docker login)、推送镜像(docker push)和拉取镜像。这对于团队协作和持续集成/持续部署(CI/CD)流程至关重要。相关命令示例如下:
    # 登录Docker仓库(以阿里云为例)
    docker login --username=用户名 registry.cn-hangzhou.aliyuncs.com
    # 退出仓库登录
    docker logout
    # 给镜像打标签(推送镜像到仓库前必须操作)
    # 语法:docker tag 本地镜像ID 仓库地址/命名空间/镜像名:版本号
    docker tag a31aabe9e714 registry.cn-hangzhou.aliyuncs.com/krisswen/linux1:1.0
    # 推送镜像到仓库
    docker push registry.cn-hangzhou.aliyuncs.com/krisswen/linux1:1.0
    # 从仓库拉取镜像
    docker pull registry.cn-hangzhou.aliyuncs.com/krisswen/linux1:1.0
  • 迈向容器编排:当需要管理成百上千个容器时,手动使用Docker命令将变得力不从心。此时,容器编排工具如 Kubernetes (K8s) 便登上舞台。K8s可以自动化容器的部署、扩展和管理。学习Docker是理解K8s中Pod、Service等概念的良好基础。了解Docker Compose(用于定义和运行多容器应用)则是通往K8s的实用中间步骤。
[AFFILIATE_SLOT_2]

五、速查与实践总结

为了便于日常查阅,我们将最常用的命令整理成表。记住,熟练源于实践,建议在安全的环境(如本地开发机)中多动手尝试这些命令。

功能分类核心命令
镜像查看
镜像搜索
镜像下载
镜像删除
容器创建
容器启动
容器停止
容器查看
进入容器
容器删除
仓库操作

区别

  • 会创建新的终端进程,不影响容器运
  • 直接连接容器的主进程,退出后容器停止。

注意删除容器不会影响镜像,镜像可重新创建新容器。

注意推送镜像到私有仓库时,需先登录且镜像标签符合仓库规范(仓库地址/命名空间/镜像名:版本号)。

总之,Docker命令是解锁容器化能力的钥匙。从镜像管理到容器控制,再到数据持久化与仓库交互,构建了一套完整的应用生命周期管理方案。深入理解并熟练运用这些命令,不仅能提升个人开发运维效率,更是构建现代化、可扩展的云原生应用架构(如基于Kubernetes的微服务)的坚实基础。现在,就打开终端,开始你的容器化之旅吧!

在这里插入图片描述-i-tdocker imagesdocker images -adocker images -qdocker search 镜像名docker search --limit 数量 镜像名docker pull 镜像名[:TAG]docker rmi 镜像ID/名称docker rmi -f 镜像ID/名称docker run -it --name=容器名 镜像名 /bin/bashdocker start 容器ID/名称docker stop 容器ID/名称docker kill 容器ID/名称docker psdocker ps -adocker inspect 容器ID/名称docker exec -it 容器ID/名称 /bin/bashdocker rm 容器ID/名称docker rm -f 容器ID/名称docker logindocker push 镜像标签docker pull 镜像标签execattach