问题1:某 IT 部门要上线一个项目。常规操作是直接去线上服务器,拷贝一个 tomcat,然后改端口号,然后部署应用到 webapps 文件夹下,重启就好。一个服务器上可能会部署多个应用服务。如果某个应用出现问题,比如说 CPU100%,可能这个服务器上的其他应用也会出现问题。对于一个大型应用拆分为几十个微服务,分别交由不同的团队开发,不同团队之间水平参差不齐。如果还采用这种部署方式,你的应用可能会因为另一个团队的应用发生意外。由于部署在了同一台服务器上,导致全部出现问题。因为服务器内的微服务耦合性会很高。
问题2:开发和线上代码(同一套代码)问题。开发阶段部署一套软件环境,测试人员在开发中测试没有问题,运维进行部署。但是正式部署到服务器时,发生了问题(启动参数、环境问题、漏配了参数)等意外。可以通过统一定制一个镜像来解决。
问题3:随着微服务技术的兴起,一个大的应用需要拆分成多个微服务。多个微服务的生成,就会面临庞大系统的部署效率,开发协同效率问题。然后通过服务的拆分,数据的读写分离、分库分表等方式重新架构,而且这种方式如果要做的彻底,需要花费大量人力物力。可能需要部署很多个服务器。
问题4:持续的软件版本发布/测试项目。到线上环境的集成。
1、Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。
2、Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可迁移的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
3、容器是完全使用沙箱机制,相互之间不会有任何的接口(类似 iphone 的 app),更重要的是容器性能开销极低。容器之间耦合性低。
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker 改变了虚拟化的方式,使开发者可以直接将自己的成果放入 Docker 中进行管理。
方便快捷已经是 Docker 的最大优势,过去需要用数天乃至数周的任务,在 Docker 容器的处理下,只需要数秒就能完成。
如果你有选择恐惧症,还是资深患者。Docker 帮你打包你的纠结!比如 Docker 镜像,Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。
比如 Web应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像(类)部署。
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。
开发人员可以通过 Dockerfile 来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署。
而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。
因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
1、Web 应用的自动化打包和发布
2、自动化测试和持续集成、发布。
3、在服务型环境中部署和调整数据库或其他的后台应用。
4、从头编译或者扩展现有的 OpenShi 或 CloudFoundry 平台来搭建自己的 PaaS 环境。
IaaS:(Infrastructure-as-a-Service)(基础设施即服务)
PaaS:(PlatformasaService)(平台即服务)
SaaS:(Software-as-a-Service)(软件即服务)
1、传统的虚拟机,可以虚拟出一条硬件,运行一个完整的操作系统,在这个操作系统上安装和运行所需的软件。
2、容器内的应用可以直接运行在宿主主机的内核中,容器自己没有内核,也不用虚拟硬件。
3、每个容器是相互隔离的,每个容器内都有属于自己的文件系统,之间互不影响。
docker 镜像就好比一个模板,我们可以通过这个模板来创建容器服务,比如:tomcat 镜像点击 run 就可以创建 tomcat01 容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
docker 利用容器技术,独立运行一个或者一组应用通过 镜像 来创建、启动、停止、删除等基本命令。目前就可以把这个容器理解为就是一个简易的 linux 系统。
仓库就是存放 镜像(image)的地方!仓库又可以分为 公有仓库 和 私有仓库。