docker从入门到精通-入门篇.pdf
《docker从入门到精通-入门篇.pdf》由会员分享,可在线阅读,更多相关《docker从入门到精通-入门篇.pdf(97页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Docker 从入门到精通1第一部分第一部分 Docker 入门入门第一节第一节 引言引言1 虚拟化技术虚拟化技术整个虚拟化技术的发展有超过半个世纪的历史,当我看到这段历史的时候,不 禁 感叹老美在科技方面有多强悍。虚 拟化一般分为硬件级虚拟化(hardware-level-virtualization)和操作系统级虚拟化(os-level-virtualization) 。 硬件级虚拟化是运行在硬件之上的虚拟化技术, 它的管理软件也就是我们通常说的hypervisor 或者 virtual machine monitor, 它需要模拟的就是一个完整的操作系统,也就是我们通常所说的基于 Hyp
2、er-V 的虚拟化技术,VMWare, Xen, VirtualBox,亚马逊 AWS 和阿里云都是用的这种技术。操作系统级虚拟化是运行在操作系统之上的,它模拟的是运行在操作系统上的多个不同进程,并将其封装在一个密闭的容器里面,也称为容器化技术。Docker 正是容器虚拟化中目前最流行的一种实现。1.1 硬件级虚拟化的历史硬件级虚拟化的历史19 世纪 60 年代:美国出现了第一个虚拟化系统,它是由 IBM 开发的 CP-40Mainframes 系统,虽然这个系统只是在实验室使用,但却为后来的 CP-67 系统奠定了基础。在那个时代,虚拟化系统主要由通用,贝尔实验室和 IBM 主导研发。198
3、7 年:一个非常牛逼的公司 Insignia Solutions 演示了一个称为 SoftPC 的软件模拟器,这个模拟器允许用户在 Unix Workstations 上运行 DOS 应用。在此之前这是不可能办到的,当时一个可以运行 MS DOS 的个人电脑需要1,500 美金,而通过 SoftPC 模拟之后,可降低到 500 美金。可以看出,当时的需求就是在大型工作站上运行微软的 DOS。到了 1989 年的时候,InsigniaSolutions 发布了 Mac 版的 SoftPC,使苹果用户不仅能运行 DOS,还能运行Windows 操作系统。Docker 从入门到精通21997 年:随
4、着 SoftPC 的一炮而红,其他虚拟化公司如雨后春笋般的出现了。在 1997 年,苹果开发了 Virtual PC,后来又卖给了 Connectix。1998 年:真正的王者 VMWare 出现了,他们在 1999 年开始销售 VMWareworkstation,也就是我们很多人使用过得桌面版的虚拟机。2001 年: VMWare 又发行了 ESX 和 GSX, 也就是我们现在经常使用的 ESX-i的前身。2003 年: 之前所说的 Connectix 被微软收购, 后续推出了 Microsoft Virual PC,再之后就没什么音讯了。同年 VMWare 也被 EMC 收购,成为 EMC
5、 迄今最成功的一笔收购。就在这一年,一个开源的虚拟化项目 Xen 启动了,并在2007 年被 Citrix 收购。备注:看了这个历史,不禁内心发出感叹。Insignia Solutions的衰败,Connectix的没落,以及VMWare的半路杀出,都说明了商业和科技的竞争是不间断的,就像是一场长跑,一开始领先的,往往并不是最后的胜利者,你不进步,就肯定会被超越。1.2 操作系统级虚拟化的历史操作系统级虚拟化的历史1982 年:你一定会很惊讶,第一个操作系统级的虚拟化技术是什么。答案就是 chroot,直到现在我们依然在使用的一个系统调用。这个系统调用会改变运行进程的工作目录,并且只能在这个目
6、录里面工作。这种操作其实就是一种文件系统层的隔离。2000 年:FreeBSD jail,真正意义上的第一个功能完整的操作系统级虚拟化技术。所以,真正的容器化技术出现到现在已经过去了 16 年,并不是几年的时间。2005 年:OpenVZ,这是 linux 平台上的容器化技术实现,同时也是 LXC,即 docker 最初使用的容器技术核心实现。2008 年:LXC 发布,这是 docker 最初使用的具体内核功能实现。2013 年:Docker 发布,可以看出,docker 本身是使用了 LXC,同时封装了其他的一些功能。Docker 的成功,与其说是技术的创新,还不如说是一次组合式的创新。备
7、注:曾经听一位老大说过,iPhone你要说有多创新,真的说不上。手机很早就有了,电脑很早就有,触摸屏很早就有,但是苹果将所有这些有机的组合到了一起,再提供极致的用户体验,就产生跨时代的产品。同样Docker所使用的技术也都不是新技术,它将这一系列技术有机的组合到一起,并提供极致的用户体验,就产生Docker 从入门到精通3了垮时代意义的产品。2 基于服务的云计算模式基于服务的云计算模式我们知道传统的服务器或者电脑主机,基本都是一锤子买卖,商家卖给你之后基本就很难再从消费者身上获得其他收入。随着云的概念出现,越来越多的厂商都意识到卖硬件是不可能获得长期利益的,只有服务才是可持续的赢利点。 因此,
8、在 2010 年左右,出现了以大批提供云服务的公司。总体来说基本都可以归为下面几大类的一种或多种:1.基础设施即服务(Infrastructure as a service) ,通常指的是在云端为用户提供基础设施,如:虚拟机、服务器、存储、负载均衡、网络等等。亚马逊的AWS 就是这个领域的佼佼者,国内则以阿里云为首。2.平台即服务(Platform as a service) ,通常指的是在云端为用户提供可执行环境、 数据库、 网站服务器、 开发工具等等。 国外的 OpenShift, Red Hat, Cloudera,Cloud Foundry, Google App Engine 都是这
9、个领域的,当然还有一个非常有名的公司,那就是 dotCloud,后续我会再介绍一下这个公司。3.软件即服务(Software as a service) ,通常指的是在云端为用户提供软件, 如CRM 系统, 邮件系统, 在线协作, 在线办公等等。 比如微软就把自己的 Office搬到了云端,国内的有道、麦客、Tower 都是属于这个领域的。一般认为这三种模式,是最基本的云服务模式,其分层结构如下图:Docker 从入门到精通43 Docker 介绍介绍Docker 主要解决什么问题?主要解决什么问题?Docker 对外宣称的是 Build, Ship and Run,Docker 要解决的核心
10、问题就是快速的干这三种事情。它通过将运行环境和应用程序打包到一起,来解决部署的环境依赖问题,真正做到垮平台的分发和使用。而这一点和 DevOps 不谋而合,通过 Docker 可以大大提升开发、测试和运维的效率,在这个移动互联网的时代,工程师都是很贵的,如果一个工具能节省人力,提升效率,必定会火起来。Docker 的历史的历史之前提到一家公司叫 dotCloud,这家公司是一家法国的公司,最初也是提供PaaS 服务的,他们提供了对多种语言的运行环境支持,如:java, python, ruby,node.js 等。但是,可能叫生不逢时吧,在 PaaS 领域太多的巨头和大企业了,有一天 Solo
11、mon Hykes(Docker 之父)就召集了公司的哥儿几个来商量了一下, 最后得出的结论是,如果要和那些大厂商硬干肯定是不行的,那么干脆就把他们做的项目 Docker 开源了。即使赚不到钱,至少也在开源社区得到一个好名声。因此,在 2013 年 3 月,Docker 正式以开源软件形式发布了。正是由于这次开源,让容器领域焕发了第二春, 截止 2015 年 11 月, Docker 在 github 上收到了 25,600Docker 从入门到精通5个赞,超过 6800 次克隆,以及超过 1100 名的贡献者,成为 20 个最具影响力的github 开源项目。可以说,Docker 是继 Li
12、nux 之后,最让人感到兴奋的系统层面的开源项目。据不完全统计,包括 Docker 公司、Red Hat, IBM, Google Cisco、亚马逊以及国内的华为等等,在为它贡献代码。在美国,几乎所有的云计算厂商都在拥抱 Docker 这个生态圈。Docker 是什么呢?是什么呢?Docker 其实是容器化技术的其中一种实现,根据我们之前的介绍,容器化技术并不是最近才出现的,那为什么 Docker 会如此的火爆呢?我觉得还是这个时代造就的,因为我们处在一个云计算发展异常迅猛的时代,而云计算又是所有移动互联网、IT、以及未来消费者行业的基础。从云计算服务的三层架构,我们可以看出传统的 IaaS
13、 层, 虚拟机是最基础组成部分, 而虚拟机都是基于 Hyper-V架构的,也就是说每一个虚拟机都会运行一个完整的操作系统,一个操作系统至少需要占用 5G 左右的磁盘空间,但是操作系统对于我们来说完全无用的,我们关心的是虚拟主机所能提供的服务。因此,我们迫切需要轻量级的主机,那就是Docker 容器。我们可以看一下,Docker 的基本结构:从上图,我们可以看到,容器由于省去了操作系统,整个层级更简化,可以在单台服务器上运行更多的应用,而这正是 IaaS 所需要的,可能 5G 左右的空间对你来说不是什么大事,但是如果你需要对外提供成千上万的主机,那就是不得Docker 从入门到精通6不考虑的问题
14、,而这正是容器虚拟化要解决的问题。每到这里,我都喜欢举一个例子: 波音公司造飞机肯定不会考虑在水上航行的问题,造船厂也绝对不会考虑要在天上飞的问题,汽车制造公司也不会考虑要在水上跑的问题,那么对于广大的移动互联网公司和云计算公司,也可以只关注最顶层的应用,而不需要去考虑操作系统的问题。4 预备知识预备知识这一节,主要介绍使用 Docker 需要了解的一些预备知识,主要包括 Linux和公有云的使用,如果你对这两块已经比较熟悉,可以直接跳过进入下一节。 为什么我们要介绍这两部分呢?因为 Docker 主要是运行在 Linux 下的,而且它的基础镜像也是基于 Linux,如果你了解 Linux 将
15、会遇到很多障碍;而公有云的话是日后的一个趋势,也是 Docker 为什么这么火热的的促成因素,所以我们也会做简单的介绍。4.1 Linux 快速入门快速入门Linux 是开源软件的鼻祖,Docker 目前基本上都依赖于于 linux 的内核,这一节主要快速简单的介绍一下 linux。除去 Docker 的 原因,我们还有以下原因要使用 linux: 本身开源免费,试想如果你是一个云主机提供商,如果每个主机都要付费,那得要给多少钱啊; 支持众多的开源软件,这也是很大一笔开支,并且可以灵活的自由配置; 基本上 90%以上的互联网公司都是用 linux 作为后端服务器,如果你想学习开发,那么 Lin
16、ux 就是一项基本功; 云主机大多数都是基于 Linux 系统。很多刚开始学习的朋友一听见 Linux 就会害怕,其实根本就没什么可怕的。所有的现代操作系统基本都是类似的,Linux 也有图形化界面,也支持鼠标键盘操作。所不同的是,Linux 下更倾向于用命令行来进行操作,这样有更多的灵活性,你可以认为就跟 windows 下的 cmd 类似。只要你愿意学习,顶多就 1 个月Docker 从入门到精通7就可以快速入手。4.1.1 选取什么发型版本选取什么发型版本Linux 包含了很多的发行版本,包括 ubuntu, centos, redhat, federa 等等,但是他们都是基于 linu
17、x kernel,各个发行版本都会做相应的包装、优化和简化,但是基本上内核版本不会有太大的差异。根据我的经验,我推荐使用 ubuntu 或者centos。Ubuntu 的优点是: 内核更新及时 软件安装和更新方便 GUI 简单实用 CentOS 就是 Red Hat Enterprise 的开源版本, 也是不错选择,考虑到 Ubuntu 对 Docker 的完美支持,我一般推荐使用 Ubuntu。Ubuntu可以在 Docker 的存储部分使用 Aufs,而 CentOS 只能使用 DeviceMapper,前者的性能要稍好一些。4.1.2 使用图形界面还是命令行界面使用图形界面还是命令行界面
18、Linux 的发行版本基本都提供了带图形界面和不带图形界面的版本,也可以在安装后进行调整。很多人认为 Linux 系统就不适合带 IDE 界面的开发环境, 其实是错误的。我们可以在 Linux 下运行 Eclipse 等工具进行开发,而且跟其他平台没有任何差异。所以如果你要进行开发,可以选择图形界面。如果你是刚初学Linux,也可以使用图形界面,来进行过度。但是又回到我之前的飞机-轮船-汽车理论,凡是没有必要的东西都应该去掉,所以如果你是用 Linux 来运行后台程序,最好就选择服务器版,只运行命令行程序,多使命令行也是一种学习和锻炼。4.1.3 英文还是中文英文还是中文一般来说使用 linu
19、x 的用户都是相对专业的用户,我建议一律使用英文操作系统。英文的系统可以强迫你来学习英语,同时系统上不会出现乱码。目前很多一手的技术资料基本都是英文的,英文好是非常大的优势。Docker 从入门到精通84.1.4 安装安装 Ubuntu 14.041.下载镜像 http:/ Linux 常用工具常用工具如果你完全没有 Linux 基础,需要至少熟悉以下工具或者命令: ssh - 远程连接命令 vim - 一个 linux 下命令行编辑文件的工具; ls - 列举文件及文件夹 cp - 拷贝文件 rm - 删除文件 sudo - 以 root 用户执行命令 cat - 查看文件 pwd - 查看
20、当前路径 mkdir - 创建文件夹 find - 查找文件 grep - 搜索文件内容 which - 查看命令在什么位置 tar - 打包和压缩命令 apt-get - Ubuntu 包管理工具4.1.6 启用启用 root 用户用户root 用户是 linux 的最高权限用户,相当于 windows 的超级管理员。我们可以通过下面的方式来启用 root 用户:rootghostcloud:# sudo passwdEnter new UNIX password:Retype new UNIX password:passwd: password updated successfully根据
21、提示输入当前用户的密码,然后再输入 root 的密码。sudo 是以管理员Docker 从入门到精通9身份运行命令。然后通过 su 命令切换到 root 用户.4.1.7 使用使用 vimvim 是 ubuntu 默认的文本编辑器,学习使用 linux 第一步就是学会使用 vi。有的时候 vim 可能是没有安装的,我们需要手动来进行安装:rootghostcloud:# sudo apt-get update & apt-get install vimHit http:/ precise Release.gpgHit http:/ precise ReleaseHit http:/ ubunt
22、u-precise Release.gpg安装成功之后,我们就可以使用 vim 了。vim 是 vi 的升级版,有了很多优化。常用的命令有:i 从当前位置开始插入数据a 在当前位置后面插入数据esc 退出编辑模式: -在vim中执行一条指令,比如wq就是保存加退出/ -搜索文字上下左右键移动光标,vi里面不能用方向键,但是vim里面是可以使用的虽然还有很多命令,但是用上面的基本就能操作了。Docker 从入门到精通104.1.8 配置网络配置网络ubuntu 的网络配置是放在/etc/network/interfaces 下的,我们通过 vim 来进行查看和修改:# This file des
23、cribes the network interfaces available on your system# and how to activate them. For more information, see interfaces(5).# The loopback network interfaceauto loiface lo inet loopback# The primary network interfaceauto eth0iface eth0 inet staticaddress 192.168.1.10netmask 255.255.0.0gateway 192.168.
24、0.1dns-nameservers 61.139.2.69 218.6.200.139修改完毕后,我们需要重启网络,一个比较好的方式是禁用再启用网络:rootghostcloud:# ifdown -a & ifup -a4.1.9 启用启用 SSh ServerSSH 是 Secure Shell 的缩写,是 linux 的标准远程连接工具,通过这个工具我们可以以命令行的方式远程连接到 linux 主机之上。首先我们需要检查在主机上是否安装了 ssh server:rootghostcloud:# dpkg -l | grep openssh-serveriiopenssh-server1
25、:6.6p1-2ubuntu2amd64ecure shell (SSH) server, for secure accessfrom remote machines如果没有安装就不会有下面的输出。接下来,我们需要配置 ssh# vim /etc/ssh/sshd_config#允许Root登录PermitRootLogin yes#允许通过密码进行验证登录PasswordAuthentication yes保存退出后,执行rootghostcloud:# restart ssh然后验证能否本地登录rootghostcloud:# ssh rootlocalhostThe authentici
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- docker 入门 精通
限制150内