4. Docker 基本命令:镜像拉取与推送,容器运行与生命周期管理
嗯,Docker CLI 是你和 Docker 守护进程对话的唯一方式。说白了,玩转 Docker,根基就在这些基本命令上。我记得刚带团队时,发现不少人连 docker logs 和 docker stats 都没用过,还在用最原始的方式排查问题。这一章,我们就把这些日常用得最多的命令梳理一遍。
4.1 镜像管理:拉取与推送
镜像是容器的基础。你想想看,没有镜像,容器就是个空壳子。我们最常用的操作就是拉取和推送。
拉取镜像
我个人习惯在拉取时总是显式指定标签,而不是直接拉取 latest。为什么?因为 latest 是个移动标签,你今天拉的和下周拉的可能是不同版本。这在可复现性部署里是致命伤。
# 拉取指定版本(推荐)
docker pull nginx:1.25-alpine
# 拉取 latest(不推荐用于生产)
docker pull nginx
推送镜像
推送前,记得先登录镜像仓库。我在项目中遇到过好几次,同事忘了 docker login,结果推了半天发现认证失败,挺尴尬的。
# 登录 Docker Hub 或私有仓库
docker login
# 给镜像打标签(Tag)
docker tag my-app:latest my-registry.io/my-app:1.0.0
# 推送镜像到远程仓库
docker push my-registry.io/my-app:1.0.0
docker image prune 可以一键清理所有未使用的镜像(dangling images),帮你节省磁盘空间。
4.2 容器生命周期:运行、停止与删除
容器的状态变化其实很简单。你只需要记住几个核心动作:运行 -> 停止 -> 删除。
运行容器
docker run 是一条非常复合的命令。它集成了 docker create 和 docker start 两个步骤。
# 前台运行(不常用)
docker run nginx:1.25-alpine
# 后台运行(-d 表示 detached)
docker run -d --name my-nginx nginx:1.25-alpine
# 端口映射(-p 宿主机端口:容器端口)
docker run -d -p 8080:80 --name my-nginx nginx:1.25-alpine
停止与启动
# 优雅停止(发送 SIGTERM,等待进程退出)
docker stop my-nginx
# 强制停止(发送 SIGKILL,直接干掉)
docker kill my-nginx
# 重新启动已停止的容器
docker start my-nginx
# 重新启动运行中的容器(先 stop 再 start)
docker restart my-nginx
docker kill 不会给进程任何清理资源的机会。在生产环境里,能用 docker stop 就别用 kill,除非你确定它卡死了。
删除容器
我曾经在生产线上遇到过磁盘写满的情况,查了半天才发现是没清理已停止的容器日志和容器本身。
# 删除指定的已停止容器
docker rm my-nginx
# 强制删除一个正在运行的容器
docker rm -f my-nginx
# 清理所有已停止的容器
docker container prune
# 查看所有容器(包括已停止的)
docker ps -a
4.3 日志查看与资源监控
容器跑起来了,怎么知道它在干嘛?这时候就需要日志和监控工具了。
查看日志
docker logs 这几乎是我排查问题的肌肉记忆了。不管容器出了什么幺蛾子,第一件事就是看日志。
# 查看所有日志
docker logs my-nginx
# 实时跟踪日志(类似 tail -f)
docker logs -f my-nginx
# 查看最近的 100 行日志
docker logs --tail 100 my-nginx
# 带上时间戳
docker logs --tail 100 -t my-nginx
grep 使用,比如 docker logs my-app 2>&1 | grep "ERROR"。
资源监控
docker stats 是实时查看容器资源占用的利器。CPU、内存、网络 IO、磁盘 IO,一目了然。
# 查看所有运行中容器的实时资源占用
docker stats
# 查看特定容器
docker stats my-nginx
输出示例:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a1b2c3d4e5f6 my-nginx 0.01% 7.855MiB / 15.63GiB 0.05% 1.38kB / 0B 0B / 0B 3
嗯,这里要注意,docker stats 只能看到当前的快照。如果你想看历史趋势,建议搭配 docker stats --no-stream 采集数据点,或者直接用 cAdvisor 这样的专业工具。
4.4 本章知识体系总览
为了让你更直观地理解这些命令的层级关系,我整理了一张结构图。你可以把它当作日后操作时的“地图”。
4.5 常用命令速查表
最后,给你整理了一份速查表。遇到不确定的,回来翻翻就行。
| 分类 | 命令 | 作用 | 常用参数 |
|---|---|---|---|
| 镜像 | docker pull |
拉取镜像 | name:tag |
| 镜像 | docker push |
推送镜像 | registry/name:tag |
| 容器 | docker run |
创建并启动容器 | -d -p --name --restart |
| 容器 | docker stop |
优雅停止容器 | -t (等待超时) |
| 容器 | docker rm |
删除容器 | -f -v |
| 监控 | docker logs |
查看日志 | -f --tail --since |
| 监控 | docker stats |
实时资源监控 | --no-stream |