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 ...
随机推荐
- mini-httpd源码分析-version.h
/* version.h - version defines for mini_httpd */ #ifndef _VERSION_H_ #define _VERSION_H_ #define SER ...
- log实例
配置详解见2014.10月篇 log4j的pom.xml <dependency> <groupId>log4j</groupId> <artifactId& ...
- SQL Server 函数执行
在SQL Server 不只是procedure 可以用execute 来执行 function 也是可以的 例子: create function ufn_A( @i as int) returns ...
- QWebView 显示本地HTML 文件
QWebView 显示本地HTML文件的时候,如果直接使用 webView->load(QUrl(QString("file:///c:\\a.html")); 可能会导致a ...
- Python文件或目录操作的常用函数
◆ os.listdir(path) Return a list containing the names of the entries in the directory given by path. ...
- UVA 12075 - Counting Triangles(容斥原理计数)
题目链接:12075 - Counting Triangles 题意:求n * m矩形内,最多能组成几个三角形 这题和UVA 1393类似,把总情况扣去三点共线情况,那么问题转化为求三点共线的情况,对 ...
- winfrom运用webservice上传文件到服务器
winfrom做文件上传的功能显然没有BS的简单,本实例是运用了webservice获取二进制流转换的字符串.然后,解析字符串,把流文件再转成pdf. webservice 里面的代码为下: [Web ...
- HTML系列(五):超链接
<a> 标签定义超链接,最重要的属性是 href 属性,它指示链接的目标.通过将href属性设定不同类型的值可以使链接指向不同类型的链接地址:内部链接.外部链接.锚链接. 内部链接指的是同 ...
- kruskal算法求最小生成树(jungle roads的kruskal解法)
注意: 注意数组越界问题(提交出现runtimeError代表数组越界) 刚开始提交的时候,边集中边的数目和点集中点的数目用的同一个宏定义,但是宏定义是按照点的最大数定义的,所以提交的时候出现了数组越 ...
- ROS服务的理解
服务是节点之间通信的另一种方式,服务允许节点发起一个请求和接收一个响应. 打开终端在里面输入: roscore 查看当前的运行节点: rosnode list 返回结果: /rosout 查看当前的运 ...