Docker 命令核心语法、常用命令
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. 下载最新版 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
-
清理资源
# 停止所有容器 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.tardocker 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 生态的核心工作流程。第二种方法应作为特殊情况下的备选方案。