第三章主要讲解容器和Docker,接下来先主要讲解容器的基础知识。

一、容器

    Container(容器)是一种轻量级的虚拟化技术,它不需要模拟硬件创建虚拟机。在Linux系统里面,使用到Linux kernel的cgroups,namespace(ipc,network, user,pid,mount),capability等用于隔离运行环境和资源限制的技术,我们称之为容器。容器技术早就出现。例如Solaris Zones 和 BSD jails 就是非 Linux 操作系统上的容器,而用于 Linux 的容器技术也有很多如 Linux-Vserver、OpenVZ 和 FreeVPS。虽然这些技术都已经成熟,但是这些解决方案还没有将它们的容器支持集成到主流 Linux 内核。总的来说,容器不等同于Docker,容器更不是虚拟机。

    Docker基于Linux kernel的CGroups,Namespace,UnionFileSystem等技术封装成一种自定义的容器格式,用于提供一整套虚拟运行环境。

二、Docker

2.1 Docker引擎

    Docker提供了一个打包和运行应用的隔离环境,称之为容器,Docker的隔离和安全特性允许你在一个主机同时运行多个容器,而且它并不像虚拟机那样重量级,容器都是基于宿主机的内核运行的,它是轻量的,不管你运行的是ubuntu, debian还是其他Linux系统,用的内核都是宿主机内核。Docker提供了工具和平台来管理容器,而Docker Engine则是一个提供了大部分功能组件的CS架构的应用,如架构图所示,Docker Engine负责管理镜像,容器,网络以及数据卷等。

2.2 Docker架构

    Docker更详细的架构如图所示,采用CS架构,client通过RESTFUL API发送docker命令到docker daemon进程,docker daemon进程执行镜像编译,容器启停以及分发,数据卷管理等,一个client可以与多个docker daemon通信。

  1. Docker Daemon:Docker后台进程,用于管理镜像,容器以及数据卷。
  2. Docker Client:用于与Docker Daemon交互。
  3. Docker Registry:用于存储Docker镜像,类似github,公共的Registry有Docker Hub和Docker Cloud。
  4. Images:镜像是用于创建容器的一种只读模板。镜像通常基于一个基础镜像,在此基础上安装额外的软件。比如你的nginx镜像可能基于debian然后安装nginx并添加配置,你可以从Docker Hub上拉取已有的镜像或者自己通过Dockerfile来编译一个镜像。
  5. Containers:容器是镜像的一个可运行示例,我们可通过Docker client或者API来创建,启停或者删除容器。默认情况下,容器与宿主机以及其他容器已经隔离,当然你可以控制隔离容器的网络或者存储的方式。
  6. Services:服务是docker swarm引入的概念,可以用于在多宿主机之间伸缩容器数目,支持负载均衡已经服务路由功能。

2.3 Docker执行流程

    通过下面命令运行一个debian容器,attach到一个本机的命令行并运行/bin/bash。

docker run -i -t debian /bin/bash

这个命令背后都做了什么?

1.如果本机没有debian镜像,则会从你配置的Registry里面拉取一个debian的latest版本的镜像,跟你运行了docker pull debian效果一样。

2.创建容器。跟运行docker create一样。

3.给容器分配一个读写文件系统作为该容器的final layer,容器可以在它的文件系统创建和修改文件。

4.Docker为容器创建了一套网络接口,给容器分配一个ip。默认情况下,容器可以通过默认网络连通到外部网络。

5.Docker启动容器并执行/bin/bash。因为启动时指定了-i -t参数,容器是以交互模式运行且attach到本地终端,我们可以在终端上输入命令并看到输出。

6.运行exit可以退出容器,但是此时容器并没有被删除,我们可以再次运行它或者删除它。

2.4 Docker的应用场景

  1. Web 应用的自动化打包和发布。
  2. 自动化测试和持续集成、发布。
  3. 在服务型环境中部署和调整数据库或其他的后台应用。
  4. 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

相关链接

Docker 官网:http://www.docker.com

Github Docker 源码:https://github.com/docker/docker

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