跳转到内容
新建笔记

Docker 命令速查:镜像、容器与数据

镜像是创建容器的模板;容器是某个镜像的一次运行实例及其可写层。停止容器、删除容器、删除镜像和删除卷是不同操作。

下列命令在安装了 Docker CLI、可连接目标 Docker Engine 的终端中运行。把 demo、my-image:tag 和文件路径替换为实际值;不要把 CONTAINER_ID/CONTAINER_NAME 当成一个含斜杠的真实名称。

1. 先确认环境与当前对象

跳转到“1. 先确认环境与当前对象”

安装步骤随系统和发行版不同,应使用 Docker Engine 安装文档选择对应平台;旧笔记中的 yum install docker 不是通用安装流程。

终端窗口
docker version
docker context show
docker image ls
docker ps
docker ps -a
docker ps -l
命令显示范围
docker ps正在运行的容器
docker ps -a所有容器,包括已停止的容器
docker ps -l最后创建的一个容器,无论是否正在运行
docker image ls本机 Docker Engine 管理的镜像

docker ps 是 docker container ls 的别名。原笔记将 ps -l 写成“当前正在运行”有误,已按官方选项定义更正。

2. 拉取镜像与新建容器

跳转到“2. 拉取镜像与新建容器”
终端窗口
docker pull my-image:tag
docker run -it --name demo my-image:tag /bin/sh

run 会创建一个新容器并启动;-i 保持标准输入打开,-t 分配终端。镜像必须包含所调用的 /bin/sh;精简镜像可能没有 shell。退出 shell 后,若它就是容器主进程,容器也会退出。

运行持续服务并映射端口的形式:

终端窗口
docker run -d --name web-demo -p 127.0.0.1:8088:80 my-web-image:tag
docker port web-demo
docker logs --tail 100 web-demo

这里把主机回环地址的 8088 端口映射到容器的 80 端口,适合本机检查;服务仍需在容器内部监听正确的地址与端口。-d 使容器在后台运行,它不会把已经退出的程序变成常驻服务。

GPU 容器的参数形式是 --gpus all,例如:

终端窗口
docker run -it --name gpu-demo --gpus all my-cuda-image:tag /bin/bash

前提是主机驱动、GPU 容器运行环境以及镜像相互兼容;单加参数不能安装这些依赖。参数含义见 docker run,配置另见 Docker 与 CUDA。

终端窗口
docker start demo
docker stop demo
docker restart demo
docker rename demo analysis-demo

start 复用已有容器及其配置;再次 run --name demo ... 会尝试创建同名新容器。stop 正常请求主进程退出,达到停止超时后可能强制终止;停止并不自动备份数据。相关操作参见 容器命令索引。

4. 进入正在运行的容器

跳转到“4. 进入正在运行的容器”
终端窗口
docker exec -it analysis-demo /bin/sh

exec 在运行中的容器内启动一个新进程。容器已退出时先检查原因;仅为排查问题反复启动可能掩盖原始故障。若需要执行带管道或重定向的命令,明确使用 shell:

终端窗口
docker exec analysis-demo sh -c 'printf "ready\n" > /tmp/status.txt'

命令和 shell 是否存在由镜像决定,见 docker exec。

5. 在主机和容器之间复制文件

跳转到“5. 在主机和容器之间复制文件”
终端窗口
docker cp ./input.csv analysis-demo:/tmp/input.csv
docker cp analysis-demo:/tmp/status.txt ./status.txt

冒号左侧是容器名或 ID,右侧是容器内路径。目标父目录应已存在,并检查复制后的权限。复制一次不建立持续同步关系;持续共享数据应使用合适的挂载方式。细节见 docker cp。

6. 保存容器改动与可重复构建

跳转到“6. 保存容器改动与可重复构建”
终端窗口
docker commit -a "Maintainer" analysis-demo my-analysis:debug-snapshot

这会把容器可写层等改动制作成一个镜像。挂载卷中的数据不包含在 commit 结果中;配置、数据库一致性和外部服务也需要独立处理。官方说明见 docker commit。

临时调试可使用快照;长期环境优先在 Dockerfile 中记录安装和配置过程,并对卷数据采取单独备份策略。不要把 commit 的成功当成完整恢复能力已经验证。

先查看对象和挂载,再停止并删除明确不需要的容器:

终端窗口
docker inspect analysis-demo
docker stop analysis-demo
docker rm analysis-demo
docker image rm my-analysis:debug-snapshot

docker rm -f 会强制删除运行容器,不能作为日常默认步骤;删除容器的可写层会失去其中未另行保存的数据。镜像删除针对本地镜像,不等于删除远端镜像仓库。分别参见容器删除和镜像删除。

批量清理前,按清理笔记逐类确认镜像、容器、构建缓存和卷的用途。生产数据卷不应仅因“暂时没有容器使用”就被判为垃圾。