发展历程:
容器技术最早出现在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的问题:
1、迁移困难
2、持久化困了
3、批量创建容器困难
Docker:
Docker在一定程度上是LXC的增强版,早期的Docker使用LXC作为容器引擎,所以也可以说Docker是LXC的二次封装发行版
目前docker使用的容器引擎为runC,其是容器运行时标准的实现之一
Docker使用镜像的方式启动容器,解决了LXC所面临的问题
目前市面上所说的容器通常指Docker,其以成为事实上的工业标准
Docker与传统虚拟机的区别:
1、docker直接构建在Linux操作系统之上,其使用的内核为当前宿主机的内核;虚拟机一般构建在虚拟机管理软件之上,拥有独立的内核
2、由于docker直接使用宿主机内核所以其性能接近宿主机性能;虚拟机使用自己的内核,但是其内核也是虚拟出来的所以需要进行两级调度性能相对较差
3、docker使用内核的namespace进行用户空间隔离,虚拟机使用独立内核。虚拟机的隔离相对较好
4、docker相对虚拟机更加轻量,其他和部署更加方便快捷
5、每个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状态
原文地址:http://blog.51cto.com/hongchen99/2299547