请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

猿媛之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 7890|回复: 1

什么事Docker

[复制链接]

44

主题

48

帖子

198

积分

注册会员

Rank: 2

积分
198
发表于 2016-3-9 17:46:58 | 显示全部楼层 |阅读模式
Docker能够运行任何应用的“PaaS”云[size=1em]Posted on 2013-09-17by yankay
Docker 简介
[size=1.1em]Docker是一个开源可以将任何应用包装在"LXC容器”中运行的工具。如果说VMware,KVM包装的虚拟机,Docker包装的是应用。是一个实至名归的PaaS。
[size=1.1em]当应用被打包成Docker Image后,部署和运维就变得极其简单。可以使用统一的方式 来下载,启动,扩展,删除,迁移。
[size=1.1em]

[size=1.1em]Dock可以用来:
  • 自动化打包和部署任何应用
  • 创建一个轻量级私有PaaS云
  • 搭建开发测试环境
  • 部署可扩展的Web应用
[size=1.1em]Docker是开源的,可以在GitHub上访问其代码,提供Restful接口。他的贡献者是一个非常流行的PaaS云提供商 https://dotcloud.com/
PaaS 的核心价值遗失的方向 - 绝大部分应用竟然不能无缝迁移到主流PaaS上
[size=1.1em]云计算发展多年,分为IaaS,PaaS和SaaS。其中PaaS(平台即服务)最为不愠不火。笔者因为,最大的原因是PaaS给人(开发,运维,老板)带来的价值不够多,私有PaaS门槛高!最大的问题在于绝大部分应用竟然不能无缝迁移到PaaS上。
[size=1.1em]Heroku是最流行的公有PaaS云。很廉价好用,可是大部分应用都无法部署。每个应用只能监听一个HTTP端口,应用之间不能交互。他可以为你自动扩展和负载均衡,但其实没得选择,只要使用Heroku就必须接受限制。好歹Heroku支持绝大部分平台如Java,Python。相比之下,GAE更甚,只支持三个平台,不能访问文件系统,也不能启动子进程。
[size=1.1em]CloudFoundry是比较流行的私有PaaS云。限制和Heroku一样多,部署比较复杂。为此他甚至有一个量身定制的部署工具BOSH。有多难用,用过的人都知道。这个不能怪开发人员,他定义的PaaS本来就这么复杂。
PaaS要实现开发人和运维人的梦开发人的梦 - 自在的运行环境,无限的资源
[size=1.1em]开发人希望专注于程序逻辑。有自由自在的运行环境,有丰富的外部资源如各种中间件。至少不要为什么 端口监听数目,通信协议限制 这些事情所困扰。
运维人的梦 - 没有故障和重复的事,减少等待
[size=1.1em]运维天天处理故障,如果千千万应用都能以同样的方式部署,运维。那么故障的处理就简单多了,重复的事情也会变少。下载部署,安装依赖,这些事情都太过繁琐耗时了。
Docker功能
[size=1.1em]Docker可以让开发和运维都变得简单。
[size=1.1em]开发者不必要像使用一般PaaS一样在充满着限制的条件下开发应用,可以就如同平常一样,自由的使用各种资源。老子说“太上下知有之 ,其次誉之,其次侮之”。Dock对于开发者就是“下知有之”的状态。
[size=1.1em]爽的人是运维。要使用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 并跑起来。
[size=1.1em]
[size=1.1em]需要重启的时候,只要重启Container。需要迁移的时候,只要迁移Container。一切干干净净。
PaaS,IaaS术业有专攻
[size=1.1em]IaaS普遍使用虚拟机,开销较大。Docker明显更轻量。笔者认为IaaS和PaaS各有专攻,PaaS去专注于安全级别的隔离是没有意义的,IaaS也不应该去感知到应用。一个公有云中,可以让每个租户使用不同的虚拟机,虚拟网络来做到安全和资源上的隔离。再通过PaaS统一运维,管理计算资源。
[size=1.1em]
[size=1.1em]没有必要让每个应用都专享一台虚拟机,这样开销太大。但在安全敏感的环境中,每个租户使用不同的虚拟机是合理的。
使用Docker在线尝试
[size=1.1em]使用Docker最便捷的方式莫过于 在线尝试: http://www.docker.io/gettingstarted/#
[size=1.1em]完成了这个在线的教材,相信你对Docker已经基本玩转了。
在Ubuntu中安装Docker
[size=1.1em]现在Docker支持两个Ubuntu版本:
[size=1.1em]有两个依赖
[size=1.1em]所以需要确认下您的操作系统,安装依赖并重启:

