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为会为我们执行以下操作:

  1. 检查指定镜像本地是否存在,不存在则从Docker仓库下载
  2. 基于镜像创建并启动一个容器
  3. 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  4. 从宿主机的网桥接口中桥接一个到容器中,并给容器分配一个IP
  5. 执行用户指定的程序,如果不存在执行默认程序,程序执行完毕,容器退出

查看所有容器状态

运行以下命令可以查看当前运行中的容器状态。

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 startdocker 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>

注意:

  1. 运行中的容器是无法删除的
  2. 删除镜像是docker rmi,删除容器是docker rm,不要搞混了

查看容器运行的资源占用

该功能类似Linux操作系统下的top工具,它会显示所有Docker容器的内存占用、CPU占用等情况。

docker stats

例子输出如下。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。