镜像是创建容器的模板;容器是某个镜像的一次运行实例及其可写层。停止容器、删除容器、删除镜像和删除卷是不同操作。
下列命令在安装了 Docker CLI、可连接目标 Docker Engine 的终端中运行。把 demo、my-image:tag 和文件路径替换为实际值;不要把 CONTAINER_ID/CONTAINER_NAME 当成一个含斜杠的真实名称。
1. 先确认环境与当前对象
跳转到“1. 先确认环境与当前对象”安装步骤随系统和发行版不同,应使用 Docker Engine 安装文档选择对应平台;旧笔记中的 yum install docker 不是通用安装流程。
docker versiondocker context showdocker image lsdocker psdocker ps -adocker 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:tagdocker run -it --name demo my-image:tag /bin/shrun 会创建一个新容器并启动;-i 保持标准输入打开,-t 分配终端。镜像必须包含所调用的 /bin/sh;精简镜像可能没有 shell。退出 shell 后,若它就是容器主进程,容器也会退出。
运行持续服务并映射端口的形式:
docker run -d --name web-demo -p 127.0.0.1:8088:80 my-web-image:tagdocker port web-demodocker 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。
3. 启停已有容器
跳转到“3. 启停已有容器”docker start demodocker stop demodocker restart demodocker rename demo analysis-demostart 复用已有容器及其配置;再次 run --name demo ... 会尝试创建同名新容器。stop 正常请求主进程退出,达到停止超时后可能强制终止;停止并不自动备份数据。相关操作参见 容器命令索引。
4. 进入正在运行的容器
跳转到“4. 进入正在运行的容器”docker exec -it analysis-demo /bin/shexec 在运行中的容器内启动一个新进程。容器已退出时先检查原因;仅为排查问题反复启动可能掩盖原始故障。若需要执行带管道或重定向的命令,明确使用 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.csvdocker 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 的成功当成完整恢复能力已经验证。
7. 有目标地删除
跳转到“7. 有目标地删除”先查看对象和挂载,再停止并删除明确不需要的容器:
docker inspect analysis-demodocker stop analysis-demodocker rm analysis-demodocker image rm my-analysis:debug-snapshotdocker rm -f 会强制删除运行容器,不能作为日常默认步骤;删除容器的可写层会失去其中未另行保存的数据。镜像删除针对本地镜像,不等于删除远端镜像仓库。分别参见容器删除和镜像删除。
批量清理前,按清理笔记逐类确认镜像、容器、构建缓存和卷的用途。生产数据卷不应仅因“暂时没有容器使用”就被判为垃圾。