1

[color=rgb(49, 124, 197) !important]2

3

[color=rgb(49, 124, 197) !important]4

5

[color=rgb(49, 124, 197) !important]6

7

[color=rgb(49, 124, 197) !important]8


[color=rgb(184, 92, 0) !important]# Add the PPA sources to your apt sources list.
[color=rgb(0, 78, 208) !important]sudo apt[color=rgb(0, 111, 224) !important]-[color=rgb(128, 0, 128) !important]get[color=rgb(0, 111, 224) !important] [color=rgb(0, 78, 208) !important]install python[color=rgb(0, 111, 224) !important]-software[color=rgb(0, 111, 224) !important]-properties[color=rgb(0, 111, 224) !important] [color=rgb(0, 111, 224) !important]&&[color=rgb(0, 111, 224) !important] [color=rgb(0, 78, 208) !important]sudo add[color=rgb(0, 111, 224) !important]-apt[color=rgb(0, 111, 224) !important]-[color=rgb(0, 78, 208) !important]repository ppa[color=rgb(0, 111, 224) !important]:dotcloud[color=rgb(0, 111, 224) !important]/lxc[color=rgb(0, 111, 224) !important]-docker

[color=rgb(184, 92, 0) !important]# Update your sources
[color=rgb(0, 78, 208) !important]sudo apt[color=rgb(0, 111, 224) !important]-[color=rgb(128, 0, 128) !important]get[color=rgb(0, 111, 224) !important] update

[color=rgb(184, 92, 0) !important]# Install, you will see another warning that the package cannot be authenticated. Confirm install.
[color=rgb(0, 78, 208) !important]sudo apt[color=rgb(0, 111, 224) !important]-[color=rgb(128, 0, 128) !important]get[color=rgb(0, 111, 224) !important] [color=rgb(0, 78, 208) !important]install lxc[color=rgb(0, 111, 224) !important]-docker



[size=1.1em]安装Docker并重启:

1

[color=rgb(49, 124, 197) !important]2

3

[color=rgb(49, 124, 197) !important]4

5

[color=rgb(49, 124, 197) !important]6

7

[color=rgb(49, 124, 197) !important]8


[color=rgb(184, 92, 0) !important]# Add the PPA sources to your apt sources list.
[color=rgb(0, 78, 208) !important]sudoapt[color=rgb(0, 111, 224) !important]-[color=rgb(128, 0, 128) !important]get[color=rgb(0, 111, 224) !important][color=rgb(0, 78, 208) !important]installpython[color=rgb(0, 111, 224) !important]-software[color=rgb(0, 111, 224) !important]-properties[color=rgb(0, 111, 224) !important][color=rgb(0, 111, 224) !important]&&[color=rgb(0, 111, 224) !important][color=rgb(0, 78, 208) !important]sudoadd[color=rgb(0, 111, 224) !important]-apt[color=rgb(0, 111, 224) !important]-[color=rgb(0, 78, 208) !important]repositoryppa[color=rgb(0, 111, 224) !important]:dotcloud[color=rgb(0, 111, 224) !important]/lxc[color=rgb(0, 111, 224) !important]-docker

[color=rgb(184, 92, 0) !important]# Update your sources
[color=rgb(0, 78, 208) !important]sudoapt[color=rgb(0, 111, 224) !important]-[color=rgb(128, 0, 128) !important]get[color=rgb(0, 111, 224) !important]update

[color=rgb(184, 92, 0) !important]# Install, you will see another warning that the package cannot be authenticated. Confirm install.
[color=rgb(0, 78, 208) !important]sudoapt[color=rgb(0, 111, 224) !important]-[color=rgb(128, 0, 128) !important]get[color=rgb(0, 111, 224) !important][color=rgb(0, 78, 208) !important]installlxc[color=rgb(0, 111, 224) !important]-docker



[size=1.1em]使用Docker,下载一个Ubuntu Image,并创建一个Container,在其中运行Bash

1

[color=rgb(49, 124, 197) !important]2

3

