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 本章知识体系总览

为了让你更直观地理解这些命令的层级关系,我整理了一张结构图。你可以把它当作日后操作时的“地图”。

Docker 基本命令知识体系 Docker CLI 镜像管理 (Image) docker pull docker push docker images docker rmi / image prune 容器生命周期 (Container) docker run docker stop docker kill docker rm docker start 监控与调试 (Monitor) docker logs docker stats docker top docker exec 核心思路:镜像(Image)是模板,容器(Container)是实例,监控(Monitor)是保障。 掌握这三块,日常 Docker 操作基本够用了。

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