Docker 常用命令
镜像、容器、网络与数据卷的常用操作速查。
【…】 为待替换参数,【容器】 可填容器名或 ID,【镜像:标签】 例如 nginx:alpine。各条命令按需使用,路径或参数含空格时加引号。
1. 环境与连接
| |
docker context ls 输出示例,* 表示当前连接环境:
| |
2. 镜像查询与拉取
| |
docker images 输出示例:
| |
省略标签时默认使用 latest,但它不保证是最新版本。pull 只下载镜像;更新已有容器需要用新镜像重建。
3. 创建并运行容器
| |
示例:用 Nginx 运行一个静态站点。 在连接本机 Docker 的 Bash / Zsh 终端中,进入一个空目录执行;容器名 web、网络名 app-net 和端口 8080 需未被占用。
| |
打开 http://127.0.0.1:8080,应看到 Hello Docker。网页文件保存在当前目录的 html 中,容器只读访问;修改 html/index.html 后刷新页面即可看到变化。行末 \ 用于续行,后面不要再加空格或注释。
| 参数 | 含义 |
|---|---|
-d | 后台运行 |
--name web | 指定容器名,不能与已有容器重名 |
--restart unless-stopped | 自动重启;手工停止后保持停止,包括 Docker 重启后 |
--network app-net | 加入已创建的 app-net 网络 |
-p 127.0.0.1:8080:80 | 将本机 TCP 8080 端口映射到容器 80 端口 |
-v 主机路径:容器路径:ro | 挂载目录,ro 表示容器只读 |
--cpus=1 / --memory=256m | CPU / 内存上限 |
-i / -t | 保持标准输入打开 / 分配伪终端,交互式 Shell 常组合为 -it |
--rm | 容器退出时删除容器及其匿名卷,保留命名卷 |
-e KEY=value / --env-file .env | 传入环境变量 / 从文件读取环境变量 |
-w /app | 指定容器内工作目录 |
run 新建容器,start 启动已有容器。 主进程退出后容器会停止,-d 不改变这一点;--rm 与 --restart 不能同时使用。
4. 容器列表与启停
| |
只保留名称、镜像和状态列,便于查看:
| |
| |
Up 表示运行中;Exited (0) 表示正常退出;Restarting (1) 表示以退出码 1 结束后正在重启,需查看日志。
start 和 restart 沿用容器原配置,不会换镜像或修改端口映射。
5. 容器日志
| |
Nginx 配置错误的日志示例:
| |
logs 查看容器的标准输出和标准错误,不会自动读取应用的日志文件。Ctrl+C 只结束日志跟踪,不停止容器。
6. 进入容器与复制文件
| |
exec 要求容器正在运行,且镜像中有对应程序。cp 也可操作已停止的容器,目标父目录需存在,可能覆盖同名文件。
attach 与 exec 的区别:
| |
exec 新开进程,attach 连接已有主进程;在 attach 中按 Ctrl+C 可能使容器停止。以 -it 启动的容器可依次按 Ctrl+P、Ctrl+Q 分离。
7. 详情与资源用量
| |
状态查询的输出示例:
| |
三项依次是状态、退出码和 OOM(内存不足)标记。这里 OOMKilled=true;仅凭退出码 137 不能断定内存不足。
资源用量输出示例(节选):
| |
MEM USAGE / LIMIT 是内存用量 / 上限;NET I/O 是累计接收 / 发送量,BLOCK I/O 是累计读取 / 写入量,不是每秒速率。
8. 端口与网络
| |
对第 3 节的 web 执行 docker port web,输出示例:
| |
-p 左边是主机端口,右边是容器端口。 -p 8080:80 默认发布到主机所有地址;加 127.0.0.1 则绑定回环地址。镜像中的 EXPOSE 不会自动发布端口。
同一自定义 bridge 网络中的容器可以通过容器名解析地址,默认 bridge 网络不提供同样的自动解析。
api和db都接入app-net后,api可通过db:3306访问监听 3306 端口的数据库,不需要额外设置-p。
9. 数据卷与目录挂载
| |
| 写法 | 类型与用途 |
|---|---|
-v app-data:/data | 命名卷,适合让数据独立于容器保留 |
-v /srv/app/data:/data | 绑定主机目录,直接使用指定路径下的文件 |
-v /srv/app/config:/config:ro | 只读绑定,容器不能通过这个挂载修改源文件 |
-v /data | 匿名卷,Docker 自动分配名称,后续复用时不如命名卷直观 |
绑定挂载的源路径不存在时,--mount 默认报错,-v 会自动创建目录。
删除容器不删除命名卷。 需要保留的数据应写入挂载目录;仅写在容器可写层中的文件会随容器删除。
10. 构建、标记与推送镜像
| |
build 最后的路径是构建上下文,Dockerfile 用 -f 指定。 --no-cache 不会更新基础镜像,需要时加 --pull。
仓库地址不带 https://。推送 Docker Hub 时用 【用户名】/【镜像名】:【标签】,登录时省略仓库地址。
指定 linux/amd64 平台并载入本地镜像库,需构建器支持该平台或模拟运行:
| |
11. 镜像归档与容器导出
| |
docker load 输出示例:
| |
| 需求 | 命令与保留内容 |
|---|---|
| 离线搬运镜像 | save / load,保存并恢复镜像层、配置和标签 |
| 导出容器文件系统 | export / import,得到文件系统快照;不保留原镜像的分层历史和完整运行配置 |
| 临时保存容器改动 | commit,生成新镜像;可复现的构建仍应写入 Dockerfile |
以上命令都不备份挂载卷的数据。 save 也不包含容器运行后写入可写层的文件。
12. Docker Compose
在含有 compose.yaml 的项目目录执行。【服务名】 取自配置中的 services,不一定等于容器名。
| |
docker compose ps 输出示例(节选):
| |
改配置后用 up -d 应用,restart 不会应用修改。 更新远端镜像先 pull,再 up -d。
down 默认保留卷;down -v 会删除配置声明的命名卷及关联匿名卷,external 卷除外。
13. 删除与清理
| |
运行中的容器先 stop 再 rm;rm -f 会强制结束并删除。docker kill 【容器】 默认发送 SIGKILL,只停止、不删除容器。
rmi 只删本地镜像引用,不删除远端镜像。下表中的“未被引用”要求运行中和已停止的容器都没有引用该资源。
| 命令 | 删除范围 |
|---|---|
docker container prune | 所有已停止的容器及其可写层 |
docker image prune | dangling 镜像,即未打标签且未被容器引用的镜像 |
docker image prune -a | 所有未被容器引用的镜像,包括有标签的镜像 |
docker network prune | 未被容器使用的自定义网络 |
docker builder prune | 清理构建缓存,默认清理 dangling 缓存;-a 扩大到所有未使用缓存 |
docker volume prune | 未被容器引用的匿名本地卷 |
docker volume prune -a | 未被容器引用的匿名卷和命名卷,要求 API 1.42+ |
docker system prune | 已停止容器、未使用网络、dangling 镜像和未使用构建缓存,默认不删卷 |
system prune -a 包括所有未被容器引用的镜像;--volumes 额外清理未使用的匿名卷,不含命名卷。prune -f 只跳过确认提示。
评论
使用 GitHub 登录后参与讨论,评论将公开保存在 GitHub。
站长管理删除会同步到 GitHub,无法撤销。
阅读到这里时加载评论。