[color=rgb(49, 124, 197) !important]4


[color=rgb(184, 92, 0) !important]# download the base 'ubuntu' container and run bash inside it while setting up an interactive shell
[color=rgb(0, 78, 208) !important]sudo [color=rgb(0, 78, 208) !important]docker run[color=rgb(0, 111, 224) !important] [color=rgb(0, 111, 224) !important]-i[color=rgb(0, 111, 224) !important] [color=rgb(0, 111, 224) !important]-t[color=rgb(0, 111, 224) !important] ubuntu[color=rgb(0, 111, 224) !important] [color=rgb(0, 111, 224) !important]/bin[color=rgb(0, 111, 224) !important]/bash

[color=rgb(184, 92, 0) !important]# type 'exit' to exit



[size=1.1em]成功,你已经玩转Docker了!!
Docker Run的时候发生了什么?
[size=1.1em]当用户执行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,和你交互
[size=1.17em]Dock详解在Docker中运行Redis
[size=1.1em]创建一个Docker Container

1


[color=rgb(0, 78, 208) !important]sudo[color=rgb(0, 78, 208) !important]dockerrun[color=rgb(0, 111, 224) !important][color=rgb(0, 111, 224) !important]-i[color=rgb(0, 111, 224) !important][color=rgb(0, 111, 224) !important]-t[color=rgb(0, 111, 224) !important]ubuntu[color=rgb(0, 111, 224) !important][color=rgb(0, 111, 224) !important]/bin[color=rgb(0, 111, 224) !important]/bash



[size=1.1em]安装Redis .

1

[color=rgb(49, 124, 197) !important]2

3


apt[color=rgb(0, 111, 224) !important]-[color=rgb(128, 0, 128) !important]get[color=rgb(0, 111, 224) !important] [color=rgb(0, 78, 208) !important]update
apt[color=rgb(0, 111, 224) !important]-[color=rgb(128, 0, 128) !important]get[color=rgb(0, 111, 224) !important] [color=rgb(0, 78, 208) !important]install redis[color=rgb(0, 111, 224) !important]-[color=rgb(0, 78, 208) !important]server
[color=rgb(128, 0, 128) !important]exit



[size=1.1em]拍个快照,创建你自己的Docker Redis Image

1

[color=rgb(49, 124, 197) !important]2


[color=rgb(0, 78, 208) !important]docker[color=rgb(128, 0, 128) !important]ps[color=rgb(0, 111, 224) !important][color=rgb(0, 111, 224) !important]-a[color=rgb(0, 111, 224) !important]  [color=rgb(184, 92, 0) !important]# grab the container id (this will be the first one in the list)
[color=rgb(0, 78, 208) !important]dockercommit[color=rgb(0, 111, 224) !important][color=rgb(0, 111, 224) !important]<container_id[color=rgb(0, 111, 224) !important]>[color=rgb(0, 111, 224) !important][color=rgb(0, 111, 224) !important]<[color=rgb(0, 78, 208) !important]yourusername[color=rgb(0, 111, 224) !important]>[color=rgb(0, 111, 224) !important]/redis



[size=1.1em]运行Redis。-d 是指后台运行,使用你刚刚创建的Image。

1


[color=rgb(0, 78, 208) !important]sudo [color=rgb(0, 78, 208) !important]docker run[color=rgb(0, 111, 224) !important] [color=rgb(0, 111, 224) !important]-d[color=rgb(0, 111, 224) !important] [color=rgb(0, 111, 224) !important]-p[color=rgb(0, 111, 224) !important] [color=rgb(206, 0, 0) !important]6379[color=rgb(0, 111, 224) !important] [color=rgb(0, 111, 224) !important]<[color=rgb(0, 78, 208) !important]your username[color=rgb(0, 111, 224) !important]>[color=rgb(0, 111, 224) !important]/redis[color=rgb(0, 111, 224) !important] [color=rgb(0, 111, 224) !important]/usr[color=rgb(0, 111, 224) !important]/bin[color=rgb(0, 111, 224) !important]/redis[color=rgb(0, 111, 224) !important]-server



[size=1.1em]使用redis-cli访问

1

[color=rgb(49, 124, 197) !important]2

3

[color=rgb(49, 124, 197) !important]4

5

[color=rgb(49, 124, 197) !important]6

7

