容器
Linux容器技术和虚拟机对比
docker
docker基本组成
Docker客户端/守护进程
Docker lmage 镜像
Docker Container 容器
Docker Registry仓库
docker基础
参考:https://www.cnblogs.com/douz/p/6644214.html
Docker 在线演示地址:https://www.docker.com/tryit/
容器
参考:https://www.cnblogs.com/douz/p/6644214.html
Docker 在线演示地址:https://www.docker.com/tryit/
容器概述:
- 一种虚拟化的方案
- 操作系统级别的虚拟化
- 只能运行相同或相似内核的操作系统
- 依赖于Linux内核特性:Namespace和Cgoups(ContolGroup)(只能运行Linux内核的系统)
容器定义:轻量级虚拟技术,是基于操作系统的虚拟技术(Docker、Solaris Zones、BSD jails、Open VZ、LXC),代表着操作系统和用户空间低层进行资源共享,共用一个系统内核,并且可以在主机间迁移,具备root权限,可运程,可备份,回滚的一种虚拟技术。
Linux容器技术和虚拟机对比
容器技术优点:
- 磁盘占用空间更少:使用虚拟机部署应用,不但包含了应用和其依赖的库,还需要包含完整的操作系统,原本可能只需要几十M的应用,就需要动辄几个G的操作系统来支撑;而容器,只需要包含应用和他依赖的库,这样资源占用就大大减少
- 资源占用更小:虚拟机需要模拟硬件的行为,对内存和CPU的损耗也相当大,所以同样配置的服务器使用容器技术要比使用虚拟机能够提供更多的服务能力,服务更多的用户.
容器缺点:
- 容器技术的复杂性:容器本身就比较复杂,它依赖于那就是内核的很多特性,而且它不易安装,也不容易管理和实现自动化.
docker
docker概述:
- 将应用程序自动部署到容器
- Go语言开源引擎 Github地址:htps/gthub.com/docker/docker
- 2013年初dotCloud
- 基于Apache 2.0开源授权协议发行
docker定义:Docker可以看成将数据,操作等进行“分门别类”然后通过容器引擎(盒子)进行传输到个人电脑,公共云等设备上。
docker目标
- 提供简单轻量的建模方式
用户只需要几分钟就可以把自己的程序docker化,大多数docker容器,只需要不到一秒即可运行起来,由于去除了管理程序的开销,docker容器拥有非常高的性能,同时同一台宿主机中也可以运行更多的容器,使用户可以尽可能的充分利用系统资源.
- 职责的逻辑分离
使用docker开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器;docker设计的目的就是要加强开发人员写代码和开发环境与应用程序要部署的生产环境的一致性
- 快速高效的开发生命周期
docker的目标之一是缩短代码从开发测试到部署上线运行的周期,让你的应用程序具备可移植性,在容器中开发,以容器的形式交付和分发,这样开发测试生产都使用相同的环境,也就避免了额外的调试和部署上的开销,这样就能够有效缩短产品的上线周期.
- 鼓励使用面向服务的架构
docker推荐单个容器只运行一个应用程序或者进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序和服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序、部署应用程序扩展、调试应用程序都变得非常简单,这就像我们在开发中常用的思想:高内聚低耦合单一任务,这样就能够避免在同一服务器上部署不同服务时可能带来的服务之间的互相影响,这样在运行过程中出现问题也比较容易定位问题的所在。
docker应用场景
- 使用Docker容器开发、测试、部署服务。
- 创建隔离的运行环境
- 搭建测试环境
- 构建多用户的平台即服务(PaaS)基础设施
- 提供软件即服务(SaaS)应用程序
- 高性能、超大规模的宿主机部署
docker优点:
- 效率更高
- 资源占用更小
- 管理更加便捷(同一系列操作系统中)。
比较LXC :
- 跨平台可移植性:按统一标准打包(镜像中),可传播。
- 面向应用:优化部署应用(设计哲学)→API,接口及文档(体现)。
- 版本控制:追踪、查询、记录版本信息(应用程序更改史)和回滚版本等
- 组件复用:组件式搭建(基础镜像)→Python(运行环境) | postgreasql(基础镜像)。
- 共享性:公共的注册服务器(可免费下载源码)。
docker缺点:
- 灵活性,安全性,配置共享方面有所欠缺。
安装docker注意:
docker基本组成
- Docker Client客户端
- Docker Daemon 守护进程
- Docker lmage镜像
- Docker Container 容器
- Docker Registry 仓库
Docker组件(核心):镜像、容器、库
。
Docker客户端/守护进程
采用C/S架构:客户端(执行程序)→通过命令行和API形式和守候程序(提供Docker服务)进行通讯。
docker客户端向docker服务器端,也就是docker的守护进程发出请求,守护进程处理完所有的工作并返回结果;
操作客户端对服务器端的访问,既可以是在本地也可以通过远程来访问,我们可以通过这幅图来很好的理解刀客的CS架构,
Docker lmage 镜像
镜像定义:一个只读的静态模板(框架体系);包含环境和应用执行代码(框架语言);采用分层机制。将新增数据通过联合文件系统附加在原基础上。
- 容器的基石
镜像是docker容器的基础,容器基于镜像启动运行,镜像就好比容器的源代码,保存了用于几种容器的各种条件
- 层叠的只读文件系统
它的最底端是一个引导文件系统及步骤fs,典型的另一个词的引导文件系统,docker用户几乎永远不会和你的文件系统有交互;实际上当一个容器启动后,它将会被移到内存中,而引导文件系统会被卸载,docker文件第2层是root文件系统,它位于引导文件系统之上,root文件系统可以是一种或多种的操作系统,比如Ubuntu或者centos;
在传统的Linux引导过程中root文件,系统会最先以只读的方式加载,当引导结束并完成了完整性检查后,他才会被切换为读写模式,但是在docker里,root文件系统永远是只读状态,利用联合加载技术,又会在root文件系统之上加载更多的只读文件系统 - 联合加载(union mount)
联合加载指的是一次同时加载多个文件系统,但是在外面看起来只能看到一个文件系统,联合加载会将docker文件系统叠加到一起,让最终的文件系统会包含所有的底层文件和目录,将这样的文件系统成为镜像,一个镜像可以放到另一个镜像的底部。由于下面的镜像成为父镜像,可以依次类推,直到镜像站到最底部;最底部的镜像成为基础镜像,也就是我们图中镜像站的root文件系统
Docker Container 容器
定义:一个运行时环境,是镜像的运行状态,是镜像执行的一种动态表现。
-通过镜像来启动
docker的容器是docker的执行来源;容器中可以运行客户的一个或多个进程。
- 启动和执行阶段
如果说镜像是docker生命周期中的构建和打包阶段,那么容器则是启动和执行阶段.
当一个容器启动时,docker会在该镜像的最顶层加载一个读写文件系统,也就是一个可写的文件层面,我们在docker中运行的程序就是在这个层中进行执行的; - 写时复制(copy on write)
当docker是第1次启动一个容器时,初始的读写层是空的,当文件系统发生变化时这些变化都会应用到这一层上.比如如果想修改一个文件,这个文件首先会从该读写层下面的指读层复制到该读写层,该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏,这就是docker中的一个重要的技术:写时复制。
每个只读镜像层都是只读的,并且以后永远不会变化,要创建一个新容器时会构建出一个镜像站,就像我们图中所表现的,在站的最顶层添加可写层,这个读写层加上下面的镜像层以及一些配置数据,就构成了一个容器.
容器的这种特点,加上镜像分层的框架,是我们可以快速的构建镜像,并运行包含我们自己的应用程序和服务的容器
Docker Registry仓库
定义:使用注册服务器(共有的or私有的)存储和共享用户的镜像,是某个特定用户存储镜像的目录。
分类:
- 公有(Docker Hub)
- 私有
docker公司自己提供了一个公有的仓库,叫做Docker Hub,我们可以到上去注册账号,分享并保存自己的镜像,目前Docker Hub上已经有了非常丰富的镜像.当然我们也可以架设自己私有的仓库