Docker 背景php
• Docker是基于容器技术的轻量级虚拟化解决方案
• Docker是容器引擎,把Linux的cgroup、 namespace等容器底层技术进行封装抽象(后面会介绍此两种技术),为用户提供了建立和管理容器的便捷界面(包括命令行和API)
• Docker 是一个开源项目,诞生于 2013 年初,基于Google 公司推出的 Go 语言实现
• 微软,红帽Linux, IBM, Oracle等主流IT厂商已经在本身的产品里增长对Docker的支持。
• Google 每周启动超过20亿个容器进行业务服务,于上个世纪90年代已经开始大规模使用容器技术linux
发展现例图web
传统的开发部署流程docker
传统VM虚拟化环境存在的问题 数据库
1. 虚拟机资源利用效率低
2. 单物理机多应用没法有效隔离(进程空间, cpu
资源,磁盘)
3. 运维部署不便,环境依赖性强
4. 测试、版本管理复杂
5. 迁移成本高
6. 传统虚拟机,空间占用大,启动慢,管理复杂ubuntu
Docker - 轻量级虚拟化容器优势缓存
1. 秒级启动和中止,空间资源占用极少
2. 实现进程级别的隔离
3. 可在普通服务器上创建上百个docker实例
4. 加快开发测试部署的速度
5. 简化版本管理
安全
开发和运维的有效隔离bash
一个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