Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器,容器是一个运行时环境。

可以把容器看做一个简易版本的Linux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。

版本区分

分为社区版CE和企业版EE

社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。

Docker仓库从Docker1.13版本之后采用时间线的方式作为版本号。

社区版按照stable和edge两种方式发布,每个季度更新stable版本,如18.06,18.09;每个月份更新edge版本,如18.09,18.10

核心技术

  • cgroups => 限制容器的资源使用
  • namespace => 实现容器间的隔离
  • chroot => 文件系统的隔离

    速度理解

  1. docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源的虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源,引擎在CPU和内存利用率上docker将会在效率上有明显优势
  2. docker利用的是宿主机的内核,不需要Guest OS。因此当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核,

    后台模式

    Docker容器后台运行必须要有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(比如运行top、tail)就会自动退出,这个是docker的机制,例如针对nginx应用,默认其是后台启动的,就导致docker前台没有运行的应用,运行命令完毕后docker容器就会退出,最佳的解决方案是将要运行的程序以前台的形成运行。

    数据问题

    容器运行结束后,如果不通过commit指令生成新的镜像,使得数据作为镜像的一部分保存下来,当容器删除后,容器内产生的数据会丢失,可以通过数据卷解决。

    命令执行

    Docker不建议启动SSH,可以使用exec和attach指令进入

    镜像字段

    ljhan2/nginx:1.1.9

    ljhan2-命令空间[包名] nginx-镜像名称[类名] 1.1.0 -镜像版本[版本]

数据卷

  1. 英文表达: Volume
  2. 容器数据的持久化
  3. 容器和主机之间共享数据
  4. 实现宿主机和容器之间文件目录映射同步

    Dockerfile

    可以采用如下说法:

  5. 构建文件

  6. 描述文件
  7. 构建描述

    阶段分析

    从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段。
  • Dockerfile是软件的原材料 ==> 面向开发
  • Docker镜像是软件的交付品 ==>交付标准
  • Docker容器是软件的运行态 ==>部署运维

    三要素

    Docker三要素分布是
    镜像[Image]:环境的封装包含系统环境和应用环境
    仓库[Registry]: 存放镜像提供保存下载服务的,包括官方仓库[hub.docker.com]和私有仓库
    容器[Container]: 镜像的实例

    三剑客

    docker compose: 解决单主机模式下容器编排问题
    docker swarm: 解决多主机模式下容器编排和网络通信问题,目前已经内置在Docker中
    docker machine: 把容器变成独立的虚拟机,通过容器模拟虚拟机

    编排工具

  1. Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景。

    Compose是Fig的升级版,Fig已经不再维护。Compose向下兼容Fig,所有fig.yml只需要更名为docker-compose.yml即可被Compose使用。

  2. Mesos

    Apache[2013]

  3. Docker Swarm

    Docker自己[2016]

  4. Kubernetes谷歌

    [2014]