Docker 命令核心语法、常用命令

发布于:2025-09-13 ⋅ 阅读:(31) ⋅ 点赞:(0)

Docker 命令核心语法

docker [OPTIONS] COMMAND [ARG...]
  • docker: 主命令。
  • [OPTIONS]: 全局选项,影响 Docker 客户端本身的行为(如 -H 指定守护进程地址、--tls 启用加密等)。日常使用较少。
  • COMMAND: 子命令,表示要执行的主要操作(如 run, ps, images)。
  • [ARG...]: 传递给子命令的参数和选项。

常用 Docker 命令分类详解

以下是按照功能分类的最常用命令及其语法。

1. 容器生命周期管理 (最核心)
命令 语法 & 常用选项 说明
run docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d:后台运行
--name:命名容器
-p:端口映射 -p 主机端口:容器端口
-v:数据卷映射 -v 主机目录:容器目录
-e:设置环境变量
--network:指定网络模式
-it:交互模式运行(通常与 /bin/bash 连用)
创建并启动一个新容器。这是最复杂的命令。
start docker start [OPTIONS] CONTAINER [CONTAINER...] 启动一个或多个已停止的容器。
stop docker stop [OPTIONS] CONTAINER [CONTAINER...] 停止一个或多个运行中的容器(发送 SIGTERM 信号)。
restart docker restart [OPTIONS] CONTAINER [CONTAINER...] 重启一个或多个容器。
rm docker rm [OPTIONS] CONTAINER [CONTAINER...]
-f:强制删除(正在运行的)
-v:同时删除关联的卷
删除一个或多个已停止的容器。
exec docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
-it:交互模式(进入容器)
-e:设置环境变量
在正在运行的容器中执行命令。常用于进入容器:docker exec -it mynginx /bin/bash
pause/unpause docker pause CONTAINER
docker unpause CONTAINER
暂停/恢复容器内的所有进程。
2. 容器信息查询
命令 语法 & 常用选项 说明
ps docker ps [OPTIONS]
-a:显示所有容器(包括已停止的)
-q:只显示容器ID
--no-trunc:不截断输出
列出容器。docker ps -a 是最常用的组合
logs docker logs [OPTIONS] CONTAINER
-f:跟踪日志输出(类似 tail -f
--tail N:仅显示最后 N 条日志
-t:显示时间戳
获取容器的日志。排查问题必备
inspect docker inspect [OPTIONS] NAME|ID [NAME|ID...]
--format or -f:用 Go 模板格式化输出
获取容器(或镜像、网络、卷)的底层详细信息(JSON 格式)。非常强大。
stats docker stats [OPTIONS] [CONTAINER...] 动态显示容器的实时资源使用情况(CPU、内存、网络IO)。
top docker top CONTAINER [ps OPTIONS] 显示容器中运行的进程信息。
3. 镜像管理
命令 语法 & 常用选项 说明
images docker images [OPTIONS] [REPOSITORY[:TAG]]
-a:显示所有镜像(包括中间层)
-q:只显示镜像ID
列出本地存储的镜像。
pull docker pull [OPTIONS] NAME[:TAG|@DIGEST] 从镜像仓库(如 Docker Hub)下载镜像。不指定 TAG 则默认为 latest
push docker push NAME[:TAG] 将本地的镜像上传到镜像仓库。
rmi docker rmi [OPTIONS] IMAGE [IMAGE...]
-f:强制删除
删除本地的一个或多个镜像。
build docker build [OPTIONS] PATH | URL | -
-t:指定镜像名和标签 name:tag
-f:指定 Dockerfile 路径
根据 Dockerfile 构建一个新的镜像。
tag docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] 为本地镜像创建一个新的标签(别名)。
4. 网络管理
命令 语法 说明
network ls docker network ls 列出所有 Docker 网络。
network create docker network create [OPTIONS] NETWORK 创建一个新的 Docker 网络。
network inspect docker network inspect NETWORK 查看网络的详细信息。
network connect docker network connect NETWORK CONTAINER 将容器连接到指定网络。
network disconnect docker network disconnect NETWORK CONTAINER 断开容器与指定网络的连接。
5. 数据卷管理
命令 语法 说明
volume create docker volume create [OPTIONS] VOLUME 创建一个数据卷。
volume ls docker volume ls 列出所有数据卷。
volume inspect docker volume inspect VOLUME 查看数据卷的详细信息。
volume rm docker volume rm VOLUME 删除一个数据卷。
volume prune docker volume prune 删除所有未被使用的数据卷。

实战命令组合示例

  1. 从下载到运行一个容器

    # 1. 下载最新版 nginx 镜像
    docker pull nginx:latest
    
    # 2. 以后台模式运行,并设置名称和端口映射
    docker run -d --name my-web -p 80:80 nginx
    
    # 3. 查看运行状态
    docker ps
    
    # 4. 查看实时日志
    docker logs -f my-web
    
    # 5. 进入容器内部
    docker exec -it my-web /bin/bash
    
    # 6. 停止容器
    docker stop my-web
    
    # 7. 删除已停止的容器
    docker rm my-web
    
    # 8. 删除镜像
    docker rmi nginx:latest
    
  2. 清理资源

    # 停止所有容器
    docker stop $(docker ps -aq)
    
    # 删除所有已停止的容器
    docker rm $(docker ps -aq)
    
    # 删除所有未被使用的镜像
    docker image prune -a
    
    # 删除所有未被使用的网络和数据卷
    docker system prune --volumes
    