[color=rgb(49, 124, 197) !important]8


[color=rgb(0, 78, 208) !important]sudo[color=rgb(0, 78, 208) !important]docker[color=rgb(128, 0, 128) !important]ps[color=rgb(0, 111, 224) !important]  [color=rgb(184, 92, 0) !important]# grab the new container id
[color=rgb(0, 78, 208) !important]sudo[color=rgb(0, 78, 208) !important]dockerinspect[color=rgb(0, 111, 224) !important][color=rgb(0, 111, 224) !important]<container_id[color=rgb(0, 111, 224) !important]>[color=rgb(0, 111, 224) !important]    [color=rgb(184, 92, 0) !important]# grab the ipaddress of the container
redis[color=rgb(0, 111, 224) !important]-cli[color=rgb(0, 111, 224) !important][color=rgb(0, 111, 224) !important]-h[color=rgb(0, 111, 224) !important][color=rgb(0, 111, 224) !important]<ipaddress[color=rgb(0, 111, 224) !important]>[color=rgb(0, 111, 224) !important][color=rgb(0, 111, 224) !important]-p[color=rgb(0, 111, 224) !important][color=rgb(206, 0, 0) !important]6379
redis[color=rgb(0, 111, 224) !important][color=rgb(206, 0, 0) !important]10.0.3.32[color=rgb(0, 111, 224) !important]:[color=rgb(206, 0, 0) !important]6379[color=rgb(0, 111, 224) !important]>[color=rgb(0, 111, 224) !important][color=rgb(0, 78, 208) !important]set[color=rgb(0, 78, 208) !important]docker[color=rgb(0, 78, 208) !important]awesome
[color=rgb(0, 78, 208) !important]OK
redis[color=rgb(0, 111, 224) !important][color=rgb(206, 0, 0) !important]10.0.3.32[color=rgb(0, 111, 224) !important]:[color=rgb(206, 0, 0) !important]6379[color=rgb(0, 111, 224) !important]>[color=rgb(0, 111, 224) !important][color=rgb(128, 0, 128) !important]get[color=rgb(0, 111, 224) !important]docker
[color=rgb(0, 128, 0) !important]"awesome"
redis[color=rgb(0, 111, 224) !important][color=rgb(206, 0, 0) !important]10.0.3.32[color=rgb(0, 111, 224) !important]:[color=rgb(206, 0, 0) !important]6379[color=rgb(0, 111, 224) !important]>[color=rgb(0, 111, 224) !important][color=rgb(128, 0, 128) !important]exit




文件系统
[size=1.1em]一般来说,要Linux需要两种文件系统
  • boot file system (bootfs)
  • root file system (rootfs)
[size=1.1em]bootfs包含有bootloader。用户从来不会更改bootfs。事实上,当机器启动结束后,kernel会卸载掉这个bootfs。
[size=1.1em]rootfs就是我们通常看到了Linux文件目录,包括 /dev, /proc, /bin, /etc,/lib, /usr, 和/tmp等等。不同的Linux发行版的rootfs是不一样的,软件包结构也是不同的。Docker通过管理rootfs,可以在同时运行多个Linux发行版。
[size=1.1em]
[size=1.1em]当传统Linux启动的时候,rootfs是只读的,检查完整性后会转化成可读写状态。
[size=1.1em]当Docker挂载rootfs的时候,也是只读的。但是他并没有把它转化为可读写状态,而且在其上使用 union mount 来加一层,创建一个可读写的文件系统。原理的rootfs还是只读的,数据被写入新的空间。Docker称之为"层",数据可以这样一层一层叠加起来。
[size=1.1em]
[size=1.1em]最初的时候,最顶层中什么数据也没有,当进程创建修改文件的时候,数据就会保存在最顶层。底层的文件系统没有丝毫改变。
[size=1.1em]当导出Image的时候,其实就是导出最顶层而已。
[size=1.1em]由于底层的只读的,多个Docker Container可以共享,提高的文件系统的使用效率。
Docker生态环境
[size=1.1em]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管理界面

dokku






回复

使用道具 举报

0

主题

17

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2020-7-13 12:36:36 | 显示全部楼层
潜水出来冒泡
https://www.youxuan68.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|猿媛之家    

GMT+8, 2021-8-1 20:43 , Processed in 0.196351 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表