深色模式
Docker 运行与常用命令
概述
Docker 新手常见的混乱,不在于记不住命令,而在于没分清镜像和容器。镜像更像模板,容器则是镜像跑起来后的实例。很多命令看起来都叫 docker something,实际作用对象却完全不同。
这一篇只讲日常最常用的命令,不抄整份帮助输出。重点是建立一条完整的容器生命周期:拉镜像、启动容器、查看状态、进入容器、停止和删除容器。
先记住镜像和容器的关系
一个简单的判断方式是:
- 镜像是“可启动模板”
- 容器是“已经创建出来的运行实例”
所以:
docker images看的是镜像docker ps看的是容器docker rmi删的是镜像docker rm删的是容器
如果这层关系没分开,后面很多命令都会觉得像在拆盲盒。
从拉镜像开始
拉取镜像:
sh
docker pull nginx:1.27查看本地镜像:
sh
docker images这一步解决的是“本机有没有构建或拉取到可以运行的镜像”。很多容器启动失败前,镜像这一步其实就已经没走通。
docker run 是入口命令
docker run 会把“创建容器”和“启动容器”这两件事一起做掉。
例如启动一个 Nginx:
sh
docker run -d --name web -p 8080:80 nginx:1.27这里最常见的参数有:
-d:后台运行--name:给容器取名字-p 8080:80:把宿主机8080端口映射到容器内80端口
这个命令跑完以后,镜像还在本地,容器也已经启动。后面查日志、进容器、停止容器,都是围着这个容器继续操作。
用 docker ps 看容器状态
查看正在运行的容器:
sh
docker ps连停止的容器一起看:
sh
docker ps -a很多人执行完 docker run 就以为服务一定起来了,结果访问不到才开始慌。更稳的习惯是先看 docker ps,确认容器到底在不在、有没有秒退。
docker logs 是第一排查入口
容器启动后异常退出,第一反应通常应该是看日志:
sh
docker logs web持续跟日志:
sh
docker logs -f web比起一上来就进容器翻目录,docker logs 更适合先判断应用有没有正常启动、配置有没有读到、端口绑定是不是报错。
docker exec 用来进容器
进入正在运行的容器:
sh
docker exec -it web sh如果镜像里有 Bash,也可以用:
sh
docker exec -it web bash这一步适合做临时检查,比如:
- 看配置文件是否在预期位置
- 看环境变量是否存在
- 看应用进程是否真的跑起来
但也要记住,容器里的临时手改通常不会自动回到镜像里。排查可以在容器里做,真正修复仍要回到 Dockerfile 或 Compose 配置。
停止、启动、重启和删除
最常用的容器管理命令是这几组:
sh
docker stop web
docker start web
docker restart web
docker rm web这里有一个常见误解:docker stop 只是停掉容器,不会删除容器;docker rm 才是删除容器本身。
如果容器还在运行,通常要先停掉,再删除:
sh
docker stop web
docker rm web删除镜像也不是同一回事
删除镜像:
sh
docker rmi nginx:1.27如果某个镜像还被现有容器占用,删除时通常会被拦住。这也是 Docker 比较正常的一面,它不想让你顺手把脚下的地板也拆了。
docker inspect 用来看细节
容器或镜像的许多详细信息,最终都能在 docker inspect 里看到:
sh
docker inspect web它适合排查这类问题:
- 实际挂载了哪些卷
- 实际加入了哪个网络
- 实际环境变量是什么
- 实际端口映射是什么
平时不一定天天手敲,但一旦进入排查阶段,这个命令很有用。
一条够用的容器生命周期
把最常见的流程连起来,大概就是这样:
sh
docker pull nginx:1.27
docker run -d --name web -p 8080:80 nginx:1.27
docker ps
docker logs web
docker exec -it web sh
docker stop web
docker rm web能把这条链路走顺,Docker 日常使用已经过了最容易发懵的阶段。
