发展历程: 容器技术最先出如今FreeBSD上叫作 jail,将一个进程放入jail中运行,无论这个进程在其中发生怎样的错误都不会影响到系统上其余进程的运行 jail技术在Linux中的实现叫作vserver,vserver所实现的功能体现为chroot namespaces: 容器技术出现的主要目的是为了"资源隔离" 资源隔离包括: 名称 描述 内核版本 UTS 主机名和域名的隔离 2.6.19 Mount 文件系统的隔离 2.4.19 IPC 进程间通讯隔离 2.6.19 PID 进程编号隔离 2.6.24 User 用户空间隔离 3.8 Network 网络空间隔离 2.6.29 为了支持容器技术,Linux在内核中经过namespaces原生支持这6种资源隔离,而且直接经过系统调用对外进行输出 目前Linux上所谓的容器技术就是依靠namespaces技术实现的 cgroups 用于控制每一个namespace中的资源分配: blkio 块设备io cpu cpu cpuacct cpu资源使用报告 cpuset 多处理器平台上的cpu集合 devices 设备访问 freezer 挂起或恢复任务 memory 内存用量及报告 perf_event 对cgroup中的任务进行统一性能测试 net_cls cgroup中的任务建立的数据报文的类别标识符 LXC(LinuX Container): 有了namespaces和cgroups那么Linux已经拥有了实现容器技术的前提,这时若是想要使用容器技术能够经过写代码调用系统调用实现容器技术。 可是有多少用户能够写代码实现容器技术那? 因此LXC应运而生,他使用户能够经过一组工具完成容器的建立 lxc中有个命令叫作 lxc-create 用于根据模板建立容器,在模板中定义须要安装的容器系统发行版以及一系列的安装步骤 LXC的问题: 一、迁移困难 二、持久化困了 三、批量建立容器困难 Docker: Docker在必定程度上是LXC的加强版,早期的Docker使用LXC做为容器引擎,因此也能够说Docker是LXC的二次封装发行版 目前docker使用的容器引擎为runC,其是容器运行时标准的实现之一 Docker使用镜像的方式启动容器,解决了LXC所面临的问题 目前市面上所说的容器一般指Docker,其以成为事实上的工业标准 Docker与传统虚拟机的区别: 一、docker直接构建在Linux操做系统之上,其使用的内核为当前宿主机的内核;虚拟机通常构建在虚拟机管理软件之上,拥有独立的内核 二、因为docker直接使用宿主机内核因此其性能接近宿主机性能;虚拟机使用本身的内核,可是其内核也是虚拟出来的因此须要进行两级调度性能相对较差 三、docker使用内核的namespace进行用户空间隔离,虚拟机使用独立内核。虚拟机的隔离相对较好 四、docker相对虚拟机更加轻量,其余和部署更加方便快捷 五、每一个docker容器通常只运行一个进程,一个虚拟机一般运行多个进程 Docker术语: 镜像(Image) 只读模板,用于建立docker容器 容器(Container) 实例化的镜像,在只读层上增长了一层可写层,容器能够启动,中止,删除和修改每一个容器都是相互隔离的 仓库(Repository) 集中存放镜像的地方,仓库分为公开仓库(Public)和私有仓库(Private)两种形式 世界上最大的公开仓库是Docker Hub,国内的公开仓库Docker Pool等,相似于yum仓库 用户能够在本地网络内建立一个私有仓库 用户建立的镜像能够push到公有或者私有仓库,若是须要在另一台机器上使用这个镜像时候,只须要从仓库上pull下来就能够了 安装 docker (要求内核 3.10以上): ubuntu 16.04系统: 升级source列表并保证https和ca证书成功安装 sudo apt-get update sudo apt-get install apt-transport-https ca-certificates 增长新的GPG密钥 sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 新增或编辑source列表里的docker.list文件 sudo vim /etc/apt/sources.list.d/docker.list deb https://apt.dockerproject.org/repo ubuntu-xenial main #添加内容 安装linux-image-extra(额外的内核模块) sudo apt-get install linux-image-extra-$(uname -r) 安装docker sudo apt-get update sudo apt-get install docker-engine sudo service docker start centos 7系统: https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ #docker RPM包下载路径 yum -y localinstall docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://8ad7943c.m.daocloud.io #进行镜像下载加速 systemctl start docker #启动docker systemctl status docker #查看docker状态