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 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 永远是你最可靠的搭档。