目录
Docker的简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
0.1、知乎对Docker的理解—Docker就是集装箱
转自:https://www.zhihu.com/question/28300645/answer/67707287
如有转载,请贴上链接,尊重原创
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。
- 1、docker可以实现虚拟机隔离应用环境:不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。
- 2、docker可以把开发环境直接封装转移给运维:你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
- 3、docker部署高效利用内存:在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。
总之docker就是集装箱原理。
0.2、简书对Docker的理解—Docker带来标准化
转自:https://www.jianshu.com/p/6891b1eadde8
如有转载,请贴上链接,尊重原创
Docker 公司的口号:“Build,Ship,and Run Any App,Anywhere ”,通俗的讲就是 “快来用Docker吧,Docke就像集装箱一样,用了Docker你的业务就可以随意的、无拘无束的运行在任何地方”。那集装箱解决了什么问题?
在集装箱之前,货物运输没有统一的标准方式进行搬运,于是铁路、公路、海洋等各种运输之间,需要大量的人力作为货物中转,效率极低,而且成本很高。集装箱出现之后,世界上绝大多数的货物运输都可以放到这个神奇的箱子里,然后在公路、铁路、海洋等所有运输场景下,这个箱子都可以不用变化形态直接可以承运,而且中间的中转工作,都可以通过大型机械搞定,效率大大提升。<经济学家>杂志说:"没有集装箱,就没有全球化。"
经济全球化的基础就是现代运输体系,而一个高度自动化、低成本和低复杂性的货物运输系统的核心就是集装箱。在1956年集装箱出现之前,人们很难想象美国的沃尔玛能够遍地开花。而在集装箱出现之后,以至于某件东半球的产品运至纽约销售,远比在纽约近郊生产该产品更划算。毫不起眼的集装箱降低了货物运输的成本,实现了货物运输的标准化,以此为基础逐步建立全球范围内的船舶、港口、航线、公路、中转站、桥梁、隧道、多式联运相配套的物流系统,世界经济形态因此而改变。从此全球化开始,商业的潜力被进一步挖掘......牛逼之处我就不多说了,可是这个箱子为什么这么神奇呢?答案其实也就在上面的描述中,无非就是两个字:标准。在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
如果你正好是一个运维工程师而且你正感觉你的运维环境一团糟,麻烦请你思考一下这是为什么?
- 语言不同:你是不是正在运维着一个使用 php、java、C#甚至 C/C++等用各种语言编写的应用都在运行的环境里?
- 环境不同:这个环境是不是因为某种历史原因,使你的操作系统运行着各个版本的内核甚至还有 windows?
- 版本不同:即使是同样语言编写的业务也运行着不同版本的库?
- 各种不同:你的整个系统环境是不是甚至找不出来两台硬件、操作系统、库版本以及语言版本完全一样的环境?
于是你每次遇到问题都要去排查,到底那个坑到底在那里?
从网络、内核到应用逻辑。你每次遇到产品升级都要在各种环境上做稳定性测试,发现不同的环境代码 crash 的原因都不尽相同。你就像一个老中医一样去经历各种疑难杂症,如果遇到问题能找到原因甚至都是幸运的,绝大多数情况是解决了但不知道原因和没解决自动好了也不知道原因。于是你们在一个特定的公司的环境中积累着“经验”,成为你们组新手眼中的大神,凭借历经故障养成的条件反射在快速解决不断发生的重复问题,并故弄玄虚的说:这就是工作经验。因为经验经常是搞不清楚原因时的最后一个遮羞布。当别人抱怨你们部门效率低的时候,你一般的反应是:”you can you up,no can no 逼逼!
那么我们再来看看 docker 是怎么做的?现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。
1、一个完整的Docker有以下几个部分组成
- DockerClient客户端
- Docker Daemon守护进程
- Docker Image镜像
- DockerContainer容器
2、Windows 下面运行 Docker 的两个主要工具
- Docker for Windows:新一代的 Windows下的运行平台。
- DockerToolbox:上一代的运行平台,安装参考Docker Toolbox:Docker Toolbox的简介、安装、使用方法之详细攻略
Docker的安装
pip install docker
0、基于Windows 的Docker安装
参考文章
Docker 可以以两种形式运行在 Windows 上:以 Hyper-V 虚拟机的形式运行 Linux 格式的容器,或者运行原生的 Windows 容器。其中前者运行 Linux 格式的应用程序,后者能运行 Windows 应用程序。
如果安装了win10,可以采用安装包直接安装,现在 Docker 有专门的 Win10 专业版系统的安装包,需要开启Hyper-V。
Hyper-V是微软的一款虚拟化产品,是微软第一个采用类似Vmware和Citrix开源Xen一样的基于hypervisor的技术。Hyper-V 让你可以在 Windows 上以虚拟机形式运行多个操作系统。
官方文档提示:HYPER-V 在 64 位版本的 Windows 10 专业版、 企业版和教育版上可用。 但是,切记,不适用于Windows10的家庭版。 因为,默认情况下win10家庭版是没有hyper-V的,但是可以通过配置进行修改。
T1、Windows10家庭版无法安装docker,需要下载docker toolbox安装,参考文章
Docker Toolbox:Docker Toolbox的简介、安装、使用方法之详细攻略
T2、Windows10家庭版修改配置,直接安装docker
1、官网下载
2、本地安装图文教程
更新……
3、Docker测试
更新……
Docker的使用方法
1、用户的应用程序迁往Docker容器的五步骤
随着Docker在云计算市场中领先地位的日益稳固,容器技术也成为了一种主流技术。为了对用户的应用程序使用容器技术,可遵循以下五个步骤。
Docker容器技术已在云计算市场中风靡一时了,而众多主流供应商则面临着技术落后的窘境。那么,是什么让Docker容器技术变得如此受欢迎呢?对于刚入门的新手来说,容器技术可实现不同云计算之间应用程序的可移植性,以及提供了一个把应用程序拆分为分布式组件的方法。此外,用户还可以管理和扩展这些容器成为集群。
在企业用户准备把应用程序迁往容器之前,理解应用程序的迁移过程是非常重要的。这里将介绍把用户应用程序迁往Docker容器的五个基本步骤。
步骤1:分解。一般来说,应用程序都是复杂的,它们都有很多的组件。例如,大多数应用程序都需要数据库或中间件服务的支持以实现对数据的存储、检索和集成。所以,需要通过设计和部署把这些服务拆分成为它们自己的容器。如果一个应用程序能够被拆分成为越多的分布式组件,那么应用程序扩展的选择则越多。但是,分布式组件越多也意味着管理的复杂性越高。
步骤2:选择基础映像。当执行应用程序迁移时,应尽量避免推倒重来的做法。搜索Docker注册库找到一个基本的Docker映像并将其作为应用程序的基础来使用。
随着时间的推移,企业将会发现这些Docker注册库中基本映像的价值所在。请记住,Docker支持着一个Docker开发人员社区,所以项目的成功与否很大程度上取决于用户对于映像管理和改良的参与度。
步骤3:安全管理问题。安全性和管理应当是一个高优先级的考虑因素;企业用户不应再把它们当作应用程序迁移至容器的最后一步。反之,企业必须从一开始就做好安全性和管理的规划,把它们的功能纳入应用程序的开发过程中,并在应用程序运行过程中积极主动地关注这些方面。这就是企业应当花大功夫的地方。
基于容器的应用程序是分布式应用程序。企业应当更新较老的应用程序以支持联合身份管理方法,这将非常有利于确保分布式应用程序的安全性。为了做到这一点,应为每一个应用程序组件和数据提供一个的标识符,这个标识符可允许企业在一个细粒度的级别上进行安全性管理。企业用户还应当增加一个日志记录的方法。
步骤4:增加代码。为了创建镜像,企业用户需要使用一个Dockerfile来定义映像开发的必要步骤。一旦创建了映像,企业用户就应将其添加至Docker Hub。
步骤5:配置测试部署。应对在容器中运行的应用程序进行配置,以便于让应用程序知道可以在哪里连接外部资源或者应用程序集群中的其他容器。企业用户可以把这些配置部署在容器中或使用环境变量。
对基于容器的应用程序进行测试类似于对其他分布式应用程序的测试。企业可以对每个容器进行组件测试,并将容器集群作为一个整体进行测试。 确定应用程序应如何能够在负载增加的情况下进行扩展。如果用户正在使用一个集群管理器(例如Swarm),则可测试其性能。
最后,把容器部署到实际生产环境中。为了积极主动地关注基于容器的应用程序的运行状况,可考虑实施必要的监控和管理机制 。确保打开日志记录功能。
很多应用程序迁移至云计算都是采用容器技术的。虽然迁移有一点复杂,但是容器可以保护应用程序投资并赋予了它一个更长的使用寿命。
参考文章