您的位置:首页 > 运维架构 > Docker

docker 简介

2016-03-14 20:11 519 查看

1. docker的功能

docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源要求过高而无法解决的问题
docker能处理的问题:隔离应用依赖

创建应用镜像并进行复制

创建容易分发的即启即用的应用

允许实例简单,快速地扩展

测试应用并随后销毁它们

docker背后的想法是创建软件程序可移植的轻量容器,让其可以在任何安装了docker的机器上运行,而不用关心底层操作系统。

2. docker的概念

docker两个重要的概念:镜像和容器。除此之外,链接和数据卷也很重要。镜像
docker镜像类似虚拟机的快照,但更轻量,非常非常轻量。
创建docker镜像有几种方式,多数是在一个现有镜像基础上创建新镜像,因为你需要的任何东西大多数都有公告镜像,包括所有的主流linux发行版。重新构建一个镜像,也有好几种方法:
要创建一个镜像,你可以拿一个镜像,对它进行修改来创建它的子镜像。实现这个目的的方式有两种:在一个文件中指定一个基础镜像及需要完成的修改;或通过‘运行’一个镜像,对其进行修改并提交。一般会使用文件来指定所做的变化。

容器:
你可以从镜像中创建容器,这等同于从快照中创建虚拟机,不过更轻量,应用是由容器运行的。
例:
你可以下载一个Ubuntu的镜像,通过安装Gunicorn和Django应用及其依赖项来完成对它的修改,然后从该镜像中创建一个容器,在它启动后运行你的应用。
容器与虚拟机一样的,是隔离的,它们也拥有一个唯一ID和唯一供人阅读的名字,容器对外公开服务是必要的,因此docker允许公开容器的特定端口。
与虚拟机相比,容器有一个很大的差异,它们被设置用来运行单进程,无法很好的模拟的环境。容器和虚拟机的第二个巨大的差异是,当你停止一个虚拟机时,可能除了一些临时文件,没有文件会被删除;当你停止一个docker容器,对初始状态做的所有变化都会丢失。
容器是设计来运行一个应用的,而非一台机器,把容器当虚拟机用,会失去很多灵活性,因为docker提供了用于分离应用和数据的工具,使得你可以快捷的更新运行中的代码,而不影响数据。

数据卷
数据卷让你可以不受容器生命周期影响进行数据持久化,它们表现为容器内的空间,但实际保持在容器之外,从而允许你在不影响数据的情况下销毁,重建,修改,丢弃容器。docker云溪你定义应用部分和数据部分,并提供工具让你可以将它们分开。使用docker时必须做出的最大思维变化之一就是:容器应该是短暂和一次性的。
卷是针对容器的,你可以使用同一个镜像创建多个容器并定义不同的卷,卷保存在运行docker的宿主文件系统上,你可以指定卷存放的目录,或让docker保存在默认位置。卷还可以用来在容器间共享数据。

链接
链接是docker的另一个重要部分。
容器启动时,将被分配一个随机的私有ip,其他容器可以使用这个ip地址与其进行通讯。这个非常重要,原因有二:一是它提供了容器间相互通信的渠道,二是容器将共享一个本地网络。
开启容器间通信,docker允许你在创建一个新容器时引用其他现存容器,在你刚创建的容器里被引用的容器将获得一个可指定的别名,我们就说,这两个容器链接在一起。
因此,如果DB容器已经在运行,我们可以在创建wev服务器容器,并在创建时引用这个DB容器,给它一个别名,比如dbapp,在这个新建的web服务器容器里,我们可以在任何时候使用主机名dbapp和DB容器进行通信。
docker更进一步,要求你声明容器在被链接时要开放哪些端口给其他容器,否则将没有端口可用。

docker镜像的可移植性
在创建镜像时有一点要注意,docker允许你在一个镜像中指定卷和端口。从这个镜像创建的容器继承了这些设置,但是docker不允许你在镜像上指定任何不可移植的内容。例:
你可以在镜像里定义卷,只要它们被保持了在docker使用的默认位置,这是因为如果你在宿主文件系统你指定了一个特定目录来保存卷,其他使用这个镜像的宿主无法保证这个目录是存在的。
你可以定义要公开的端口,但仅限那些在创建链接时公开给其他容器的端口,你不能指定公开给宿主的端口,因为你无从知晓使用那个镜像的宿主有哪些端口可用。
你也不能在镜像上定义链接,使用链接要求通过名字引用其他容器,但你无法预知每个使用那个镜像的宿主如何命名容器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker