Docker 背景
• Docker是基于容器技术的轻量级虚拟化解决方案• Docker是容器引擎,把Linux的cgroup、 namespace等容器底层技术进行封装抽象(后面会介绍此两种技术),为用户提供了创建和管理容器的便捷界面(包括命令行和API)• Docker 是一个开源项目,诞生于 2013 年初,基于Google 公司推出的 Go 语言实现• 微软,红帽Linux, IBM, Oracle等主流IT厂商已经在自己的产品里增加对Docker的支持。• Google 每周启动超过20亿个容器进行业务服务,于上个世纪90年代已经开始大规模使用容器技术
发展示例图
传统的开发部署流程
传统VM虚拟化环境存在的问题
1. 虚拟机资源利用效率低2. 单物理机多应用无法有效隔离(进程空间, cpu资源,磁盘)3. 运维部署不便,环境依赖性强4. 测试、版本管理复杂5. 迁移成本高6. 传统虚拟机,空间占用大,启动慢,管理复杂
Docker - 轻量级虚拟化容器优点
1. 秒级启动和停止,空间资源占用极少2. 实现进程级别的隔离3. 可在普通服务器上建立上百个docker实例4. 加快开发测试部署的速度5. 简化版本管理
开发和运维的有效隔离
一个IT系统应该包含如下几个层次:• 应用程序• 运行时平台(bin/framework/lib)• 操作系统• 硬件(基础设施)开发人员的主要工作是应用程序的编码、构建、测试和发布,涉及应用程序和运行时平台这两层。而运维人员的工作则涉及从硬件、操作系统到运行时平台的安装、配置、运行监控、升级和优化等工作。Docker提供了一种运行时环境,隔离了上层应用于下层操作系统和硬件的关联,使得术业有专攻。
Docker之helloworld
1. 安装Docker 在ubuntu 下 执行一条命令即可安装 apt-get install docker-io
2. 运行 docker run busybox /bin/echo "HelloWorld"
Docker 背后干了什么
• 我们创建了一个容器• 它拥有: 文件系统(基于busybox镜像) 网络栈(具有私有网络服务) 进程空间• 自动安装 docker会自动检查本地是否有busybox镜像(一个测试版本的linux系统),如果没有则自动下载并启动• 通过调用宿主机上的bash启动进程,并打印Helloworld
Docker 技术基础-namespace实现资源隔离
Docker的技术基础-CGROUP
计算机资源使用上的隔离,通常我们叫做使用限额 • Resource limitation: 限制资源使用,比如内存使用上限以及文件系统的缓存限制。 • Prioritization: 优先级控制,比如: CPU利用和磁盘IO吞吐。 • Accounting: 一些审计或一些统计,主要目的是为了计费。 • Control: 挂起进程,恢复执行进程
Docker的技术基础-Union文件系统
• 功能类似diff命令,通过分层的方式记录文件的累积变化情况。• 例如 Tomcat, Oracle, Weblogic镜像都可以共享同一个Linux基础镜像,每一个镜像保存的只是在基础镜像上他们修改的部分• Docker的镜像可以非常多,但是每个都很小,而且加载启动非常快
Docker的重要概念
• 镜像(image)• 容器(container)• 数据卷(volumes)• 链接(links)• 仓库(Repository)
Docker之镜像
• Docker 的镜像类似虚拟机的快照,但是更轻量• 例如:一个镜像可以包含一个完整的 Linux 操作系统环境,里面仅安装了 Tomcat或用户需要的其它应用程序• 镜像可以用来创建容器
Docker之容器
• 等同于从快照中创建虚拟机• 容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。• 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
从同一个镜像启动多个容器
数据卷
数据卷是一个可供一个或多个容器使用的特殊目录• 进程和数据的分离• 实际保存在容器之外,从而允许你在不影响数据的情况下销毁、重建、修改、丢弃容器• 可用于数据持久化• 数据卷的使用,类似于 Linux 下对目录或文件进行 mount。• 数据卷的共享, 可以在多个容器之间共享数据卷
链接
• 容器的连接(linking)系统是除了端口映射外,另一种跟容器中应用交互的方式• 在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息• Docker 在两个互联的容器之间创建了一个安全隧道,而且不用映射它们的端口到宿主主机上。从而避免了暴露关键系统(如数据库)端口到外部网络上.
这里实际上1521端口只有web容器和myapp_db容器是可见的,对其他容器是不可见的。
仓库及仓库注册服务器
• 仓库是集中存放镜像文件的场所• 仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签• 仓库分为公开仓库(Public)和私有仓库(Private)两种形式• push 镜像到仓库,从仓库pull下镜像
Docker 操作与使用
Docker常用命令归纳总结
•容器生命周期管理 docker [run|start|stop|restart|kill|rm|pause|unpause]•容器操作运维 docker [ps|inspect|top|attach|events|logs|wait|export|port]•容器rootfs命令 docker [commit|cp|diff]•镜像仓库 docker [login|pull|push|search]•本地镜像管理 docker [images|rmi|tag|build|history|save|import]•其他命令 docker [info|version]
Docker - 应用方向
1. 简化配置应用配置能够无缝运行在任何平台,将应用环境和底层环境实现了解耦;2. 代码管道化管理代码从开发者的机器到生产环境机器进行管道化管理,能够平滑迁移;3. 应用隔离多个应用服务部署在多个Docker中,实现应用之间的解耦;4. 服务合并合并多个服务,减少机器占用;5. 快速部署快速的启动速度,极小空间占用;6. 开发人员的生产化能够在单机上搭建分布式集群服务,用以测试在真正生产环境下的代码
以Docker为单位的开发部署流程设计
• 以docker为单位的开发测试部署流程,简化了环境搭建的步骤,提高了资源利用效率和开发测试环境部署的速度,降低了迁移的成本,提升项目进度。
基于Docker自动化发布构建流程图
DockerUI - Docker图形化管理工作
Harbor – 企业级docker仓库
Docker Compose -简化复杂容器应用的利器
更多Docker工具• Docker For Windows and MAChttps://download.docker.com/win/stable/InstallDocker.msi• Eclipse for Docker has arrived on Marshttps://www.eclipse.org/community/eclipse_newsletter/2015/june/article3.phphttp://www.oschina.net/news/63789/eclipse-for-docker-has-arrived• Eclipse Docker Tooling for Neonhttps://www.eclipse.org/community/eclipse_newsletter/2016/july/article2.php
转载于:https://www.cnblogs.com/libingbin/p/6905830.html
相关资源:Docker入门与实践.pdf