`

(转)Docker 终极指南

 
阅读更多

Docker是一个相对较新且发展非常快速的项目,可用来创建非常轻量的“虚拟机”。注意这里的引号非常重要,Docker创建的并非真正的虚拟机,而更像是打了激素的chroot,嗯,是大量的激素。

在我们继续之前,我先说下,截至目前(2015年1月4日)为止,Docker只能在Linux上工作,暂不支持Windows或OSX(译者注:不直接支持)。我稍后会讲到Docker的架构,你会明白其中的原因。所以,如果想在非Linux平台上使用Docker,你需要在虚拟机里运行Linux。


本教程有三个目标:说明Docker解决的问题、说明它如何解决这个问题、以及说明它使用了哪些技术来解决这个问题。这不是一篇教你怎么运行安装Docker的教程,Docker此类教程已经很多,包括Docker作者的在线互动教程。本文最后有一个步骤说明,目的是用一个明确的现实世界的例子来串联文章中所有的理论,但不会太过详细。

 

Docker能做什么?

Docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源要求过高而无法解决的问题。Docker能处理的事情包括:

  • 隔离应用依赖
  • 创建应用镜像并进行复制
  • 创建容易分发的即启即用的应用
  • 允许实例简单、快速地扩展
  • 测试应用并随后销毁它们

Docker背后的想法是创建软件程序可移植的轻量级容器,让其可以在任何安装了Docker的机器上运行,而不用关心底层操作系统,类似船舶使用的集装箱,野心勃勃的他们成功了!

 

Docker究竟做了什么?

这一节我不会说明Docker使用了哪些技术来完成它的工作,或有什么具体的命令可用,这些放在了最后一节,这里我将说明的是Docker提供的资源和抽象。

Docker两个最重要的概念是镜像和容器。除此之外,链接和数据卷也很重要。我们先从镜像入手。

 

镜像

Docker的镜像类似虚拟机的快照,但更轻量,非常非常轻量(下节细说)。

创建Docker镜像有几种方式,多数是在一个现有镜像基础上创建新镜像,因为几乎你需要的任何东西都有了公共镜像,包括所有主流Linux发行版,你应该不会找不到你需要的镜像。不过,就算你想从头构建一个镜像也有好几种方法

要创建一个镜像,你可以拿一个已有的镜像,对它进行修改来创建它的子镜像。实现的方式有两种:在一个文件中指定一个基础镜像及需要完成的修改;或通过“运行”一个镜像,对其进行修改并提交。不同方式各有优点,不过一般会使用第一种的文件方式来指定所做的变化。

镜像拥有唯一ID,以及一个供人阅读的名字和标签对。镜像可以命名为类似ubuntu:latest、ubuntu:precise、django:1.6、django:1.7等等。

 

容器

现在说容器了。你可以从镜像中创建容器,这等同于从快照中创建虚拟机,不过更轻量。应用是由容器运行的。

举个例子,你可以下载一个Ubuntu的镜像(有个叫docker registry的镜像公共仓库),做一些修改:安装Gunicorn和你的Django应用及其依赖;然后从该镜像中创建一个容器,在它启动后运行你的应用。



 容器与虚拟机一样,是隔离的(有一点要注意,我稍后会讨论到)。它们也拥有一个唯一ID和唯一的供人阅读的名字。容器有必要对外暴露服务,因此Docker允许暴露容器的特定端口。



 

容器与虚拟机相比有两个主要差异。第一个是:它们被设计成运行单进程,无法很好地模拟一个完整的环境(如果那是你需要的,请看看LXC)。你可能会尝试运行runit或supervisord实例来启动多个进程,但(以我的愚见)这真的没有必要

单进程与多进程之争非常精彩。你应该知道的是,Docker设计者极力推崇“一个容器一个进程的方式”,如果你要选择在一个容器中运行多个进程,那唯一情况是:出于调试目的,运行类似ssh的东西来访问运行中的容器,不过docker exec命令解决了这个问题。

容器和虚拟机的第二个巨大差异是:当你停止一个虚拟机时,可能除了一些临时文件,没有文件会被删除;当你停止一个Docker容器,对初始状态(创建容器所用的镜像的状态)做的所有变化都会丢失。这是使用Docker时必须做出的最大思维变化之一:容器是短暂和一次性的

 

数据卷

如果你的电子商务网站刚收到客户支付的3万元,内核崩溃了,所有数据库变化都丢失了……对你或Docker来说都不是一件好事,不过不要担心。Docker允许你定义数据卷——用于保存持久数据的空间。Docker强制你定义应用部分和数据部分,并要求你将它们分开。

卷是针对容器的,你可以使用同一个镜像创建多个容器并定义不同的卷。卷保存在运行Docker的宿主文件系统上,你可以指定卷存放的目录,或让Docker保存在默认位置。保存在其他类型文件系统上的都不是一个卷,稍后再具体说。



 

链接

链接是Docker的另一个重要部分。

容器启动时,将被分配一个随机的私有IP,其它容器可以使用这个IP地址与其进行通讯。这点非常重要,原因有二:一是它提供了容器间相互通信的渠道,二是容器们将共享一个本地网络。我曾经碰到一个问题,在同一台机器上为两个客户启动两个elasticsearch容器,但保留集群名称为默认设置,结果这两台elasticsearch服务器立马变成了一个自主集群。

要开启容器间通讯,Docker允许你在创建一个新容器时引用其它现存容器,在你刚创建的容器里被引用的容器将获得一个(你指定的)别名。我们就说,这两个容器链接在了一起。

因此,如果DB容器已经在运行,我可以创建web服务器容器,并在创建时引用这个DB容器,给它一个别名,比如dbapp。在这个新建的web服务器容器里,我可以在任何时候使用主机名dbapp与DB容器进行通讯。

Docker更进一步,要求你声明容器在被链接时要开放哪些端口给其他容器,否则将没有端口可用。



 

Docker镜像的可移植性

在创建镜像时有一点要注意。Docker允许你在一个镜像中指定卷和端口。从这个镜像创建的容器继承了这些设置。但是,Docker不允许你在镜像上指定任何不可移植的内容。

例如,你可以在镜像里定义卷,只要它们被保存在Docker使用的默认位置。这是因为如果你在宿主文件系统里指定了一个特定目录来保存卷,其他使用这个镜像的宿主无法保证这个目录是存在的。

你可以定义要暴露的端口,但仅限那些在创建链接时暴露给其他容器的端口,你不能指定暴露给宿主的端口,因为你无从知晓使用那个镜像的宿主有哪些端口可用。

你也不能在镜像上定义链接。使用链接要求通过名字引用其他容器,但你无法预知每个使用那个镜像的宿主如何命名容器。

镜像必须完全可移植,Docker不允许例外。

以上就是主要的部分,创建镜像、用它们创建容器,在需要时暴露端口和创造卷、通过链接将几个容器连接在一起。不过,这一切如何能在不引起额外开销条件下达成?



 

  • 大小: 94.9 KB
  • 大小: 17.7 KB
  • 大小: 47.5 KB
  • 大小: 44.1 KB
  • 大小: 43.4 KB
分享到:
评论

相关推荐

    Docker 入门终极指南,别再说不会用Docker了!.zip

    计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习...

    数据的守护者:Docker卷存储的终极指南

    Docker是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口...

    驾驭Docker Machine:创建虚拟主机的终极指南

    Docker是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口...

    驾驭Docker Hub:创建和管理镜像的终极指南

    Docker是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口...

    破解隔离:Docker容器访问宿主机资源的终极指南

    Docker是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口...

    Docker空间清理大作战:释放存储空间的终极指南"

    Docker是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口...

    Docker化你的Maven项目:使用docker-maven-plugin的终极指南

    Maven是一个项目管理和构建自动化工具,主要服务于基于Java的软件项目。它是由Apache软件基金会提供的一个开源工具,使用一种名为Project Object Model (POM) 的XML文件来描述项目的构建过程、依赖关系和其他配置...

    Prometheus入门终极指南.doc

    Prometheus 入门终极指南 Prometheus 是一个开源监控系统,前身是 SoundCloud 的告警插件。从 2012 年开始,Prometheus 逐渐被大量公司使用。该项目的社区也便跃起来,收到越来越多的贡献。在 2016 年继 Kurberntes...

    medializr:终极medializr的Docker配方

    媒介在新的Ubuntu 20.04服务器上(除了OpenSSH Server之外,无需选择安装指南中的任何其他软件),您可以按以下顺序运行以下命令,它应该可以正常工作此外,本指南还假定您将Cloudflare用作DNS提供程序。 首先确保...

    阿里巴巴Java开发手册终极版v1.3.0

    《阿里巴巴Java开发手册终极版v1.3.0》是阿里巴巴集团为了提升Java开发的规范性和效率,结合多年的企业级开发经验所推出的权威指南。这份手册涵盖了从基础编码规范、异常处理、并发编程到系统设计等多个方面的内容,...

    IT人必知必会的100个课程-终极大揭秘

    丁明一讲师的权威Docker指南课程、贺永康讲师关于使用Docker部署Nextcloud云盘服务的课程,都展示了Docker在当前IT技术中的重要性。 4. 云计算与虚拟化:陈涛讲师的KVM虚拟化进阶与提高视频课程和王春海讲师的使用...

    jenkins-pipeline

    glass_tilted_left:记录指南 :page_with_curl:ServiceMesh指南 :globe_with_meridians:Docker开发基础步 :check_mark: 视频 :movie_camera: 源代码 使用Dockerfiles (.NET,Golang,Python,NodeJS)使用代码(.NET...

    阿里巴巴Java开发手册终极版v1.3.0(1).zip

    《阿里巴巴Java开发手册终极版v...总的来说,《阿里巴巴Java开发手册终极版v1.3.0(1)》是Java开发者必备的参考指南,它不仅规范了编码习惯,还涉及了软件开发的全生命周期,有助于提升团队的整体技术水平和项目质量。

    nice-jade-collecting:Nice Jade Collecting(优秀文章脚本工具网站)

    Mac必备软件渐集之ZSH-终极Shell Listary Everything Wox Launch Cleaver快速制作网页PPT Rake让Jekyll写博更优雅 Npm Scripts 使用指南 Swagger-ui:打造 API 文档神器 Docker —— 从入门到实践 Github ...

Global site tag (gtag.js) - Google Analytics