Docker相关资源简单整理
- 2015-09-22 11:18:00
- 先知 转贴
- 16482
Docker相关资源简单整理
一、信息概要
- Docker是由PaaS提供商dotCloud在2013年创建的一款开源应用引擎,Docker可以自动将任何应用打包成轻量、可移植、自包涵的容器引擎。开发者构建的应用可以一次构建全平台运行,包括本地开发机器、生产环境、虚拟机和云等。
- Docker是一种增加了高级API的LinuX Container(LXC)技术,提供了能够独立运行Unix进程的轻量级虚拟化解决方案。它提供了一种在安全、可重复的环境中自动部署软件的方式。
- Docker 使用 Go 语言编写,用 cgroup 、namespacing实现资源隔离,支持写时复制特性的AUFS文件系统。
- Docker虽然并不成熟,但是已然获得众多认可,同时这也是未使用虚拟化系统的一大发展趋势,一个非常老道的方法,用户将应用程序从底层系统分离,然后获得很高的灵活性。
- Docker的container(轻量级虚拟化技术,OS层虚拟化技术)比服务器虚拟化来的更加简单,并且需要更少的软件。
- 一个虚机占用的资源比一个Container占用的资源不止多十倍。在一个物理机上开一百个虚机是很困难的,但要实现100多个,甚至几百个Container是很正常的。
- 浏览器的沙箱从资源隔离的角度,以及Java的J2EE Container从标准抽象化的角度,其实跟Container的概念是一致的。
二、使用场景
三、主要特性
- 文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
- 资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。
- 网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。
- 写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。
- 日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
- 变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
- 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
如果 Linux kernel 是 3.8 以前的内核,或者内核缺少 aufs 模块需要安装额外的扩展模块:
$ sudo apt-get install linux-image-extra-`uname -r`
安装 lxc-docker:
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:dotcloud/lxc-docker
$ sudo apt-get update
$ sudo apt-get install lxc-docker
运行一个简单系统
运行 docker 就会自动下载一个 ubuntu 镜像(第一次运行才需要下载),并在一个 container(容器)里运行一个 ubuntu 系统(类似虚拟机)和 shell:
$ docker run -i -t ubuntu /bin/bash
Hello World
$ docker run -i -t ubuntu echo hello world
四、相关技术
1.LXC
Linux cgroups是一种进程资源隔离的技术,namespace是进程的网络资源隔离的技术,它们合在一块也就有了lxc项目,所以从理论上讲,lxc会比kvm性能高得多。因为lxc的每个虚机就是host操作系统的每一个隔离后的进程,并且这些进程是由host操作系统调度的,性能和host操作系统相差不会太多。唯一的缺点是lxc的隔离性不会很好,例如host机器用什么操作系统,lxc也是什么操作系统,再如在lxc中,host操作系统上的root用户可以操纵每一个lxc的虚机。当然,对于私有云,隔离性相比性能倒是其次的,是可以一用的。
最近Linux内核对LXC相关改进非常多,其中3.8版对Namespace新增了user,未来的3.11会加入更好的 CRIU支持,使得Container看上去可能更像一个虚拟机。
和虚机相比,LXC的隔离做个并不彻底,而包括热迁移的等高级功能也正在完善中。
2.AUFS
一种“增量文件系统”,用户所做修改以增量的方式保存,决定了其分层存储特性。
是一个叫岡島的日本人开发的联合文件系统,用来把原本分离的两个文件系统联合在一起。它是Debian Linux一个内核驱动,其它的 Linux 发行版往往是没有 aufs 驱动的。
五、应用介绍
1.Docker Desktop 已安装firfox以及Libreoffice,通过noVNC可实现web版的远程桌面
2.DockerUI Web版Docker管理工具
3.dokku 100行BASH的微Heroku。包含了一个PaaS的基本功能shipyard Docker管理界面,提供多Host,创建Container,查看Image等功能
4.CoreOS
CoreOS项目是Google ChromeOS代码的一个fork版本,目前已成为一个超级精简的服务器操作系统,进化速度堪比ChromeOS。
CoreOS的思想是成为一个随时可被替换的操作系统,甚至在这个替换的过程中,应用程序的运行不会被打断。
CoreOS利用linux cgroups技术来无缝的升级。CoreOS有两个root分区,在另一个cgroups上升级好,然后再切换过去。被更新的机器不需要从负载集群中移除。同时,为了保证其它应用程序不被打断,CoreOS会通过Linux cgroups限制更新过程中的硬盘和网络I/O。
在CoreOS中,所有应用程序都被装在一个个“集装箱(Container)”中,这些集装箱就像一个个软件代码的小气泡,通过最简单的接口运行在操作系统之上。这意味着你可以很轻松得将应用程序在操作系统和计算机之间转移,就像是在轮船和火车上搬运箱子一样,同时也意味着可以在不中断应用程序的情况下更新操作系统。
etcd 是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。CoreOS RAM Usage 161 MB
CoreOS宣称最小化的定制版linux系统,具有:
Linux内核,Linux运行所需
存在两个ROOT分区,一个被用作启动分区,一个被用作更新分区
更新分区在更新完成后,自动重新启动系统,当前机器不需要从负载集群中移除,为了保证其它应用程序不被打断,会通过Linux cgroup限制更新过程中的磁盘、网络等IO使用。
systemd,作为默认系统和服务管理器,其优秀特性:
①.支持并行化任务;
②.同时采用 socket 式与 D-Bus 总线式激活服务;
③.按需启动守护进程(daemon);
④.利用 Linux 的 cgroups 监视进程;
⑤.支持快照和系统恢复;
⑥.维护挂载点和自动挂载点;
⑦.各服务间基于依赖关系进行精密控制。
⑧.root分区被设计成只读,用以保证数据的一致性和更新可用
CPU、IO等资源隔离,自然要祭出容器(Container)来,CoreOS很明智使用Docker作为容器管理器用以构建、发布应用,从这个层面来看,一个应用其实就是一个容器。
etcd组件负责服务发现和配置共享,采用Raft分布式一致性协议算法,承担起,组件之间服务通信使用。很自然的,容器(Container)之间应用、服务的伸缩,就显得很简单了。其基因层面支持集群特性,当然,你也可以解读为云环境的支持。
5.Google Coder 是Google 团队的一个为 Raspberry Pi 而设的实验程式,目的是将 Raspberry Pi 变成一个简单的个人小型网络伺服器,提供一个网上环境给程式员在 Chrome 中编写一些有关 HTML、CSS 和 Javascript 的东西,其可以搭载一些基本的 web app。不过它有一个更伟大的理念,就是让初学者有一个基础环境去一边学习一边编写程式 demo 密码:Kortide2014
6.相关链接:
Docker:集装箱式“运输”在软件上的实现
超越Google,他企图将整个互联网塞进1台电脑
Docker能够运行任何应用的“PaaS”云
使用 Docker/LXC 迅速启动一个桌面系统
Docker:具备一致性的自动化软件部署
PaaS乱局:Container的新机遇
Linux黑客车库创业:服务器操作系统CoreOS颠覆互联网
服务器操作系统CoreOS初体验
Android development environment for ubuntu precise (12.04 LTS)
LXC on Android - YouTube
Start using Docker
Docker on Raspberry Pi
resin/rpi-google-coder coder
搭建自己的 Docker 私有仓库服务
dockerbook
where-can-you-use-golang
- Docker相关资源整理.ppt 270 MD5
联系人: | 王春生 |
---|---|
Email: | chunsheng@cnezsoft.com |