Docker入门(1)


云计算的三个分层:基础设施(infrastructure)、平台(platform)和软件(software)
docker

Infrastructure-as-a-Service(IaaS),Platform-as-a-Service(PaaS),Software-as-a-Service(SaaS)。
ubuntu

Docker设计哲学(模型):集装箱运输货物,Docker 运输软件
网络

Docker设想是交付运行环境如同海运,OS如同一个货轮,每个在OS基础上的软件都如同一个集装箱,用户能够经过标准化手段自由组装运行环境,同时集装箱的内容能够由用户自定义,也能够由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只须要选择合适的积木组合,而且在最顶端署上本身的名字(最后个标准化组件是用户的app)。这也就是基于docker的PaaS产品的原型。容器环境与所在的 Host 环境是隔离的,就像虚拟机同样,但更快更简单。
架构

Docker采用 C/S架构 Docker daemon 做为服务端接受来自客户的请求,并处理这些请求(建立、运行、分发容器)。 客户端和服务端既能够运行在一个机器上,也可经过 socket 或者RESTful API 来进行通讯。
app



Docker旨在用于弹性计算。每一个Docker实例的运营生命周期有限,实例数量根据需求增减。在一个管理适度的系统中,这些实例生而平等,再也不须要时便各自消亡了dom

Docker核心技术:socket

Linux Namespace

LXC所实现的隔离性主要是来自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace将container的进程, 网络, 消息, 文件系统和hostname 隔离开。
工具

  • pid namespace

用户的进程是lxc-start进程的子进程, 不一样用户的进程就是经过pidnamespace隔离开的,且不一样 namespace 中能够有相同PID。namespace容许嵌套,父namespace能够影响子namespace的进程,因此子namespace的进程能够在父namespace中看到,可是具备不一样的pid云计算

  • net namespace
网络隔离是经过netnamespace实现的,每一个net namespace有独立的 network devices, IP addresses, IP routing tables, /proc/net 目录。这样每一个container的网络就能隔离开来。LXC在此基础上有5种网络类型,docker默认采用veth的方式将container中的虚拟网卡同host上的一个docker bridge链接在一块儿。
  • ipc namespace
container 的进程间交互实际上仍是host上具备相同pid namespace中的进程间交互,所以须要在IPC资源申请时加入namespace信息 - 每一个IPC资源有一个惟一的 32bit ID
  • mnt namespace
相似chroot,将一个进程放到一个特定的目录执行。mnt namespace容许不一样namespace的进程看到的文件结构不一样,这样每一个 namespace 中的进程所看到的文件目录就被隔离开了。
  • uts namespace
UTS(“UNIX Time-sharing System”) namespace容许每一个container拥有独立的hostname和domain name, 使其在网络上能够被视做一个独立的节点而非Host上的一个进程
  • user namespace
每一个container能够有不一样的 user 和 group id, 也就是说能够以container内部的用户在container内部执行程序而非Host上的用户。

Control Groups

不一样namespace之间资源仍是相互竞争的,仍然须要相似ulimit来管理每一个container所能使用的资源 - LXC 采用的是cgroups控制资源。cgroups 实现了对资源的配额和度量。 cgroups 的使用很是简单,提供相似文件的接口,在 /cgroup目录下新建一个文件夹便可新建一个group,在此文件夹中新建task文件,并将pid写入该文件,便可实现对该进程的资源控制。spa

AUFS

aufs全称是advanced multi-layered unification filesystem,主要功能是把多个文件夹的内容合并到一块儿,提供一个统一的视图。在以VM为基础的虚拟化手段中,有image和snapshot能够用于VM的复制、重建以及移动的功能。想要经过container来实现快速的大规模部署和更新, 这些功能不可或缺。Docker 正是利用AUFS来实现对container的快速更新


Docker安装:官网下载最新的docker离线安装包,并安装

https://apt.dockerproject.org/repo/pool/main/d/docker-engine/

http://archive.ubuntu.com/ubuntu/pool/main/libt/libtool/

dpkg -i *.deb


缺乏Package:

apt-get install libsystemd-journal0


Docker有仓库Repositories、镜像Images和容器Container三大核心,三者能够互相转化

  • Docker,平台工具、守护进程
  • Image,镜像,包括应用及系统的只读数据包
  • Container,容器,虚拟机的运行实例
  • Registry,仓库登记,管理镜像文件,
  • Docker hub,Docker官方公有仓库


相关文章
相关标签/搜索