Pass云Docker介绍
1.Docker 简介
Docker是一个开源可以将任何应用包装在”LXC容器”中运行的工具。如果说VMware,KVM包装的虚拟机,Docker包装的是应用。是一个实至名归的PaaS。
当应用被打包成Docker Image后,部署和运维就变得极其简单。可以使用统一的方式 来下载,启动,扩展,删除,迁移。
Dock可以用来:
- 自动化打包和部署任何应用
- 创建一个轻量级私有PaaS云
- 搭建开发测试环境
- 部署可扩展的Web应用
Docker是开源的,可以在GitHub上访问其代码,提供Restful接口。他的贡献者是一个非常流行的PaaS云提供商 https://dotcloud.com/
PaaS 的核心价值
遗失的方向 - 绝大部分应用竟然不能无缝迁移到主流PaaS上
云计算发展多年,分为IaaS,PaaS和SaaS。其中PaaS(平台即服务)最为不愠不火。笔者因为,最大的原因是PaaS给人(开发,运维,老板)带来的价值不够多,私有PaaS门槛高!最大的问题在于绝大部分应用竟然不能无缝迁移到PaaS上。
Heroku是最流行的公有PaaS云。很廉价好用,可是大部分应用都无法部署。每个应用只能监听一个HTTP端口,应用之间不能交互。他可以为你自动扩展和负载均衡,但其实没得选择,只要使用Heroku就必须接受限制。好歹Heroku支持绝大部分平台如Java,Python。相比之下,GAE更甚,只支持三个平台,不能访问文件系统,也不能启动子进程。
CloudFoundry是比较流行的私有PaaS云。限制和Heroku一样多,部署比较复杂。为此他甚至有一个量身定制的部署工具BOSH。有多难用,用过的人都知道。这个不能怪开发人员,他定义的PaaS本来就这么复杂。
PaaS要实现开发人和运维人的梦
开发人的梦 – 自在的运行环境,无限的资源
开发人希望专注于程序逻辑。有自由自在的运行环境,有丰富的外部资源如各种中间件。至少不要为什么 端口监听数目,通信协议限制 这些事情所困扰。
运维人的梦 – 没有故障和重复的事,减少等待
运维天天处理故障,如果千千万应用都能以同样的方式部署,运维。那么故障的处理就简单多了,重复的事情也会变少。下载部署,安装依赖,这些事情都太过繁琐耗时了。
Docker功能
Docker可以让开发和运维都变得简单。
开发者不必要像使用一般PaaS一样在充满着限制的条件下开发应用,可以就如同平常一样,自由的使用各种资源。老子说“太上下知有之 ,其次誉之,其次侮之”。Dock对于开发者就是“下知有之”的状态。
爽的人是运维。要使用Docker,需要在机器上安装Docker Engine,
- 创建一个Container。实际上是一个Linux Container,Docker会将网络,存储这些事情都配好。
- 下载应用并安装。比如可以用sudo apt-get install mysql-server 来安装一个MySQL。并配置一些参数什么的。
- 打包上传Image。Docker可以将这个Linux Container打包成Image,启动脚本也在其中。并上传至Image Registry中。这个Image仅仅包括你修改的增量部分,所以体积比较小。
- 一条命令跑起来。使用Docker Run 一条命令可以从Image Registry中下载Image 并跑起来。
需要重启的时候,只要重启Container。需要迁移的时候,只要迁移Container。一切干干净净。
PaaS,IaaS术业有专攻
IaaS普遍使用虚拟机,开销较大。Docker明显更轻量。笔者认为IaaS和PaaS各有专攻,PaaS去专注于安全级别的隔离是没有意义的,IaaS也不应该去感知到应用。一个公有云中,可以让每个租户使用不同的虚拟机,虚拟网络来做到安全和资源上的隔离。再通过PaaS统一运维,管理计算资源。
没有必要让每个应用都专享一台虚拟机,这样开销太大。但在安全敏感的环境中,每个租户使用不同的虚拟机是合理的。
使用Docker在线尝试
使用Docker最便捷的方式莫过于 在线尝试: http://www.docker.io/gettingstarted/#
完成了这个在线的教材,相信你对Docker已经基本玩转了。
在Ubuntu中安装Docker
现在Docker支持两个Ubuntu版本:
- Ubuntu Precise 12.04 (LTS) (64-bit)
- Ubuntu Raring 13.04 (64 bit)
有两个依赖
- Linux kernel 3.8 (read more about Kernel Requirements)
- AUFS 文件系统
所以需要确认下您的操作系统,安装依赖并重启:
- # Add the PPA sources to your apt sources list.
- sudo apt-get install python-software-properties && sudo add-apt-repository ppa:dotcloud/lxc-docker
- # Update your sources
- sudo apt-get update
- # Install, you will see another warning that the package cannot be authenticated. Confirm install.
- sudo apt-get install lxc-docker
安装Docker并重启:
- # Add the PPA sources to your apt sources list.
- sudo apt-get install python-software-properties && sudo add-apt-repository ppa:dotcloud/lxc-docker
- # Update your sources
- sudo apt-get update
- # Install, you will see another warning that the package cannot be authenticated. Confirm install.
- sudo apt-get install lxc-docker
使用Docker,下载一个Ubuntu Image,并创建一个Container,在其中运行Bash
- # download the base ‘ubuntu’ container and run bash inside it while setting up an interactive shell
- sudo docker run -i -t ubuntu /bin/bash
- # type ‘exit’ to exit
成功,你已经玩转Docker了!!
Docker Run的时候发生了什么?
当用户执行Docker run的时候,发生了这些事情:
- Docker CLI 调用 Docker Engine的Restful API。默认情况下,Docker Engine是监听在一个Unix Socket上的,当然也可以监听在TCP端口上。
- 从docker index下载一个Ubuntu Image。docker index是一个荟萃Docker Image的地方,就像一个Repository.你也可以构建自己的私有Repository。
- 分配文件系统。文件系统是AUFS,这是一种“增量文件系统”,你做的修改都可以以增量的方式保存。因此Docker Image可以很小。
- Mount文件系统
- 创建网络端口。Docker使用Linux Bridge和Linux Network NameSpace来配置网络。
- 配置IP地址。给刚刚创建的虚拟网卡配一个内部IP。这个IP不重要,因为Docker是通过静态NAT来对外保留TCP/UDP端口的。
- 在LXC中执行命令,这个例子中命令就是 “/bin/bash”
- 截取“/bin/bash”的输入输出流到Terminal,和你交互
Dock详解在Docker中运行Redis
创建一个Docker Container
- sudo docker run -i -t ubuntu /bin/bash
复制代码
安装Redis .
- apt-get update
- apt-get install redis-server
- exit
拍个快照,创建你自己的Docker Redis Image
- docker ps -a # grab the container id (this will be the first one in the list)
- docker commit <container_id> <your username>/redis
运行Redis。-d 是指后台运行,使用你刚刚创建的Image。
- sudo docker run -d -p 6379 <your username>/redis /usr/bin/redis-server
使用redis-cli访问
- sudo docker ps # grab the new container id
- sudo docker inspect <container_id> # grab the ipaddress of the container
- redis-cli -h <ipaddress> -p 6379
- redis 10.0.3.32:6379> set docker awesome
- OK
- redis 10.0.3.32:6379> get docker
- “awesome”
- redis 10.0.3.32:6379> exit
文件系统
一般来说,要Linux需要两种文件系统
- boot file system (bootfs)
- root file system (rootfs)
bootfs包含有bootloader。用户从来不会更改bootfs。事实上,当机器启动结束后,kernel会卸载掉这个bootfs。
rootfs就是我们通常看到了Linux文件目录,包括 /dev, /proc, /bin, /etc,/lib, /usr, 和/tmp等等。不同的Linux发行版的rootfs是不一样的,软件包结构也是不同的。Docker通过管理rootfs,可以在同时运行多个Linux发行版。
当传统Linux启动的时候,rootfs是只读的,检查完整性后会转化成可读写状态。
当Docker挂载rootfs的时候,也是只读的。但是他并没有把它转化为可读写状态,而且在其上使用union mount 来加一层,创建一个可读写的文件系统。原理的rootfs还是只读的,数据被写入新的空间。Docker称之为”层”,数据可以这样一层一层叠加起来。
最初的时候,最顶层中什么数据也没有,当进程创建修改文件的时候,数据就会保存在最顶层。底层的文件系统没有丝毫改变。
当导出Image的时候,其实就是导出最顶层而已。
由于底层的只读的,多个Docker Container可以共享,提高的文件系统的使用效率。
Docker生态环境
Docker是开源的,提供完善的Restful接口,设计简洁,直戳痛点。但是因此比较简单,没有华丽的功能。凤栖梧桐,以Docker为树干,衍生出许多优秀的项目。
- dokku 100行BASH的微Heroku。包含了一个PaaS的基本功能
- shipyard Docker管理界面,提供多Host,创建Container,查看Image等功能
- openstack-docker Docker和OpenStack集成,可以使用Nova和Glance来控制
- jiffylab教学用Python和Unix Shell平台
- BYO SAAS Memcached as a Service
- Dockerui Docker管理界面
<ignore_js_op>
dokku
Pass云Docker介绍的更多相关文章
- 1.docker介绍、命令、容器、镜像、数据卷、Dockerfile、常用软件安装、推送阿里云
一.docker介绍 1.docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各 ...
- docker使用阿里云Docker镜像库加速
官方镜像下载实在是慢,于是开通了阿里云开发者帐号, 官方帮助 阿里云Docker镜像库 阿里云容器Hub服务:http://dev.aliyun.com/search.html 来自云端的容器Hub服 ...
- Docker介绍基本概念(一)
Docker介绍基本概念 1.什么是Docker? 说实话关于Docker是什么并太好说,下面我通过四点向你说明Docker到底是个什么东西. Docker是世界领先的软件容器平台. Docker使用 ...
- 使用阿里云Docker镜像加速
使用docker官方的docker hub速度太慢,正好看到国内阿里云也做了docker镜像,于是想试试看阿里云的docker源.先附上 阿里云docker hub地址 .新用户需要注册成为开发者.打 ...
- docker介绍和简单使用
docker介绍 docker 为什么会有docker出现? 一款产品从开发到上线,从操作系统到运行环境,再到应用配置,作为开发+运维直接的协作我们需要关心很多东西,这也是互联网公司不得 不面对问题, ...
- docker 介绍及安装操作
docker 介绍及安装操作 1.docker概述 2.docker安装及操作 1.docker概述: Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源 是在L ...
- docker 介绍
docker 介绍 安装 sudo apt-get install docker.io sudo docker info 查看是否安装成功 hello world sodu docker run he ...
- docke镜像上传到dockerhub仓库和阿里云docker仓库的方法
操作指南 1. 登录阿里云docker registry: $ sudo docker login --username=linjiaxin897591495 registry.cn-hangz ...
- Docker使用阿里云docker镜像加速
首先进入阿里云docker库首页 https://dev.aliyun.com/ 点击 管理中心 点击 加速器 复制下面的加速地址 进入docker的 Settings 把basic 切换成 adva ...
随机推荐
- mysql组合索引与字段顺序
很多时候,我们在mysql中创建了索引,但是某些查询还是很慢,根本就没有使用到索引!一般来说,可能是某些字段没有创建索引,或者是组合索引中字段的顺序与查询语句中字段的顺序不符. 看下面的例子:假设有一 ...
- 微信商城系统与手机APP的优势对比!
随着移动互联网的大势到来,手机移动应用已经成为未来的主流市场,很多企业也在投入精力和财力进行研发自己的手机APP,以便更好的迎合市场的需求. 然而当微信公众平台开放以后,新的机会出现了! 很多企业已经 ...
- nginx的反向代理和负载均衡的区别
反向代理,是把一些静态资源存储在服务器上,当用户有请求的时候,就直接返回反向代理服务器上的资源给用户,而如果反向代理服务器上没有的资源,就转发给后面的负载均衡服务器,负载均衡服务器再将请求分发给后端的 ...
- HOWTO - Basic MSI安装包在安装运行过程中如何获取完整源路径
有朋友问到如何在一个Windows Installer安装包中获取安装包源路径,就是在安装包运行过程中动态获取*.msi所在完整路径. 这个问题分两类,如果我们的安装包只是一个*.msi安装文件,那么 ...
- 使用 Aircrack-ng 破解 WEP 和 WPA/WPA2 加密的 Wi-Fi 密码。(转)
1.首先请不要使用此方法去搞破坏,去蹭Wi-Fi,因为不装逼地说,我认为技术本身的价值很大,尤其是在学习这个技术的过程中解决遇到的问题,当经过重重困难最后终于成功之后的喜悦又怎么能拿去蹭网呢.我在此过 ...
- Entity Framework一对多关系添加数据的两种方式
当使用Entity Framework添加一对多关系数据的时候,通常先添加一的数据,然后再添加多的数据.类似这样: //添加一的数据 var category = new Category{Name= ...
- KVM 基础使用(一)
Host OS:CentOS release 6.3 (Final) x64 安装时选择Virtual Host 1.测试KVM有没有启动 运行 lsmod | grep kvm 和 stat /de ...
- 了解 JavaScript (5)– 翻转器(rollover)
用 JavaScript 最常用的效果就是,当用户将鼠标移动到图片上时,会改变网页上的图像,这样页面就能对用户的操作及时作出反应,这种称为 翻转器(rollover)效果很容易实现,而且有很多应用场合 ...
- 了解 JavaScript (4)– 第一个 Web 应用程序
在下面的例子中,我们将要构建一个 Bingo 卡片游戏,每个示例演示 JavaScript 的不同方面,通过每次的改进将会得到最终有效的 Bingo 卡片. Bingo 卡片的内容 美国 Bingo ...
- 无线局域网络 WIFI/WAPI/WLAN区别浅析
WIFI和WAPI的区别 既然WIFI和WAPI都是WLAN的传输协议,那么两者究竟都有怎样的区别? 首先第一点区别在于,两者的缔造者不一样.WIFI是又国外制定的一个协议,而WAPI是由中国制定的, ...