Docker核心技术


1、cgroup

即controller group,其重要概念是子系统,首先挂载子系统,然后才有control group。例如cpu子系统,挂载至系统之后,创建一个cgroup节点,之后将要限制的进行id写入,然后写入限制的cpu资源描述,完成对该进程cpu资源的控制。在很多领域可以代替虚拟化技术进行资源隔离限制。

2、lxc

即linux containers,是一种基于容器的操作系统级别的虚拟化技术。借助namespace的隔离机制和cgroup的资源控制来控制和创建容器。

namespace命名空间类似各大语言中的概念,每个namespace中创建的资源都是独立的,互相看不到的。

且是基于一个共享kernel的虚拟化技术,创建容器的时候共享host主机的kernel内核,这样可以提高性能和速度。

但是因为共享内核,所有容器的内核版本都是一样的,没有kvm虚拟技术那么强大,因为kvm技术是会创建独立kernel的,可以在独立的内核上进行很多独立操作。

3、aufs

一种层状的文件系统,在修改文件的时候,aufs会先创建一个副本,在副本上进行修改保存之后,这个副本成为源文件的一个上层文件目录,与docker中镜像与容器的概念一致。

image是不可修改的(原文件),要对其进行更新,只能根据这个image启动一个container(副本),在container中进行操作之后保存成为一个新的image(上层文件)。

然后而并不是每次形成一个新的image都是完全的复制原image一份,宗旨是:相同的公用,不相同的才独立保存。

也就是说,一个新的image中(例如apache服务器),其依赖的各种library都是一个debain image提供的,只有apache服务器的安装部分是其独有的。

使用建议

* 一个container中运行尽量少的app(例如1个);
* 不要什么都往container中装,只装必要的;
* container内不建议有运行期需要修改的配置文件;
* 尽量重用公开的基础镜像;

使用docker命令其实就是和docker daemon打交道,可以将其理解为一个大container,其中运行着各种各样用户启动的container。

/var/lib/docker/graph 中存储着image的分层信息

/var/lib/dokcer/devicemapper/devicemapper/data 存储了image和container的二进制数据文件

/var/lib/docker/devicemapper/devicemapper/matadata 存储了相关元数据

Volume

aufs系统每次修改文件都先复制副本,然后在副本上操作,这样一来对于频繁的写操作会消耗大量资源,这时候应该使用Volume。

直接和本地文件系统关联,和本地写文件没有差别。

高频写文件例子:日志,数据库等。

可将多个容器的Volume挂在到宿主机的同一目录实现文件共享。

–volume-from 容器名,直接挂载到该容器挂载的目录,存在的意义:使用-v是写死的路径,不适合移植,而且在Dockerfile中是不允许这么做的,另外别的容器可能是不知道这个挂载路径的。

Link

–link 容器名:别名

会在容器/etc/hosts中生成一条ip映射记录,并且在防火墙中会生成相应的规则

shipyard

cadvisor

作者:@小黑

Docker核心技术的更多相关文章

  1. Docker 核心技术与实现原理

    提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段使用的玩具了.作为在生产环境中广泛应用的产品,Docker 有 ...

  2. 深入浅出Docker(一):Docker核心技术预览

    Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.Docker提供了一种在安全.可 ...

  3. 后端技术杂谈10:Docker 核心技术与实现原理

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  4. docker核心技术(2)

    鸟瞰容器生态系统 一谈到容器,大家都会想到 Docker. Docker 现在几乎是容器的代名词.确实,是 Docker 将容器技术发扬光大.同时,大家也需要知道围绕 Docker 还有一个生态系统. ...

  5. 【转】Docker 核心技术与实现原理

    转自:https://draveness.me/docker 提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段 ...

  6. Docker 核心技术之Docker Compose

    Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的每一 ...

  7. Docker 核心技术之Dockerfile

    Dockerfile 简介 什么是Dockerfile Dockerfile其实就是根据特定的语法格式撰写出来的一个普通的文本文件 利用docker build命令依次执行在Dockerfile中定义 ...

  8. Docker 核心技术之仓库

    Docker 仓库简介 什么是Docker仓库 Docker仓库就是存放docker镜像并有docker pull方法下载的云环境 Docker仓库分为公有仓库和私有仓库. 公有仓库指Docker H ...

  9. Docker 核心技术之数据管理

    Docker 数据卷简介 为什么用数据卷 宿主机无法直接访问容器中的文件 容器中的文件没有持久化,导致容器删除后,文件数据也随之消失 容器之间也无法直接访问互相的文件 为解决这些问题,docker加入 ...

随机推荐

  1. C++ 迭代器容器学习

    set的一个用法 . difference找差集 union合并set intersection找到交集 #include<iostream> #include<string> ...

  2. python基础===python内置函数大全

    python python内建函数 一.数学运算类 abs(x) 求绝对值1.参数可以是整型,也可以是复数2.若参数是复数,则返回复数的模 complex([real[, imag]]) 创建一个复数 ...

  3. golang之http

    go获取html页面 package main import ( "fmt" "io/ioutil" "net/http" "ne ...

  4. Centos 7.2 双网卡绑定之踩坑

    线上服务器,安装centos7.2 x64最小化安装,需要做链路聚合,双网卡绑定.在centos 6.x 和 centos 7上测试都OK,于是直接开搞. 说明下,以下环境是在虚拟机中实现的: 系统: ...

  5. Delphi2007新功能 -- 有限的栈对象

    今天使用Delphi2007,一个误输入,无意中发现Delphi2007的record类型居然能够和TObject一样定义方法和属性,而且不需要调用类似TObject.Create方法就能生成一个re ...

  6. 在什么情况下Java比C++快?

    转载   http://www.importnew.com/16056.html

  7. python 金字塔图形

    a = 50 y = '*'*(a+1) p = ' ' while a: print(y) y = y[:a-1] y = p + y a = a - 1 for i in range(20): p ...

  8. 《锋利的JQuery》读书要点笔记4——表格表单的操作

    第五章 jQuery对表单,表格的操作以及更多应用 这章主要以一些具体案例讲解了jQuery对表单,表格的常用操作,以及一些常见的jQuery应用,用到的都是上几章说的东西.下面就以具体的案例来展开. ...

  9. spring 整合Junit

    主要参考: https://www.ibm.com/developerworks/cn/java/j-lo-springunitest/ http://www.cnblogs.com/rainisic ...

  10. 解决Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the proxy settings in Gradle.

    有时候打开AndroidStudio项目,没问题啊,昨天还打开没事的,今天打不开了或者你同步了一下项目,报错了.很无辜有没有.有时候多开机几次,多关几次AS,又莫名好了. 尝试过很多方法无效,这个文章 ...