3、Docker基本命令:镜像拉取、容器运行、查看、停止、删除;帮助文档使用

说实话,刚开始接触 Docker 那会儿,我也被一堆命令搞懵过。

明明是同一个软件,拉取、运行、查看、停止、删除……命令还各不相同。

但用顺手之后你会发现,Docker 的命令设计其实很有规律。

这一节,咱们就把最常用的那几个命令彻底搞明白。

3.1 帮助文档——最好的老师

我个人的习惯是,从不死记硬背命令。

Docker 本身就自带了非常详细的帮助文档,随时可以查。

docker --help

这条命令会列出所有可用的 Docker 命令。

如果你想看某个具体命令的用法,在后面加上 --help 就行:

docker pull --help
docker run --help
docker ps --help

你想想看,这相当于随身带着一本官方手册。

遇到不确定的选项,敲一下 --help,比翻网页快多了。

一个小技巧: 我经常用 docker COMMAND --help 2>&1 | less 来分页查看。 这样不用滚屏,一目了然。

为什么强调这个?

因为 Docker 的版本迭代很快,网上搜到的教程可能已经过时了。

但 --help 永远是你当前版本最准确的说明书。

3.2 镜像拉取——从仓库把“原材料”搬下来

Docker 镜像就像做饭需要的食材。

你得先把食材买回来,才能开始做菜。

拉取镜像,用的就是 docker pull 命令。

docker pull nginx:latest
docker pull ubuntu:22.04
docker pull python:3.11-slim

格式很简单:docker pull 仓库名:标签

标签(tag)用来指定版本。不写标签的话,默认拉取 latest。

重要: 我踩过坑——在生产环境千万不要用 latest 标签! latest 是变动的,今天用着好好的,明天可能就变成了不同版本。 一定要锁定具体版本号,比如 nginx:1.25.3。

拉取过程中的输出信息也很关键:

Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
...
Digest: sha256:2f6e5b6e9a5d7c8b9a1c3d4e5f6a7b8c9d0e1f2
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

看到 Status: Downloaded newer image,说明拉取成功。

那个 Digest 是镜像的哈希值,用来唯一标识这个镜像的内容。

做版本锁定时,我们会用到它。后面章节会详细讲。

3.3 容器运行——把镜像变成正在运行的进程

镜像拉下来之后,用 docker run 把它跑起来,变成一个容器。

这是最常用,也是最容易出错的命令。

docker run nginx:latest

直接这样跑,你会发现终端被卡住了,什么也干不了。

这是因为 Nginx 在前台运行,而且你没有用 -d 参数让它后台运行。

我刚开始用的时候,经常忘了加 -d,然后被迫再开一个终端窗口。

docker run -d --name my-nginx -p 8080:80 nginx:latest

解释一下这几个常用的参数:

参数 作用 示例
-d 后台运行(detach) docker run -d nginx
--name 指定容器名称 docker run --name web nginx
-p 端口映射(主机:容器) docker run -p 8080:80 nginx
-it 交互式运行(常用于调试) docker run -it ubuntu bash
--rm 容器退出后自动删除 docker run --rm nginx

-p 8080:80 的意思是:把主机的 8080 端口映射到容器的 80 端口。

这样你访问 http://localhost:8080,就能看到 Nginx 的欢迎页了。

核心概念:

镜像(Image)是只读的模板,容器(Container)是可写的运行实例。

一个镜像可以启动多个容器,每个容器之间相互隔离。

3.4 查看容器——看看你的“孩子”们都在干嘛

运行了容器之后,总得看看它们的状态吧?

用 docker ps 查看正在运行的容器:

docker ps

输出类似这样:

CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                  NAMES
a1b2c3d4e5f6   nginx:latest   "/docker-entrypoint.…"   5 minutes ago   Up 5 minutes   0.0.0.0:8080->80/tcp   my-nginx

可以看到容器 ID、镜像、运行状态、端口映射、名称等关键信息。

如果你想看所有容器(包括已经停止的),加上 -a:

docker ps -a

曾经有一次,我发现容器莫名消失了。

用 docker ps -a 才看到,原来是因为进程崩溃,容器自动退出了。

另外,docker ps -q 只显示容器 ID,配合其他命令批量操作时很好用:

docker stop $(docker ps -q)   # 停止所有运行中的容器

3.5 停止与删除——用完记得收拾干净

停止容器很简单:

docker stop my-nginx
docker stop a1b2c3d4e5f6   # 也可以用容器 ID

停止之后,容器还在磁盘上,只是进程没了。

彻底删除容器:

docker rm my-nginx

如果你想强制删除正在运行的容器(比如卡死了),加 -f:

docker rm -f my-nginx

删除镜像用 docker rmi:

docker rmi nginx:latest
注意: 删除镜像之前,必须确保没有容器在使用这个镜像。 否则会报错:Error response from daemon: conflict: unable to remove repository reference

我一般先 docker ps -a 检查一下,确认无误再删。

3.6 从理论到实战:一张图看懂整体流程

上面的命令看似零散,其实有一条很清晰的脉络。

我画了一张图,把镜像拉取、容器运行、查看、停止、删除的关系串起来:

Docker 基本命令操作流程 docker pull Docker Hub 本地镜像 docker run -d --name my-app -p 8080:80 image:tag 创建并启动容器 使用镜像 docker ps (查看运行中) / docker ps -a (查看全部) docker stop docker rm docker rmi 提示:先拉取镜像(docker pull),再运行容器(docker run),最后记得清理(docker stop / rm / rmi)

看懂这张图,Docker 基础命令就算入门了。

我再补充几个日常用的命令:

docker logs my-nginx          # 查看容器日志
docker exec -it my-nginx bash # 进入容器内部
docker stats                  # 查看所有容器的 CPU/内存使用

3.7 总结一下

这一节讲的内容,说白了就是 Docker 的“吃饭、睡觉、打豆豆”。

  • docker pull——吃饭(拉取镜像)
  • docker run——干活(运行容器)
  • docker ps——看谁在上班(查看状态)
  • docker stop / rm——下班回家(停止并清理)
  • docker rmi——清库存(删除镜像)
  • docker --help——遇到问题翻手册

这些命令,你每天都会用到。

别着急一次全记住,用多了自然就熟了。

遇到不确定的,记得 --help 永远是你最可靠的搭档。