Docker 技术学习
Docker 简介
什么是容器 :
是一种虚拟化的方案,与传统的虚拟机不同,传统的虚拟机是将一台或者多台独立的机器虚拟于独立的硬件之上,而容器是直接运行在操作系统内核之上的内核空间,容器虚拟化也被称为操作系统虚拟化。
操作系统级别的虚拟化
只能运行相同或者相似内核的操作系统
依赖与Linux内核特性:Namespace 和Cgroups(Control Group)
容器技术优点 :
1.虚拟机对内存和CPU的损耗相当大
2.Docker磁盘占用空间更少,虚拟机需要包含完整的操作系统。
3.容器技术,只需要包含应用及其依赖的库。
什么是Docker ?
将应用程序自动部署到容器的开源引擎
Go语言开源引擎,Github 地址 https://github.com/docker/docker
2013年初 dotCloud(现在的Docker公司) 基于Apache 2.0 开源授权协议发行
应用程序部署引擎,目标就是提供一个轻量快速的引擎。
Docker 的目标(特点)
提供简单轻量的建模方式 :docker非常容易上手,用户只需要几分钟就可以把自己的程序docker化,大多数的docker容器只需要不到1s就可以运行起来。
职责的逻辑分离:使用docker开发人员只要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器 ,Docker的设计目的就是加强开发人员写代码的开发环境与应用程序运行和部署的环境的一致性。
快速高效的开发生命周期: 缩短代码到开发、测试、部署上线运行的周期。让你的应用程序具备可一致性。在容器中开发,以容器的模式交付和分发。
鼓励使用面向服务的架构: docker推荐一个容器只运行一个应用程序或者进程,这样就形成了分布式的应用程序模型,应用程序或者服务就可以表示为一些了内部互相的应用程序。高内聚、低耦合,单一任务。分布式应用程序是的扩展或者活调试应用程序变得简单。避免在同一服务器上部署不同服务时可能带来的不同服务之间的不同影响, 这样在运行过程中出现问题比较容易定位问题所在。
Docker的使用场景
使用docker容器开发、测试、部署服务。docker本身比较轻量化,开发人员可以可以开发、分享容器,容器可以在开发环境中创建,然后提交给测试和进入生产环境。
创建隔离的运行环境.
搭建测试环境:开发者利用docker在本地搭建测试环境。搭建用来测程序在不同系统下的兼容性,
构建多用户的平台级服务(PaaS)基础设施
提供软件级服务(SaaS)应用程序
高性能、超大规模的宿主机部署。 目的巨大部分的公有云服务都提供了对docker的支持。
Docker 的基本组成
Docker Client 客户端:
Docker Daemon 守护进程
Docker Image 镜像
Docker Container 容器
-
Dcoker Registry 仓库
Docker 客户端/守护进程 , 是C/S 架构程序, 客户端想守护进程(服务端) 发送请求,客户端对服务器端的访问既可以是通过本地也可以通过远程,即 本地/远程 。Docker的CS架构 如下图:
Docker image 镜像:镜像是容器的基石,容器基于镜像启动和运行,镜像好比容器的源代码,保存了基于容器的各种条件,docker镜像是有个层叠的只读文件系统, 最低端是一个引导文件系统bootfs (好比linux的引导文件系统),docker用户几乎不可能跟引导文件有交互,到一个容器启动后,将会被已到内容中而引导文件系统将会被卸载。docker镜像的第二层是rootfs,root文件系统。 docker将这样的文件系统称为镜像。一个镜像可以放到另一个镜像的顶部,位于下面的镜像称为父镜像。
Docker Container 容器:
通过镜像来启动:docker的容器是docker的执行单元 ,容器中可以运行客户的一个或者多个进程,如果说镜像是docker安装包的构建和打包阶段,那么容器则是启动和执行阶段。
启动和执行阶段
写时负责(copy on write)
Docker Registry 仓库:
docker 用仓库来保存用户构建的镜像,仓库分为公用和私有。docker公司自己通过了一个共有仓库Docker Hub ,
Docker 在线演示地址: