Linux容器技术和docker

发展历程:
容器技术最早出现在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

时间: 2024-10-10 08:30:29

Linux容器技术和docker的相关文章

Linux 容器技术史话:从 chroot 到未来

Linux 容器是一个在单一 Linux 主机上提供多个隔离的 Linux 环境的操作系统级虚拟技术.不像虚拟机(VM),容器并不需要运行专用的访客(guest)操作系统.容器们共享宿主机的(host)操作系统内核,并使用访客操作系统的系统库来提供所需的功能.由于不需要专用的操作系统,因此容器要比虚拟器启动快得多. Virtual Machines Vs Containers (图片来自: Docker Inc.) 转载于:http://www.itxuexiwang.com/a/liunxji

容器技术|Docker三剑客之docker-compose

三剑客简介 docker-machine docker技术是基于Linux内核的cgroup技术实现的,那么问题来了,在非Linux平台上是否就不能使用docker技术了呢?答案是可以的,不过显然需要借助虚拟机去模拟出Linux环境来. docker-machine就是docker公司官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术,甚至可以通过指定driver来定制虚拟机的实现原理(一般是virtualbox). docker-compose docker镜像在创建之后,

容器技术|Docker三剑客之docker-machine

docker-machine是什么? ocker-machine就是docker公司官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术,甚至可以通过指定driver来定制虚拟机的实现原理(一般是virtualbox). Docker 与 Docker Machine 的区别 Docker 是一个 Client-Server 架构的应用,Docker是大家对Docker Engine简称. Docker包括以下三个部分: 1.Docker daemon 2.一套与 Docker

Docker学习笔记(8-1)容器技术历史

学习目标: 历史上的容器 1982 chroot  进程和文件系统 2007 virtuozzo windows平台 2008 lxc          linux 2012 warden   linux  cloudfoundry 2013 docker    linux 容器技术与云计算 云计算的基础技术 资源隔离 cpu:cpu时间片.cpu核数 内存:物理内存.swap交换区存储 磁盘:磁盘容量.io.inode 网络:网络栈.网络带宽 资源分配 保留分配 设定上限 资源弹性扩展 容器的

第五章 云原生与容器技术

第一节 独角兽成功秘诀 成功秘诀 ·Speed of innovation-天下武功,唯快不破 ·Always-available services-随时.随地可用 ·Web scale-从0到1,快速扩展 ·Mobile-centric user experiences-移动为王又快又好! 第二节 云原生和现代应用12范式 现代应用的十二范式(The Twelve-Factor App) 1.基准代码:一份基准代码,多份部署.基准代码和应用之间总是保持一一对应的关系.所有部署的基准代码相同,但

在Linux和Windows的Docker容器中运行ASP.NET Core

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了.那么我就来翻译一下这篇文章,让更多的中文读者看到.当然Scott遇到的坑我也遇到了. 不过首先,对于不熟悉的朋友我还是来解释一下Linux容器和Windows容器的概念. 由于容器成为虚拟化和应用托管的一种不可避免的选项,Windows也开始为公众提供容器功能(其实微软具备和使用

Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】

转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-deployment 英文原文:Docker: Lightweight Linux Containers for Consistent Development and Deployment 使用Docker容器——轻量灵活的VM同类,来接管“依赖地狱”.学习Docker是如何基于LXC技术,通过把应用

当公有云Azure拥抱Docker容器技术

本文转载至 http://3387405.blog.51cto.com/3377405/1598977 预见未来看似是一件不太可能的事情,然而现在企业科技高速发展的态势完全超乎想象. 就在几周前InfoWorld的主编Eric Knorr在引流潮流专栏发表一篇非常火爆的关于2015年以及之后的九大科技企业趋势,在其中非常清晰的指出这九大潮流中头两位就是公有云的胜利和容器技术的狂热.从这里我们很容易理解为什么最近Scott Guthrie 发表并且Jason Zander 再次阐述与Docker合

准备 macvlan 环境 - 每天5分钟玩转 Docker 容器技术(54)

除了 overlay,docker 还开发了另一个支持跨主机容器网络的 driver:macvlan. macvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP.macvlan 本质上是一种网卡虚拟化技术,Docker 用 macvlan 实现容器网络就不奇怪了. macvlan 的最大优点是性能极好,相比其他实现,macvlan 不需要创建 Linux bridge,