什么是Docker
Docker是开发,运行和部署应用程序的开放管理平台。 开发人员能利用docker 开发和运行应用程序 运维人员能利用docker 部署和管理应用程序
Docker 平台介绍
Docker提供了在一个完全隔离的环境中打包和运行应用程序的能力,这个隔离的环境被称为容器。
由于容器的隔离性和安全性,因此可以在一个主机(宿主机)上同时运行多个相互隔离的容器,互不干预。
Docker已经提供工具和组件(Docker Client、Docker Daemon等)来管理容器的生命周期: 使用容器来开发应用程序及其支持组件。
容器成为分发和测试你的应用程序的单元。 准备好后,将您的应用程序部署到生产环境中,作为容器或协调服务。无论您的生产环境是本地数据中心,云提供商还是两者的混合,这都是一样的。
为什么用 Docker
Docker使您能够将应用程序与基础架构分开,以便您可以快速交付软件。 借助Docker,您可以像管理应用程序一样管理基础架构。
通过利用Docker的方法快速进行运输,测试和部署代码,您可以显着缩短编写代码和在生产环境中运行代码之间的延迟。
如:
- 开发人员在本地编写代码,可以使用Docker同事进行共享,实现协同工作。
- 使用Docker开发完成程序,可以直接对应用程序执行自动和手动测试。
- 当开发人员发现错误或BUG时,可以直接在开发环境中修复后,并迅速将它们重新部署到测试环境进行测试和验证。
- 利用Docker开发完成后,交付时,直接交付Docker,也就意味着交付完成。
- 后续如果有提供修补程序或更新,需要推送到生成环境运行起来,也是一样的简单。
Docker主要解决的问题:
- 保证程序运行环境的一致性;
- 降低配置开发环境、生产环境的复杂度和成本;
- 实现程序的快速部署和分发。
Docker 引擎介绍
Docker Engine是一个包含以下组件的 客户端-服务端(C/S)应用程序
- 服务端 --- 一个长时间运行的守护进程(Docker Daemon)
- REST API --- 一套用于与Docker Daemon通信并指示其执行操作的接口
- 客户端 --- 命令行接口CLI( Command Line Interface)
CLI利用Docker命令通过REST API直接操控Docker Daemon执行操作
Docker Daemon负责创建并管理Docker的对象(镜像、容器、网络、数据卷)
Docker结构概览图
Docker 结构简介
Docker客户端(Docker Client)
- Docker客户端(Docker Client)是用户与Docker进行交互的最主要方式。
- 当在终端输入docker命令时,对应的就会在服务端产生对应的作用,并把结果返回给客户端。
- Docker Client除了连接本地服务端,通过更改或指定DOCKER_HOST连接远程服务端。
Docker服务端(Docker Server)
- Docker Daemon其实就是Docker 的服务端。
- 它负责监听Docker API请求(如Docker Client)并管理Docker对象(Docker Objects),如镜像、容器、网络、数据卷等
Docker Registries
- 俗称Docker仓库,专门用于存储镜像的云服务环境.
- Docker Hub就是一个公有的存放镜像的地方,类似Github存储代码文件。同样的也可以类似Github那样搭建私有的仓库。
Docker 对象
- (Docker Objects) 镜像:一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。
- 容器:镜像被运行起来后的实例。
- 网络:外部或者容器间如何互相访问的网络方式,如host模式、bridge模式。
- 数据卷:容器与宿主机之间、容器与容器之间共享存储方式,类似虚拟机与主机之间的共享文件目录。
Docker 底层技术了解
Docker使用Go语言实现。
Docker利用linux内核的几个特性来实现功能:
- 利用linux的命名空间(Namespaces)
- 利用linux控制组(Control Groups)
- 利用linux的联合文件系统(Union File Systems)
- 这也就意味着Docker只能在linux上运行。
- 在windows、MacOS上运行Docker,其实本质上是借助了虚拟化技术,然后在linux虚拟机上运行的Docker程序。
容器格式( Container Format ):
- Docker Engine将namespace、cgroups、UnionFS进行组合后的一个package,就是一个容器格式(Container Format)。Docker通过对这个package中的namespace、cgroups、UnionFS进行管理控制实现容器的创建和
- 生命周期管理。
- 容器格式(Container Format)有多种,其中Docker目前使用的容器格式被称为libcontainer
Namespaces(命名空间):为Docker容器提供操作系统层面的隔离
- 进程号隔离:每一个容器内运行的第一个进程,进程号总是从1开始起算
- 网络隔离:容器的网络与宿主机或其他容器的网络是隔离的、分开的,也就是相当于两个网络
- 进程间通隔离:容器中的进程与宿主机或其他容器中的进程是互相不可见的,通信需要借助网络
- 文件系统挂载隔离: 容器拥有自己单独的工作目录
- 内核以及系统版本号隔离:容器查看内核版本号或者系统版本号时,查看的是容器的,而非宿主机的
Control Groups(控制组-cgroups):为Docker容器提供硬件层面的隔离
- 控制组能控制应用程序所使用的硬件资源。
- 基于该性质,控制组帮助docker引擎将硬件资源共享给容器使用,并且加以约束和限制。如控制容器所使用的内存大小。
- Union File Systems(联合文件系统--UnionFS):利用分层(layer)思想管理镜像和容器
Docker 概览的更多相关文章
-
Docker概览
Docker.xmind下载
-
docker 概览 (1)
Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完全使 ...
-
Kubernetes &; Docker
Docker核心技术原理及其应用 Docker 概览 Docker版本与安装介绍 Docker 核心技术之镜像 Docker 核心技术之容器 Docker 核心技术之容器与镜像 Docker 核心技术 ...
-
Docker 生态概览
Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker 自从发布以来发生了很多的变化,并且有些 ...
-
docker底层技术概览
docker解决了云计算环境难于分发并且管理复杂,而用KVM.Xen等虚拟化又浪费系统资源的问题.Docker最初是基于lxc构建了容器引擎,为了提供跨平台支持,后又专门开发了libcontainer ...
-
Docker生态概览
百花齐放的容器技术 虽然 docker 把容器技术推向了巅峰,但容器技术却不是从 docker 诞生的.实际上,容器技术连新技术都算不上,因为它的诞生和使用确实有些年头了.下面的一串名称肯能有的你都没 ...
-
Docker容器编排器概览
就像Apple推出iPhone让智能手机变成主流,Docker让容器变成了主流.自从项目发布以来,Docker着重于提升开发者的体验.基本理念是可以在整个行业中,在一个标准的框架上,构建.交付并且运行 ...
-
初识Docker和Windows Server容器
概览 伴随着Windows Server 2016 Technical Preview 3 (TP3)版本的发布,微软首次提供了Windows平台下地原生容器.它集成了Docker对Windows S ...
-
docker好文收藏
深入浅出Docker(一):Docker核心技术预览 2. 核心技术预览 Docker核心是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观.我们从虚拟化方法的四个方面:隔离性.可配额/可度 ...
随机推荐
-
使用SecureCRT远程链接Ubuntu出现 Change of username or service not allowed的问题
RT: 首先是确认ubuntu上有运行 sshd服务的 但是用SecureCRT链接时报错,默认用户名是root: 打开ssh_config检查下是否禁止直接用root登陆 这句 改成yes o ...
-
jboss hello world
http://developers.redhat.com/products/devstudio/get-started/ 1. 下载 Red Hat JBoss Developer studio 2. ...
-
【python】入门学习(四)
函数: 定义函数 #area.py from math import pi def area(radius): """Return the area of a circl ...
-
Memcached通用类(基于enyim.com Memcached Client)
一.如果用官方提供的方法,在web.config里面配置好了各个参数和服务器IP.如下图: <?xml version="1.0"?> <configuratio ...
-
MFC之CToolTipCtrl按钮提示(消息捕获和消息传递)
记得以前写对话框时,按钮直接有一个tips属性,可以添加默认值,不记得是C#还是啥了,今天忽然想给几个按钮添加提示信息,就捣鼓了一下. 头文件中创建CToolTipCtrl变量,然后在初始化时激活使用 ...
-
Android 从ImageView中获取Bitmap对象方法
showImageView.setDrawingCacheEnabled(true); Bitmap bitmap=showImageView.getDrawingCache(); showImage ...
-
BZOJ3237: [Ahoi2013]连通图
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3237 cdq分治+缩点. 可以每次处理的时候把除l~r之外的边的端点都连起来.然后去跑cdq分 ...
-
MySQL中的查询子句
查询语句 字句名称 使用目的 select 确定结果集中应该包含那些列 from 指明所要提取数据的表,以及这些表是如何连接的 where 过滤不需要的数据 group by 用于对具有想用列值的行进 ...
-
Axis创建webservice客户端和服务端
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/ ...
-
poj1741 Tree(点分治)
题目链接:http://poj.org/problem?id=1741 题意:求树上两点之间距离小于等于k的点对的数量 思路:点分治模板题,推荐一篇讲的非常好的博客:https://blog.csdn ...