源本科技 | 码上会

Docker 常用命令

2025/12/24
140
0

学习目标

通过本课件,你将掌握:

  1. Docker 新旧命令体系的区别,理解为何推荐使用对象化命令(如 docker container run);

  2. 9 大核心命令的用法与场景:从 runpullexecinspect

  3. 镜像与容器全生命周期管理:构建、运行、调试、清理;

  4. 高级操作技巧:端口映射、环境变量设置、批量操作与系统清理;

  5. 安全与协作基础:登录 Registry、推送自定义镜像。


Docker 命令演进

早期 Docker 使用简单但分散的命令(如 docker psdocker rm)。随着功能扩展,CLI 变得混乱。为此,Docker 引入了 基于资源对象的命令结构,使接口更清晰、可预测。

旧命令(兼容保留)

新命令(推荐使用)

功能说明

docker ps

docker container ls

列出容器

docker run

docker container run

创建并启动新容器

docker rm

docker container rm

删除容器

docker images

docker image ls

列出镜像

docker rmi

docker image rm

删除镜像

建议:新项目统一使用 docker <object> <command> 格式,提升可读性与一致性。


核心命令详解

1. 启动容器

作用:基于镜像创建并启动新容器。若本地无镜像,自动从 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 端口。


2. 拉取镜像

作用:从 Docker Hub 或其他 Registry 下载镜像。

# 拉取最新版 Redis
docker pull redis

# 拉取指定版本
docker pull redis:7.0-alpine

默认拉取 latest 标签,生产环境建议显式指定版本以避免意外升级。


3. 查看容器

作用:列出容器状态。

# 仅显示运行中的容器(默认)
docker container ls

# 显示所有容器(包括已停止的)
docker container ls -a

# 仅显示容器 ID
docker container ls -q

# 显示最近创建的容器
docker container ls -l

4. 控制容器生命周期

# 停止单个容器
docker container stop my-nginx

# 启动已停止的容器
docker container start my-nginx

# 重启容器(常用于配置重载)
docker container restart my-nginx

# 批量停止多个容器
docker stop container1 container2 container3

容器停止后数据仍保留(除非删除),可随时重新启动。


5. 删除容器

前提:容器必须处于停止状态

# 删除单个容器
docker container rm my-nginx

# 强制删除(即使正在运行)
docker container rm -f my-nginx

# 删除时同时移除关联的匿名卷
docker container rm -v my-nginx

快捷技巧:一键清理所有已停止容器

docker container prune

6. 镜像管理

# 列出本地所有镜像
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 指定镜像名和标签,. 表示构建上下文为当前目录。


7. 在容器中执行命令(交互式)

作用:进入或在容器内运行临时命令(不重启容器)。

# 进入容器 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 启动的进程不属于容器主进程,容器重启后不会自动恢复。


8. 查看详细元数据

作用:获取容器或镜像的完整配置信息(JSON 格式)。

# 查看容器 IP、挂载点、环境变量等
docker inspect my-nginx

# 仅提取 IP 地址(结合 jq)
docker inspect my-nginx | jq -r '.[0].NetworkSettings.IPAddress'

调试利器:排查网络、存储、安全策略问题必备。


9. 清理无用资源

作用:一键释放磁盘空间,删除所有未使用的 Docker 对象。

# 默认清理:
# - 所有已停止容器
# - 所有悬空镜像(虚悬镜像)
# - 所有未使用网络
# - 所有构建缓存
docker system prune

# 彻底清理(包括未被使用的镜像)
docker system prune -a

警告:此操作不可逆,请确认无重要数据后再执行。


高级命令补充

命令

用途

示例

docker login

登录 Docker Hub

docker login -u yourname

docker commit

将容器保存为新镜像

docker commit my-container new-image:v1

docker top

查看容器内运行的进程

docker top my-nginx

docker cp

在主机与容器间复制文件

docker cp ./app.py my-container:/app/

docker logs

查看容器日志

docker logs -f my-nginx

注意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 清理,减少攻击面与磁盘占用。


思考题

  1. 为什么 docker run 后容器退出了?如何让容器长期运行?

  2. docker execdocker attach 有何区别?何时使用哪一个?

  3. 在 CI/CD 流水线中,如何安全地使用 docker login 而不泄露密码?


📘 延伸阅读