导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装。只有它们都正确,软件才能运行。如果从一种操作系统里面运行另一种操作系统,通常我们采取的策略就是引入虚拟机,比如在 Windows 系统里面运行 Linux 系统。这种方式有个很大的缺点就是资源占用多、冗余步骤多、启动慢。目前最流行的 Linux 容器解决方案之一就是Docker,它最大优点就是轻量、资源占用少、启动快。本文从什么是Docker?Docker解决什么问题?有哪些好处?如何去部署实现去全面介绍。
0 引言设想这样一个真实案例,假如我们要部署一个Python应用程序,要做哪些工作?
首先需要python运行环境,比如部署的是python3,而机器上是python2。先装个python3,还要装各种依赖包,机器一些可能的冲突。
装完python之后,发现还要装mysql或者redis。继续下载安装配置。
啥?服务器不用了,需要换一台服务器?那重新来一遍吧。
啥?基础应用做的太好要进行推广,需要指导其他厂商部署?这怎么办?
可以看出,在 Docker 之前软件行业的运维存在着以下这些痛点:
软件的发布和部署低效又繁琐,而且总是需要人工介入
环境的一致性难移保证
在不同环境之间迁移的成本较高
在完成Docker部署安装之前,我们还是先认识下Docker的优点:
软件构建容易,分发简单
应用得到隔离,依赖被解除
可以完美地用于 CI/CD
快速部署,测试完以后销毁也方便
1 什么是DockerDocker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的Solomon Hykes正式决定,将Docker项目开源,Docker 自开源后受到广泛的关注和讨论。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。WIn10下Docker下载地址:链接: https://pan.baidu.com/s/1GlneodbQduUdX9yLRF2hcA 提取码: mqf6
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。有了 Docker,就不用担心环境问题。总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
通俗解释Docker
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。
不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。
开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。总之docker就是集装箱原理。
2 Docker用途Docker 的主要用途,目前有三大类。
(1)提供一次性的环境。本地测试的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。一台机器可以跑多个服务,在本机可以模拟出微服务架构。
应用场景
Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
Docker 能干什么?