docker 简介

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使用的默认位置,这是因为如果你在宿主文件系统你指定了一个特定目录来保存卷,其他使用这个镜像的宿主无法保证这个目录是存在的。 
    你可以定义要公开的端口,但仅限那些在创建链接时公开给其他容器的端口,你不能指定公开给宿主的端口,因为你无从知晓使用那个镜像的宿主有哪些端口可用。 
    你也不能在镜像上定义链接,使用链接要求通过名字引用其他容器,但你无法预知每个使用那个镜像的宿主如何命名容器。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章