docker基础入门之一
一、概述
1、传统虚拟化技术:
纯软件的虚拟化是通过对于硬件层的模拟从而实现允许运行多个操作系统;
硬件辅助虚拟化需要硬件层面对于虚拟化的支持,类似Intel-VT技术等,具有更高的运行效率;
解决方案:
商业版解决方案:VMware vSphere、 VMware Fusion
开源解决方案:KVM、Xen
2、system-level虚拟化(container虚拟机技术):
不需要模拟硬件层;
共享同一个HOST OS的Kernal
user space instance = Container
解决方案:
LXC:
OpenVZ:
Docker:
Imctfy:google开源的容器虚拟实现
3、容器虚拟化和传统虚拟化的区别:
传统虚拟化 | 容器虚拟化 | |
创建速度 | 很慢 | 非常快 |
性能影响 |
通过对于硬件层的模拟,增加了系统调用链路 的环节,有性能损耗 |
共享Kernel,几乎没有性能损耗 |
资源消耗 | 很大 |
很小,一台机器可以轻松创建多个 Container |
操作系统覆盖 | 支持Linux、windows、Mac等 | 仅仅支持Kernal所支持的OS |
4、container核心技术cgroups,namespace,chroot:
CGroups 限制容器的资源使用;
Linux内核提供的限制,记录和隔离进程组所使用的资源,由Google工程师提出,后来整合进kernel;
通过不同的子系统(blkio、cpu、cpuacct等)来实现对不听资源使用的控制和记录;
Namespace机制,实现容器间的隔离;
pid,容器有自己独立的进程表和1号进程
net,容器有自己独立的network info
ipc,在ipc通信时候,需要加入额外信息来标识进程;(进程间通信)
mnt,每个容器有自己唯一的目录挂载;
utc,每个容器有独立的hostname和domain
chroot,隔离根文件系统:
将host os的某个目录隔离成container的根目录;
二、进入Docker的世界:
dotCloud是docker公司的前身,专注于PaaS的云计算平台;可能是支持最广泛的PaaS平台;
使用container的概念来解决应用stack部署的难题;
定义:什么是docker
开源的应用容器引擎,方便打包发布应用到容器中;
Go语音领域比较大型的应用;
docker实现:
docker是container技术的实现,最早使用LXC作为container的引擎,最新版本的docker使用libcontainer替换了lxc;
采用aufs文件系统来管理Image和container
基于C/S架构的实现,Server端使用UnixSocket,也可以切换到TcpProtocol;
aufs文件系统:
1、advanced multi layer unification filesystem //先进的多层的联合文件系统
2、可以实现把多个不同目录的内容合并在一起;
3、允许read-only和read-write目录并存;
docker中的aufs:
docker使用aufs来实现分层的文件系统的管理;
只读部分定义为Image,可写部分是container
Image类似一个单链表系统,每个Image包含一个指向parent image的指针;
没有parent Image的image是base Image
docker hub:
类似于Github服务,用来分发Image
大量标准的Image,例如Tutum/Ubuntu, Tutum/Mysql
docker的优点:
构建标准化的应用运行的环境;
良好的RestAPI的实现;
Container的实现,更少的资源的使用,创建速度快;
docker的局限性:
- 基于Linux64的,不能在32bit的环境下运行;
- GuestOS只能是Linux Base
- 隔离性相对于KVM等虚拟化技术有所欠缺;
- 采用cgroup的resource control对于cpu的度量很困难;
- container随用户进程的停止而销毁;
docker和LXC的区别:
- docker更专注于部署,而LXC专注于进程的隔离;
- docker有更好的api的方便对于docker容器的管理;
- dockerfile让image的创建变得容易;
- 通过docker hub方便image的分享;
docker的未来:
- 网络
- 安全性
- 容器引擎
docker基础入门之一的更多相关文章
- Docker基础入门
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- 小白学 Python 爬虫(4):前置准备(三)Docker基础入门
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- Docker基础入门及示例
Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...
- Docker系列03—Docker 基础入门
本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...
- docker基础入门理解
本文简单的介绍了一下docker的一些优点,以及使用方法 1. 理解docker 1.1 docker是什么? 1.2 为什么要使用Docker? 2. docker安装 3. docker-容器,镜 ...
- docker基础入门之二
一.docker文件系统: linuxFS包括boot file system 和 root file system boot file system (bootfs),包含bootloader和ke ...
- 容器技术之Docker基础入门
前文我们了解了下LXC的基础用法以及图形管理工具LXC WEB Panel的简单使用,有兴趣的朋友可以参考https://www.cnblogs.com/qiuhom-1874/p/12904188. ...
- Docker系列01—Docker 基础入门
一.初识Docker和容器 1.1 什么是docker 容纳其他物品的工具,可以部分或完全封闭,被用于容纳.存储.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. 容器? 容器就是在隔离的环 ...
- Docker基础入门实践
原文地址 基本概念 Docker三个基本概念 镜像(Image) 容器(Container) 仓库(Repository) 镜像 镜像可以理解为只读模板,如包含一个centos操作系统环境 容器 Do ...
随机推荐
- python----设置默认编码
问题:python的默认编码是ascii.在处理中文的时候可能会出现乱码的情况:这个时候我们就需要把编码设置为对应的编码了. 解决方案: 对python文件的头部做如下修改 import sys re ...
- (8) Xamarin使用Jar檔
原文 Xamarin使用Jar檔 这个范例是如何在Xamarin.Android中去使用一个我们自行在开发的JAR档案. 主要会执行的步骤如下 在Xamarin建立一个Android Java Bin ...
- Cocos2d-x CCNotificationCenter 通知中心
相信接触过ios开发的人来说对NSNotificationCenter都不陌生.而在cocos2d-x中也参照这个类,提供了CCNotificationCenter这个类,用作通知中心. 那么Noti ...
- rsyslog start with
startswith Checks if the value is found exactly at the beginning of the property value. For example, ...
- 基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构
基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构 Neo4j 3.0.0 正式发布,这是 Neo4j 3.0 系列的第一个版本.此版本对内部架构进行了全新的设计;提供给开发者更强大的生 ...
- [虚拟化/云] kvm的架构分析
预备知识 1. 客户机物理页框到宿主机虚拟地址转换 http://blog.csdn.net/zhuriyuxiao/article/details/8968781 http://www.tuicoo ...
- NYOJ 7-街区最短路径问题(曼哈顿距离)
街区最短路径问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间 ...
- 从零开始Unity3D游戏开发【4 材质球和渲染纹理】
[创建材质球] 1.Project 面板下 create-Material 然后将材质球拖放到物体,物体的颜色便会和材质球相同: [渲染纹理 RenderTexture]
- SQL2008缩小日志脚本
以下为SQL2008 缩小日志文件的脚本,在SQL Server Management Studio中打开数据库,将脚本里的数据库名称替换成需要缩小日志的库名称,然后 运行以下脚本. USE WSS_ ...
- SQLServer .mdf和.ldf文件
.mdf:是数据库数据文件,存放一个数据库的数据信息. .ldf:是数据库日志文件,即日常对数据库的操作的记录如(增.删.改)的文件.