如何获取帮助

如果忘记命令用法,--help 是你最好的朋友。

  • 查看所有命令列表
    docker --help
    
  • 查看具体命令的详细帮助(例如 run):
    docker run --help
    

好的,Docker 保存和分享镜像主要有两种方式:使用镜像仓库直接保存为文件。它们各有优劣,适用于不同的场景。


保存、分享镜像

方法一:使用镜像仓库(推荐方式)

这是最标准、最常用的方法。Docker 镜像仓库类似于代码仓库(如 GitHub),用于存储和分发镜像。最著名的公共仓库是 Docker Hub,你也可以搭建私有仓库(如 Harbor, Nexus)。

工作流程:docker tag -> docker push -> docker pull

步骤 1:登录到镜像仓库

# 登录到 Docker Hub(默认)
docker login

# 登录到其他私有仓库
docker login your-private-registry.com:5000

执行后会提示输入用户名和密码。

步骤 2:给镜像打标签
本地镜像的默认标签(如 my-app:latest)无法直接推送到仓库,需要按照 [仓库地址]/[用户名]/[镜像名]:[标签] 的格式重新打标签。

# 语法:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

# 示例1:推送到 Docker Hub(假设用户名为 myusername)
docker tag my-app:latest myusername/my-app:latest
docker tag my-app:latest myusername/my-app:v1.0

# 示例2:推送到私有仓库
docker tag my-app:latest your-private-registry.com:5000/myteam/my-app:prod

步骤 3:推送镜像到仓库
使用 docker push 命令将打好标签的镜像上传。

# 推送刚才打好标签的镜像
docker push myusername/my-app:latest
docker push myusername/my-app:v1.0
docker push your-private-registry.com:5000/myteam/my-app:prod

上传成功后,你就可以在 Docker Hub 网站或私有仓库的界面上看到你的镜像了。

步骤 4:他人拉取镜像分享
别人只需要一条 docker pull 命令即可获取你的镜像。

# 从 Docker Hub 拉取
docker pull myusername/my-app:latest

# 从私有仓库拉取
docker pull your-private-registry.com:5000/myteam/my-app:prod

优点:

  • 极其方便:一条命令即可全球分发。
  • 版本管理:可以轻松管理不同版本的镜像(v1.0, v2.0, latest)。
  • 自动化集成:可以与 CI/CD 工具(如 GitHub Actions, Jenkins)完美结合,自动构建和推送镜像。

缺点:

  • 需要网络连接。
  • 公共仓库可能对私有项目收费,私有仓库需要自行维护。

方法二:保存为文件(离线方式)

这种方式将镜像打包成一个单一的 .tar 文件,适合离线环境、网络隔离场景或快速迁移。

工作流程:docker save -> 传输文件 -> docker load

步骤 1:将镜像保存为文件
使用 docker save 命令将镜像导出。

# 语法:docker save -o filename.tar IMAGE_NAME[:TAG]

# 将单个镜像保存为 .tar 文件
docker save -o my-app-backup.tar my-app:latest

# 将多个镜像保存到同一个文件
docker save -o all-my-images.tar nginx:alpine redis:alpine my-app:latest

步骤 2:分享文件
通过任何方式(U盘、邮件、网盘、SCP等)将生成的 .tar 文件发送给别人。

# 例如,使用 SCP 命令传输到服务器
scp my-app-backup.tar user@remote-server:/path/to/directory/

步骤 3:从文件加载镜像
对方使用 docker load 命令将镜像导入到其本地 Docker 环境中。

# 语法:docker load -i filename.tar

docker load -i my-app-backup.tar

# 加载后,使用 docker images 查看,镜像名和标签会与保存时完全一致
docker images

优点:

  • 完全离线:不依赖任何网络和仓库服务。
  • 简单直接:适合一次性迁移或备份。
  • 环境隔离:适用于安全要求高、无法连接外网的环境。

缺点:

  • 不方便:需要手动传输文件,文件体积可能很大。
  • 无版本管理:文件本身没有版本概念,需要手动管理文件名。

方法对比总结

特性 使用镜像仓库 (push/pull) 保存为文件 (save/load)
适用场景 团队协作、CI/CD、公共分发 离线环境、一次性迁移、备份
网络要求 必需 无需
方便程度 非常方便(一条命令) 相对麻烦(需处理文件)
版本管理 支持(通过标签) 不支持(需手动管理)
文件大小 增量上传/下载,效率高 完整镜像文件,可能很大

实战示例:如何分享一个自定义的 Web 应用

假设你构建了一个名为 my-web-app 的镜像。

方法 A:推送到 Docker Hub

# 1. 登录
docker login

# 2. 打标签 (你的Docker Hub用户名是 johnsmith)
docker tag my-web-app:latest johnsmith/my-web-app:latest

# 3. 推送
docker push johnsmith/my-web-app:latest

# 4. 告诉你的同事运行
docker run -p 8080:80 johnsmith/my-web-app:latest

方法 B:保存为文件

# 1. 保存
docker save -o my-web-app-offline.tar my-web-app:latest

# 2. 用U盘拷走...

# 3. 同事加载并运行
docker load -i my-web-app-offline.tar
docker run -p 8080:80 my-web-app:latest

对于绝大多数情况,强烈推荐使用第一种方法(镜像仓库),它是 Docker 生态的核心工作流程。第二种方法应作为特殊情况下的备选方案。