docker(一)
一、docker 概述
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何借口,几乎没有性能开销,可以很容易地在机器和数据中心运行。最重要的是,他们不依赖与任何语言、框架或者包装系统。
现在接触的软件是怎么发布的?
windows 下的 2-16-office.exe,不能在 xp 上运行;mk.rpm 在 redhat 系统 linux 上运行,但是不能再其他linux 版本上运行。现在发布的软件包和系统相关。
LXC 为 linux container 的简写,linux container 容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其它复杂性。
LXC 主要通过来自 kernel 的 namespace 实现每个用户实例之间的相互隔离,通过cgroup 实现对资源的配额和度量。

总结:相对 VM 虚拟机,少了虚拟操作系统这一层,所以 docker 效率高。
二、工作流程。

工作流程:服务器 A 上运行 docker Engine 服务,在 docker Engine 上启动很多容器 container,从外网 Docker Hub 上把 image 操作系统镜像下载下来, 放到 container 容器运行,这样,一个容器实例就运行起来了。
dockerhub:dockerhub 是 docker 官方的镜像存储站点,其中提供了很多镜像提供用户下载,如ubuntu,centos 等系统镜像。需要用户注册一个账号,在网站上创建一个 docker 仓库。
三、Docker 核心技术
1、Namespace -- 实现 container 的进程,网络,消息,文件系统和主机名的隔离。
2、cgroup -- 实现对资源的配额和度量。
注:cgroup 的配额,可以指定实例使用的 cpu 个数,内存大小等。
四、docker特性:
- 文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
- 资源隔离:系统资源,像 CPU 和内存等可以分配到不同的容器中,使用cgroup。
- 网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和 IP 地址。
- 日志记录:Docker 将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实例检索或批量检索。
- 变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
- 交互式 shell:Docker 可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
五、优缺点
优点:
- 一些优势和 VM 一样,但不是所有都一样
- 比 VM 小,比VM快,Docker 容器的尺寸减小相比整个虚拟机大大简化了分布到云分发时间和开销。Docker 启动一个容器实例时间很短,一两秒可以启动一个实例。
- 对于在笔记本电脑,数据中心的虚拟机,以及任何云上,运行相同的没有变化的应用程序,IT 的发布速度更快。
- Docker 是一个开放平台,构建,发布和运行分布式应用程序。
- Docker 使应用程序能够快速从组件组装和避免开发和生产环境之间的摩擦。
- 可以部署在公司局域网或云虚拟机使用它
- 开发人员并不关心具体哪个linux操作系统
- 使用docker,开发人员可以根据所有依赖关系构建相应的软件,针对他们选择的操作系统。然后,在部署时一切是完全一样的,因为一切都在 dockerimage的容器上运行。
缺点:
- docker 用于应用程序时是最有用的,但不包含数据,日志,跟踪和数据库等通常应放在 docker 容器外,一个容器的镜像通常都很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如使用NFS,ipsan,MFS等。一句话:docker 只计算,存储交给别人。
docker(一)的更多相关文章
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- Docker 第一篇--初识docker
已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...
- 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)
环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...
- docker for mac 学习记录
docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...
- scrapy爬虫docker部署
spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...
- [原][Docker]特性与原理解析
Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...
- 开发者的利器:Docker 理解与使用
困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...
- 使用python自动生成docker nginx反向代理配置
由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...
- 微服务与Docker介绍
什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...
随机推荐
- leetcode - [4]Sort List
Sort a linked list in O(n log n) time using constant space complexity. 思路:采用归并排序或者快速排序 #include < ...
- android sqlite select count
用sqlite 查数据多次都没有成功,原来是sql语句不对. 正确的示例如下: select count(*) as mycount from kehu
- hdu 2227
和之前的hdu3030都快一样了 可以参考之前的题解 #include <iostream> #include <cstdio> #include <cstdlib> ...
- Python自动化开发 -进程、线程和协程(二)
本节内容 一.线程进程介绍 二. 线程 1.线程基本使用 (Threading) 2.线程锁(Lock.RLock) 3.信号量(Semaphore) 4.事件(event) 5.条件(Conditi ...
- php开发工具,zendstudio13使用方法补丁
官网原版下载http://downloads.zend.com/studio ... win32.win32.x86.exe 破解补丁:链接:http://pan.baidu.com/s/1gdi4U ...
- 「雅礼集训 2017 Day2」解题报告
「雅礼集训 2017 Day2」水箱 我怎么知道这种题目都能构造树形结构. 根据高度构造一棵树,在树上倍增找到最大的小于约束条件高度的隔板,开一个 \(vector\) 记录一下,然后对于每个 \(v ...
- 02_python_while循环/格式化输出/逻辑运算
一. while循环 1.基本形式 while 条件: 循环体 # 判断条件是否为真,如果真,执行代码块.然后再次判断条件是否为真.如果真继续执行代码块...直到条件变成了假.循环退出 ps:死循环 ...
- 关于scanf、getchar、getch、getche缓冲区分析——C语言
缓冲区 根据数据刷新的时机可以将缓冲区的类型分为:全缓冲.行缓冲.无缓冲 (注意:Windows下的输出设备没有缓冲区,意思是printf是无缓冲的,但是在Linux下printf就是行缓冲的,至于为 ...
- 栈(链式栈)----C语言
链式栈:就是一种操作受限的单向链表,对单向链表还不了解的可先看一下之前的一篇关于单向链表的随笔,链表(单向链表的建立.删除.插入.打印),理解了单向链表后再来看链式栈就比较轻松了 链式栈的操作一般含有 ...
- 分组,命名分组,url的命名和反向解析
1.位置分组 匹配到参数,按照位置参数的方式传递给视图函数 视图函数需要定义形参接收变量 1.写在url里面的: # 删除 url(r'^del_class/(\d+)',views.del_clas ...