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 ...
随机推荐
- GetMemory()函数
NO1 void GetMemory(char *p) { p=(char *)malloc(100); } void Test() { char * str=NULL; GetMemory(str) ...
- asp.net mvc 注册中的邮箱激活功能实现(一)
基本流程图 注册页面就不再写出,现在将发送邮件的代码粘贴出来 public ActionResult SendEmial() { ; string validataCode = System.Guid ...
- android LinearLayout android:layout_weight 作用,固定比例
android 中的 LinearLayout 是线性布局有水平布局horizontal 垂直布局vertical .本文针对 水平布局horizontal 布局的weight属性做一个标记,以免 ...
- 在cad中画一条长500mm,垂直90度的线段
视频教程奉上 方法1.点击线段按钮,鼠标指定一点,输入500,再输入<90. 方法2,点击线段按钮,鼠标指定一点,输入500,按tab,再输入90.
- NOI2014 Day2
NOI2014 Day2 动物园 题目描述:给出一个字符串(长度为\(Len\)),设\(num[i]\)为字符串的前\(i\)个字符构成的子串(\(A\))中,满足\(A\)的前\(L\)个字符既是 ...
- [LeetCode][Python]Tow Sum
# -*- coding: utf8 -*-'''https://oj.leetcode.com/problems/two-sum/ Given an array of integers, find ...
- c++游戏编程书籍
如果要自学游戏程序开发的话,可以看看下面的,呵呵. 游戏开发资料(PDF书都是中文版的,非英文,很多是本人自己扫描制作,从未网上发布过,所以独家啦): 1.Gamebryo 2.2游戏引擎(盛大.腾 ...
- javaio学习笔记-字符流类(2)
1.java.io包中的字符流类-FileReader和FileWriter: BufferedReader:缓存的输入字符流; BufferedWriter:缓存的输出字符流; FileReader ...
- try,catch捕获错误的用法
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script&g ...
- Spring构造器注入、set注入和注解注入
记得刚开始学spring的时候,老师就反复的提到依赖注入和切面,平常的java开发中,在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种方法耦合度太高并且不容易测试,sp ...