4、Docker常用命令:镜像拉取、容器运行、查看状态、停止删除等基础操作

好,咱们正式开始动手了。前面聊了那么多概念,说白了都是铺垫。这一节,我带你亲手敲几个命令,把Docker用起来。

你想想看,学Docker最怕什么?就是命令记不住,敲完不知道发生了什么。别担心,我刚开始也这样。咱们就挑最常用的几个,练熟了再说。

4.1 镜像拉取:从仓库里拿东西

Docker镜像,你可以理解成一个“压缩好的操作系统+软件包”。我们要用某个环境,第一步就是把它拉下来。

命令很简单:

docker pull 镜像名:标签

比如,我想拉一个Ubuntu 22.04的镜像:

docker pull ubuntu:22.04

这里有个小细节。标签(tag)不写的话,默认拉取 latest。我个人习惯,生产环境一定指定版本号。为什么?

我记得有一次,项目里用了 latest,结果第二天同事拉下来的是新版本,依赖全炸了。嗯,从那以后,我再也不敢偷懒了。

小技巧: 拉取前可以先搜一下有哪些版本。命令是 docker search 镜像名,不过现在更推荐去 Docker Hub 网页上看,信息更全。

4.2 容器运行:让镜像活起来

镜像拉下来了,怎么用?运行它!

最基础的运行命令:

docker run 镜像名

但这样跑完,容器就退出了。为什么?因为容器里的主进程结束了。我们通常需要加几个参数:

docker run -it --name my_ubuntu ubuntu:22.04 /bin/bash

拆开解释一下:

  • -i:交互模式,保持输入流打开
  • -t:分配一个伪终端,让你能敲命令
  • --name:给容器起个名字,方便管理
  • /bin/bash:容器启动后执行的命令

你敲完上面那条命令,就会直接进入Ubuntu容器的终端。是不是很神奇?

重点: docker run 每次都会创建一个新容器。如果只是想启动已有的容器,用 docker start

4.3 查看状态:看看家里都有啥

容器跑起来了,怎么看?

查看正在运行的容器:

docker ps

查看所有容器(包括已停止的):

docker ps -a

输出大概长这样:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 ubuntu:22.04 "/bin/bash" 2 minutes ago Up 2 minutes my_ubuntu

你看,容器ID、镜像、创建时间、状态、名字,一目了然。我个人习惯用 docker ps -a 先扫一眼,看看哪些容器是“僵尸”状态,该清理了。

4.4 停止与删除:该收手时就收手

容器用完了,怎么关?

停止一个容器:

docker stop 容器名或ID

比如:

docker stop my_ubuntu

容器停止后,它还在磁盘上。想彻底删除:

docker rm 容器名或ID

注意,删除前必须先停止容器,否则会报错。当然,你也可以强制删除:

docker rm -f 容器名或ID
警告: 强制删除正在运行的容器,数据会丢失。我曾经在测试环境这么干过,结果把同事的调试数据一起删了……嗯,后来被骂了一顿。

镜像也是一样,不用了可以删:

docker rmi 镜像名:标签

比如:

docker rmi ubuntu:22.04

4.5 常用组合拳:一条命令搞定

实际工作中,我们经常需要“先删旧的,再跑新的”。我习惯这样写:

docker stop my_container && docker rm my_container && docker run -d --name my_container nginx:latest

这里用了 &&,前一条成功才执行下一条。还有个 -d 参数,表示后台运行(detached模式)。

你想想看,如果每次都要手动停、删、跑,多麻烦。这一条命令,省了多少事。

4.6 避坑指南:我踩过的几个坑

  • 镜像拉不下来? 多半是网络问题。国内用户建议配置镜像加速器,比如阿里云、中科大的。我一般用 /etc/docker/daemon.json 配置。
  • 容器一跑就退出? 检查一下主进程是不是前台进程。比如Nginx,不加 daemon off 就会秒退。
  • 删不掉容器? 看看是不是有依赖,或者容器还在运行。用 docker ps -a 确认状态。

好了,这一节的内容就这些。命令不多,但都是吃饭的家伙。你找个空闲时间,打开终端,把每个命令敲一遍。相信我,敲完一遍,你就记住了。