Docker容器操作
Docker容器是镜像的运行时实例。所谓容器是一种独立的、轻量级的和便携的运行环境,它可以在任何地方运行,无论是本地计算机、数据中心还是云环境。这篇笔记我们学习如何创建、启动、停止和删除Docker容器。
Docker容器生命周期
Docker围绕镜像和容器有一系列的管理命令,网上有这样一张图总结的非常好。

创建并启动容器
前一篇笔记已经介绍过docker run的用法了,这里我们再复习一下。
docker run [命令和参数] <镜像名> [启动命令]
常用参数:
-it:分别是启动终端并对接到容器的标准输入上,和保持标准输入打开,这两个选项通常一起出现-d:后台运行,服务程序一般都是指定这种形式运行-p:端口映射,格式例如-p 80:8080,表示将宿主机的80端口映射到容器的8080端口--name:指定容器的名字,格式例如--name=redis7,如果未起名,Docker会自动生成一个名字-e:用于向容器传递环境变量,例如-e MYSQL_ROOT_PASSWORD=root,则会向容器中添加MYSQL_ROOT_PASSWORD环境变量值为root
如果启动命令不存在,就使用Dockerfile中CMD指定的默认命令。
运行docker run后,Docker为会为我们执行以下操作:
- 检查指定镜像本地是否存在,不存在则从Docker仓库下载
- 基于镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主机的网桥接口中桥接一个到容器中,并给容器分配一个IP
- 执行用户指定的程序,如果不存在执行默认程序,程序执行完毕,容器退出
查看所有容器状态
运行以下命令可以查看当前运行中的容器状态。
docker ps
如果希望查看所有容器状态(包括已停止的),可以使用如下命令。
docker ps -a
-a:表示查看所有已运行和未运行的容器
例子输出如下。

CONTAINER ID是容器的ID,出于方便考虑,我们可以取其特有的前几位作为操作容器的ID参数,比如上面我们直接使用docker start 2e0就能操作这个容器,而不用把2e07b8fccd05全部输进去STATUS是容器的运行状态,如果未运行会显示Exited
注意:NAME列是容器的名字,如果创建容器时没有指定,Docker会自动生成一个很奇葩的名字。如果我们操作容器都是通过容器ID,名字这一列其实可以忽略。
查看一个容器的详细配置信息
docker inspect <容器ID>
输出结果是一个JSON,该命令经常用于查看容器数据卷、网络配置等信息。
进入容器Shell
如果是容器镜像是基于Linux构建的并具备Shell程序,我们可以通过以下命令进入其中。
docker exec -it <容器ID> /bin/sh
该命令会在Docker容器中再启动一个额外的Shell前台进程,供我们对容器进行查看、修改等操作。
启动已经终止的容器
docker start <容器ID>
容器ID可以使用docker ps -a查看,取其特有的前几位即可。注意,docker start和docker run不同,容器的运行参数在第一次docker run时已经指定了,包括诸如后台运行-d、端口映射-p 80:8080等,这些参数在docker start时就不能再重新指定。
停止容器
执行以下命令停止运行中的容器。
docker stop <容器ID>
重启容器
执行以下命令重启容器。
docker restart <容器ID>
查看后台运行容器的输出
前面我们知道可以使用docker run -d指定容器后台运行,此时如果我们想要查看容器打印到标准输出的内容,可以使用docker logs命令。
docker logs <容器ID>
例子输出如下。

删除容器
执行以下命令删除容器。
docker rm <容器ID>
注意:
- 运行中的容器是无法删除的
- 删除镜像是
docker rmi,删除容器是docker rm,不要搞混了
查看容器运行的资源占用
该功能类似Linux操作系统下的top工具,它会显示所有Docker容器的内存占用、CPU占用等情况。
docker stats
例子输出如下。
