通过本课件,你将掌握:
Docker 新旧命令体系的区别,理解为何推荐使用对象化命令(如 docker container run);
9 大核心命令的用法与场景:从 run、pull 到 exec、inspect;
镜像与容器全生命周期管理:构建、运行、调试、清理;
高级操作技巧:端口映射、环境变量设置、批量操作与系统清理;
安全与协作基础:登录 Registry、推送自定义镜像。
早期 Docker 使用简单但分散的命令(如 docker ps、docker rm)。随着功能扩展,CLI 变得混乱。为此,Docker 引入了 基于资源对象的命令结构,使接口更清晰、可预测。
建议:新项目统一使用
docker <object> <command>格式,提升可读性与一致性。
作用:基于镜像创建并启动新容器。若本地无镜像,自动从 Registry 拉取。
# 基础用法
docker container run nginx
# 指定容器名称
docker container run --name my-nginx nginx
# 后台运行 + 端口映射(主机:容器)
docker container run -d -p 8080:80 --name web nginx说明:
-d表示 detached(后台运行),-p 8080:80将主机 8080 端口映射到容器 80 端口。
作用:从 Docker Hub 或其他 Registry 下载镜像。
# 拉取最新版 Redis
docker pull redis
# 拉取指定版本
docker pull redis:7.0-alpine默认拉取
latest标签,生产环境建议显式指定版本以避免意外升级。
作用:列出容器状态。
# 仅显示运行中的容器(默认)
docker container ls
# 显示所有容器(包括已停止的)
docker container ls -a
# 仅显示容器 ID
docker container ls -q
# 显示最近创建的容器
docker container ls -l# 停止单个容器
docker container stop my-nginx
# 启动已停止的容器
docker container start my-nginx
# 重启容器(常用于配置重载)
docker container restart my-nginx
# 批量停止多个容器
docker stop container1 container2 container3容器停止后数据仍保留(除非删除),可随时重新启动。
前提:容器必须处于停止状态。
# 删除单个容器
docker container rm my-nginx
# 强制删除(即使正在运行)
docker container rm -f my-nginx
# 删除时同时移除关联的匿名卷
docker container rm -v my-nginx快捷技巧:一键清理所有已停止容器
docker container prune
# 列出本地所有镜像
docker image ls
# 删除无用镜像(未被任何容器引用)
docker image rm <image_id>
# 删除所有悬空镜像(dangling)
docker image prune
# 构建镜像(基于当前目录的 Dockerfile)
docker build -t my-app:v1 .
# 推送镜像到 Docker Hub
docker push username/my-app:v1构建说明:
-t指定镜像名和标签,.表示构建上下文为当前目录。
作用:进入或在容器内运行临时命令(不重启容器)。
# 进入容器 Bash(交互式)
docker exec -it my-nginx /bin/bash
# 后台执行命令(如查看日志)
docker exec -d my-nginx touch /tmp/debug.log
# 设置环境变量
docker exec -e ENV=prod my-nginx printenv注意:
exec启动的进程不属于容器主进程,容器重启后不会自动恢复。
作用:获取容器或镜像的完整配置信息(JSON 格式)。
# 查看容器 IP、挂载点、环境变量等
docker inspect my-nginx
# 仅提取 IP 地址(结合 jq)
docker inspect my-nginx | jq -r '.[0].NetworkSettings.IPAddress'调试利器:排查网络、存储、安全策略问题必备。
作用:一键释放磁盘空间,删除所有未使用的 Docker 对象。
# 默认清理:
# - 所有已停止容器
# - 所有悬空镜像(虚悬镜像)
# - 所有未使用网络
# - 所有构建缓存
docker system prune
# 彻底清理(包括未被使用的镜像)
docker system prune -a警告:此操作不可逆,请确认无重要数据后再执行。
注意:
docker commit虽方便,但不推荐用于生产,应优先使用Dockerfile实现可重复构建。
docker image ls # 列出镜像
docker pull nginx # 拉取镜像
docker build -t app . # 构建镜像
docker push user/app # 推送镜像
docker image rm nginx # 删除镜像docker run -d --name web -p 8080:80 nginx # 启动
docker ps -a # 查看
docker exec -it web /bin/sh # 进入
docker stop web # 停止
docker start web # 启动
docker restart web # 重启
docker rm web # 删除docker system prune # 清理无用资源
docker container prune # 仅清理容器
docker image prune # 仅清理镜像命令风格:优先使用 docker <object> <verb>(如 docker container run);
容器 ≠ 虚拟机:轻量、秒级启停,适合微服务;
数据持久化:务必使用 Volumes,避免 docker commit;
版本控制:镜像必须打标签(tag),禁用 latest 用于生产;
安全实践:定期 prune 清理,减少攻击面与磁盘占用。
为什么 docker run 后容器退出了?如何让容器长期运行?
docker exec 和 docker attach 有何区别?何时使用哪一个?
在 CI/CD 流水线中,如何安全地使用 docker login 而不泄露密码?
📘 延伸阅读: