仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 434|回复: 8
打印 上一主题 下一主题

[其他Linux] 来看看:Docker简介与进门

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-15 22:12:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
每一个开发团队都对他的发行版做过测试后放出的.那些国际知名的大品牌更是如此。
  Docker是个重生的事物,观点相似假造化。网上关于Docker进门的器材已良多了。不外本文切磋了Docker的特性、特征、道理,还先容了具有中国特征的安装测试历程,别的还谈到了Docker的社区生态和Dockerfile,并利用Dockerfile构建一个nginx情况。



 缘起

  Docker是个重生的事物,观点相似假造化。网上关于Docker进门的器材已良多了。不外本文切磋了Docker的特性、特征、道理,还先容了具有中国特征的安装测试历程,别的还谈到了Docker的社区生态和Dockerfile,并利用Dockerfile构建一个nginx情况。在几个月前传闻Docker,可是一向没偶然间往研讨,前一段工夫趁着azure收费试用,赶忙实行一下,可是卡在了ubuntu基本镜像的下载上(因为国际收集的特别缘故原由),以是也就停顿了。在逛Segmentfault的时分,看到下面有个Docker子站问答,逛了逛公然有干货,因而从头试了一下,这里把履历和体味分享一下。
 Docker简介

  我以为复杂来讲,Docker就是一个使用程序实行容器,相似假造机的观点。可是与假造化手艺的分歧点在于上面几点:

  • 假造化手艺依附物理CPU和内存,是硬件级其余;而docker构建在操纵体系上,使用操纵体系的containerization手艺,以是docker乃至能够在假造机上运转。
  • 假造化体系一样平常都是指操纵体系镜像,对照庞大,称为“体系”;而docker开源并且轻量,称为“容器”,单个容器合适部署大批使用,好比部署一个redis、一个memcached。
  • 传统的假造化手艺利用快照来保留形态;而docker在保留形态上不但更加笨重和低本钱,并且引进了相似源代码办理机制,将容器的快照汗青版本逐一纪录,切换本钱很低。
  • 传统的假造化手艺在构建体系的时分较为庞大,必要大批的人力;而docker能够经由过程Dockfile来构建全部容器,重启和构建速率很快。更主要的是Dockfile能够手动编写,如许使用程序开辟职员能够经由过程公布Dockfile来引导体系情况和依附,如许关于延续托付非常有益。
  • Dockerfile能够基于已构建好的容器镜像,创立新容器。Dockerfile能够经由过程社辨别享和下载,有益于该手艺的推行。
  Docker的次要特征以下(摘自Docker:具有分歧性的主动化软件部署):

  • 文件体系断绝:每一个历程容器运转在完整自力的根文件体系里。
  • 资本断绝:可使用cgroup为每一个历程容器分派分歧的体系资本,比方CPU和内存。
  • 收集断绝:每一个历程容器运转在本人的收集定名空间里,具有本人的假造接口和IP地点。
  • 写时复制:接纳写时复制体例创立根文件体系,这让部署变得极为快速,而且节俭内存和硬盘空间。
  • 日记纪录:Docker将会搜集和纪录每一个历程容器的尺度流(stdout/stderr/stdin),用于及时检索或批量检索。
  • 变动办理:容器文件体系的变动能够提交到新的映像中,并可反复利用以创立更多的容器。无需利用模板或手动设置。
  • 交互式Shell:Docker能够分派一个假造终端并联系关系就任何容器的尺度输出上,比方运转一个一次性交互shell。
  今朝Docker正处在开辟阶段,官方不倡议用于临盆情况。别的,Docker是基于Ubuntu开辟的,以是官方保举将其安装在Ubuntu的操纵体系上,今朝只能安装在linux体系上。
 Docker的利用进门

  Docker官方的安装引导挺具体的。可是因为国际的特别情形,我这里基于这个安装引导,给出合用于国际开辟者的进门历程。基于UbuntuPrecise12.04(LTS)(64-bit),保举这个版本,其他版本参考官方安装手册。
  Docker的安装

  起首,Docker官方宣称最好是运转在Linux内核3.8以上,以是要先辈行内核晋级
  1. #installthebackportedkernelsudoapt-getupdatesudoapt-getinstalllinux-image-generic-lts-raringlinux-headers-generic-lts-raring#rebootsudoreboot
复制代码
  增加Docker堆栈的key:
  1. sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E9
复制代码
  增加镜像,这里间接用俄罗斯的Yandex
  1. sudosh-c"echodebhttp://mirror.yandex.ru/mirrors/docker/dockermain>/etc/apt/sources.list.d/docker.list"sudoapt-getupdate
复制代码
  安装Docker
  1. sudoapt-getinstalllxc-docker
复制代码
  一样平常下面的步骤不会有任何成绩。
  Docker镜像下载

  Docker运转最少必要一个ubuntu的基本镜像,这个镜像会在你初度实验实行时主动下载,不外从国际间接用基础上就别想了,必要利用代办署理。这里用Docker中文社区供应的代办署理。出处1,出处2。
  修正/etc/default/docker文件,作废正文http_proxy的部分:
  1. #IfyouneedDockertouseanHTTPproxy,itcanalsobespecifiedhere.exporthttp_proxy=http://192.241.209.203:8384/
复制代码
  经由笔者测试,下面这个代办署理也不是很不乱,大概用的人对照多吧。
  可用的代办署理地点(延续存眷中)
http://192.241.209.203:8384
  然后,你就能够实行上面的命令,测试实行了,因为代办署理不是很不乱,大概必要多实验几回(淡定):
  1. sudodockerrun-i-tubuntu/bin/bash
复制代码
  上面这个截图是我乐成pull完成,并测试helloworld乐成(也许实验了3-4次):



 Docker的社区和生态

  ###堆栈和镜像###评价一项开源手艺很年夜水平上必要存眷它的社区和生态。Docker的生态是经由过程推送和拉取特定的“镜像(image)包”来睁开的。你能够从dockerindex上搜刮必要的镜像。也能够经由过程上面的命令搜刮:
  1. sudodockersearch
复制代码
  镜像能够看做是包括有某些软件的容器体系,好比ubuntu就是一个官方的基本镜像,良多镜像都是基于这个镜像“衍生”,该镜像包括基础的ubuntu体系。再好比,hipache是一个官方的镜像容器,运转后能够撑持http和websocket的代办署理服务,而这个镜像自己又基于ubuntu。
  经由过程pull来拉取镜像,将镜像下载到当地,好比
  1. sudodockerpullhipache
复制代码
  经由过程images检察如今有哪些镜像:
  1. sudodockerimagesREPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZEubuntu13.109f676bd305a46weeksago178MBubuntusaucy9f676bd305a46weeksago178MBubuntu13.04eb601b8965b86weeksago166.5MBubunturaringeb601b8965b86weeksago166.5MBubuntu12.105ac751e8d6236weeksago161MBubuntuquantal5ac751e8d6236weeksago161MBubuntu10.049cc9ea5ea5406weeksago180.8MBubuntulucid9cc9ea5ea5406weeksago180.8MBubuntu12.049cd978db300e6weeksago204.4MBubuntulatest9cd978db300e6weeksago204.4MBubuntuprecise9cd978db300e6weeksago204.4MB
复制代码
  下面的都是镜像,都附属于ubuntu堆栈(一样平常堆栈名应当是username/repository格局,假如是间接以repository作为堆栈名的,是指官方公布的堆栈)。我们拉取ubuntu的时分,实践上是把堆栈里的镜像都拉上去了。每一个镜像都有一个独一的IMAGEID,和一个易于影象的TAG,能够经由过程IMAGEID的前几位大概repository:TAG来标识一个镜像。
  Dockerfile和经由过程Dockerfile来构建Nginx容器

  除pull,镜像也能够经由过程”编译”失掉,这里的”编译”是指一种构建举动,经由过程手动编写大概从github猎取Dockerfile来构建一个镜像。能够把Dockerfile当作是一个剧本,这个剧本会在容器每次启动时实行。一样平常在Dockerfile内里必要编写基本软件的安装剧本和设置剧本。上面这个Dockerfile是个例子:
  1. ##UbuntuDockerfile##https://github.com/dockerfile/ubuntu##Pullbaseimage.FROMubuntu:12.10#UpdateOS.RUNecho"debhttp://archive.ubuntu.com/ubuntuquantalmainuniversemultiverse">/etc/apt/sources.listRUNapt-getupdateRUNapt-getupgrade-y#Installbasicpackages.RUNapt-getinstall-ysoftware-properties-commonRUNapt-getinstall-ycurlgithtopunzipvimwget#Addfiles.ADDroot/.bashrc/root/.bashrcADDroot/.gitconfig/root/.gitconfigADDroot/scripts/root/scripts#Setworkingdirectory.ENVHOME/rootWORKDIR/root
复制代码
  FROM指令暗示此次构建必要基于ubuntu堆栈的12.10这个TAG的镜像,假如当地不存在这个镜像的话,会主动下载镜像。镜像实践上就是编译好的了局。向下面这个Dockerfile,在原始ubuntu的基本上安装了良多经常使用的软件。
  docker官方有Dockerfile的教程
  理论

  起首确保你已完成下面的安装步骤,并拉取到基本镜像ubuntu:12.10。
  如今我们用下面的Dockerfile来构建这个堆栈(下面的Dockerfile实践上是githubdockerfile项目标基础堆栈dockerfile/ubuntu,所上面的命令间接从github下载Dockerfile来构建)
  1. sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E90
复制代码
  上面是最初构建乐成时的输入:
  1. sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E91
复制代码
  此时会多出一个堆栈:
  1. sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E92
复制代码
  如今我们能够来构建dockerfile/nginx了(固然,从一入手下手你就能够间接pull这个镜像)
  1. sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E93
复制代码
  完成后,会看到编译好的镜像:
  1. sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E94
复制代码
  如今是时分看到真实的效果了!用上面这个命令运转容器:
  1. sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E95
复制代码
  这个命令会以daemon的体例运转容器,经由过程上面命令检察正在运转的容器:
  1. sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E96
复制代码
  会见你主机的80端口,能够看到nginx的接待页面了!这时候,我们来看看本机的历程sudops-ef:
  1. sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E97
复制代码
  仿佛有些靠近事物的实质了!nginx的历程实践上是在本机上的,这意味着,容器中程序的实行仍旧是利用本机操纵体系的,容器其实不本人构建操纵体系,而是以某种断绝的体例依附本机操纵体系事情。这就是Docker和假造机的实质区分。
  你能够像上面如许,将本机的目次映照给这个”nginx容器”。<sites-enabled-dir>目次下应当有nginx的设置文件片断
  1. sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E98
复制代码
PS:这步笔者没有乐成,日记路径是能够map的,可是sites-enable-dir中的设置一直不可。持续诊断中。
  镜像的共享与Dockfile的分发

  能够共享你的镜像和用来构建的Dockfile分享给社区:


  • Dockerindex是官方的镜像目次,能够从内里失掉大批的预编译好的镜像
  • DockerfileProject一个托管Dockerfile的堆栈汇合
 道理

  总的来讲Docker的中心手艺以下:


  • 定名空间
  • AUFS(advancedmultilayeredunificationfilesystem)
  • cgroup
  因为自己才疏学浅,上面给出一些参考材料,有乐趣的伴侣能够扩大浏览一下,必定会对Docker有更深入的熟悉的:
  PaaSunderthehood,episode1:kernelnamespaces
  PaaSUndertheHood,Episode2:cgroups
  PAASUndertheHood,Episode3:AUFS
  PaaSUndertheHood,Episode4:GRSEC
  PaaSunderthehood,episode5:DistributedroutingwithHipache
  UndertheHood系列
  LXC(Linux假造情况)复杂先容
  docker道理简介
 参考材料

  Docker官方
  Docker:具有分歧性的主动化软件部署
  Dockerfile的教程
  一些Docker的社区资本:
  Segmentfault的Docker子站问答
  Docker中文社区
  Docker中文文档
不同版本的Linux命令数量不一样,这里笔者把它们中比较重要的和使用频率最多的命令。
深爱那片海 该用户已被删除
沙发
发表于 2015-1-17 17:03:18 | 只看该作者
在学习linux的工程中,linux学习方法有很多种,这里是小编的学习心得,给大家拿出来分享一下。
再见西城 该用户已被删除
板凳
发表于 2015-1-24 11:20:02 | 只看该作者
任何人都可以根据自己的喜好来定制适合自己的操作系统,Linux?是抢占式多任务多用户操作系统.
小魔女 该用户已被删除
地板
发表于 2015-2-1 10:04:40 | 只看该作者
为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。
因胸联盟 该用户已被删除
5#
 楼主| 发表于 2015-2-7 04:55:51 | 只看该作者
虽然大家都比较喜欢漂亮的mm,但是在学 linux 的过程中,还是要多和“男人”接触一下:P 遇到问题的时候,出来看说和上网查之外,就是要多用 linux 下的 man 命令找找帮助。
不帅 该用户已被删除
6#
发表于 2015-2-20 23:39:47 | 只看该作者
熟读Linux系统有关知识,如系统目录树,有关内容可购书阅读或搜索论坛。
精灵巫婆 该用户已被删除
7#
发表于 2015-3-6 19:36:14 | 只看该作者
一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。?
飘灵儿 该用户已被删除
8#
发表于 2015-3-13 08:09:26 | 只看该作者
学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者权威肯定,为您学习Linux指明方向。
admin 该用户已被删除
9#
发表于 2015-3-20 17:42:45 | 只看该作者
一定要学好命令,shell是命令语言,命令解释程序及程序设计语言的统称,shell也负责用户和操作系统之间的沟通。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 08:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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