前言

上一篇较为详细地介绍了docker的构架和其中有关镜像方面的核心原理。在这一篇就大致介绍一下,docker中有关容器部分以及docker之间的网络构建与存储的机制。

docker 容器

下图是常用命令之间的联系
在这里插入图片描述

在我看来,这个容器就类似我们的一个软件。镜像类似与为这个软件配置好了软件正常运行的环境配置。当我们使用commit将改变之后的容器环境再次保存为镜像。
为了使得这个软件在容器中运行的时候像在一个独立的电脑中,该电脑中只有这一个软件,环境也是为了这个软件运行而配置的。这就需要其中一些机制来处理。实际中,容器在docker host 上就是一个进程

容器的常用命令

  1. create :创建容器
  2. run : 运行容器
  3. pause :暂停容器
  4. unpause:取消暂停继续运行容器
  5. stop:发送 sigterm 停止容器,本质是向该进程发送信号。如果一个容器有多个进程,想快速停止应该使用kill命令
  6. kill:发送sigkill 快速停止容器
  7. start:启动容器
  8. restart:重启容器。其作用是依次执行 stop和start 命令
  9. attach : attach 到容器启动进程的终端
  10. exec:在容器中启动新进程,通常使用 -it 参数
  11. logs:显示容器启动进程的控制台输出,用-f持续打印
  12. rm:从磁盘中删除容器。其一次可以指定多个容器。如果希望批量删除所有已经退出的容器,可以执行该命令:docker rm -v $(docker ps -ap -f status=exited)

容器运行

  1. 使用的是run命令
  2. 让容器长期运行:因为容器的生命周期依赖于启动时执行的命令,只要该命令不结束则容器就不会退出。因此就可以在run 命令后边执行一个长期运行的命令来保持容器的运行状态。如:docker run -d Ubuntu /bin/bash -c "while true ;do sleep 1;done"其中的 -d 参数是以后台方式启动容器
  3. 在运行之后,docker 会返回一串字符,它就是容器的长ID
  4. 通过docker ps可以查看容器(运行中的)。使用docker ps -a则会显示所有状态的容器。如下图在这里插入图片描述
    其中 第一列是容器的“短ID”,短ID是长ID的前12个字符。

指定容器的三种方式:

  • 短ID
  • 长ID
  • 容器名称。可通过 --name 为容器命名。重命名容器可执行docker rename

进入容器的方法

我们经常需要进到容器里去做一些工作,比如查看日志、调试、启动其他进程等。有两种方法进入容器:attach和exec

以下为使用两种方式的例子

在这里插入图片描述
在这里插入图片描述
attach 与exec主要区别如下

  1. attach 直接进入容器启动命令的终端,不会启动新的进程
  2. exec则是在容器中打开新的终端,并且可以启动新的进程。
  3. 如果想直接在终端中查看启动命令的输出,用attach;其他情况使用exec

实现容器的底层技术

cgroup和namespace 是最重要的两种技术。cgroup实现资源限额,namespace 实现资源隔离。

  1. cgroup全称Control Group。Linux操作系统通过cgroup可以设置进程使用CPU、内存和IO资源的限额。
  2. namespace。在每个容器中,我们都可以看到文件系统、网卡等资源,这些资源看上去是容器自己的。拿网卡来说,每个容器都会认为自己有一块独立的网卡,即使host上只有一块物理网卡。这种方式非常好,它使得容器更像一个独立的计算机。
      Linux实现这种方式的技术是namespace。namespace管理着host中全局唯一的资源,并可以让每个容器都觉得只有自己在使用它。换句话说,namespace实现了容器间资源的隔离。
      Linux使用了6种namespace,分别对应6种资源:Mount、UTS、IPC、PID、Network和User。如下图在这里插入图片描述

docker存储

  1. Docker为容器提供了两种存储资源:数据层和Data Volume。
  2. 数据层包括镜像层和容器层,由storage driver管理。
  3. Data Volume有两种类型:bind mount和docker managed volume。
  4. bind mount可实现容器与host之间、容器与容器之间共享数据。
  5. volume container是一种具有更好移植性的容器间数据共享方案,特别是data-packed volume container。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