Docker

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

沙箱(网络编程虚拟执行环境)

Sandboxie(又叫沙箱,沙盘)即是一个虚拟系统程序,允许你在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它长造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。其为一个独立的虚拟环境,可用以测试不受信任的应用程序或上网行为。
沙箱是一种按照安全策略限制程序行为的执行环境。早起主要用于测试可疑软件等,比如黑客们为了使用某种病毒或者不安全产品,我那个网可以将它们在沙箱中运行。
经典的沙箱熊的实现途径一般是通过拦截系统调用,监视程序行为,然后依据用户定义的策略来控制和限制程序对计算机资源的使用,比如改写注册表,读写磁盘等。
在所有平台上,,远程代码可以做什么?它可以显示图像、播放音乐、获得用户的键盘输入和鼠标点击,以及将用户的输入送回加载代码所在的主机。这种受限制的执行环境称为沙箱(sandbox)。沙箱中运行的代码不能够修改或查看用户系统。
在沙箱中的程序有下列限制:
  • 不能运行任何本地的可执行程序
  • 不能从本地计算机文件系统中读取任何信息,也不能往本地计算机文件系统中写入任何信息。
  • 不能查看除java版本信息和少数几个无害的系统详细信息外的任何有关计算机的信息。特别是,在沙箱中的代码不能查看用户名、E-mail地址等信息。

Docker能做什么?

Docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源要求过高而无法解决的问题。Docker能吃力的事情包括:
  • 隔离应用依赖
  • 创建应用镜像并进行复制
  • 穿件容易分发的即启即用的应用
  • 允许实例简单、快速的扩展
  • 测试应用并随后销毁它们
Docker背后的想法是创建软件程序可移植的轻量容器,让其可以在任何安装了Docker的机器上运行,而不用关心底层操作系统,就像野心勃勃的造船者们成功创建了集装箱而不需要考虑装在哪中船舶上一样。

Docker的两个重要概念

Docker两个最重要的概念是镜像和容器。除此之外,连接和数据卷也很重要。

镜像

Docker的镜像类似虚拟机的快照,但更轻量。
创建Docker镜像有几种方式,多数是在一个现有镜像基础上创建新镜像,因为几乎你需要的任何东西都有了公共镜像,包括主流linux发行版,你应该不会找不到你需要的镜像。
要创建一个镜像,你可以拿一个镜像,对它进行修改来创建他的子镜像。实现前述目的的方式有两种:
  • 在一个文件中指定一个基础镜像及需要完成的修改
  • 通过“运行”一个镜像,对其进行修改并提交。
镜像拥有唯一的ID,以及一个供人阅读的名字和标签对。镜像可以命名为类似ubutu:latest、ubutu:precise、django:1.6、django:1.7等。

容器

现在说容器了。你可以从镜像中创建容器,这等同于从快照中创建虚拟机,不过更轻量。 应用是由容器运行的
容器与虚拟机一样,是隔离的。它们也拥有一个唯一ID和唯一的供人阅读的名字。容器对外公开服务是必要的,因此Docker允许公开容器的特定端口。
与虚拟机相比,容器有一个很大的差异,它们被设计用来运行单进程,无法很好的模拟一个完整的环境。Docker设计者极力推崇“一个容器一个进程的方式”,如果你要选择在一个容器中运行多个京城,那唯一的情况是:处于调试目的,运行类似ssh的东西来访问运行中的容器,不过docker exec命令解决了这个问题。

数据卷

数据卷让你可以不受容器生命周期影响进行数据持久化。它们表现为容器内的空间,但实际保存在容器之外,从而允许你在不影响数据的情况下销毁、重建、修改、丢弃容器。

连接

容器启动时,将被分配一个随机的私有IP,其他容器可以使用这个IP地址与其进行通讯。这点非常重要:
  • 一是它提供了容器间相互通信的渠道
  • 二是容器将共享一个本地网络。
Docker要求你声明容器在被连接时要开放哪些端口给其他容器,否则将没有端口可用。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