Rancher 管理平台
Rancher是一个开源的全栈化企业级容器管理平台,也是全球唯一提供 Kubernetes、Mesos 和 Swarm 三种调度工具的企业级分发版和商业技术支持的容器管理平台。全图形化 UI 界面,简单易用。文档支持比较完善,特别是中文资源比较丰富。
中文网站:http://www.cnrancher.com/
最新文档(英文,201707): http://docs.rancher.com/rancher/v1.6/en/
准备一台管理机
管理机是一台安装 docker 的 64 位 Linux 主机,内核版本 3.10+(用 uname -a 检查),内存至少有 1 GB 。 假设该机器(虚拟机)配置是: hostname = manager, ip=192.168.56.100,运行 Ubuntu service 16.04。
Rancher 版本
Rancher 有两个不同的版本,不同版本将有不同的开发文档。
- rancher/server:latest 最新的开发版本,适用于开发新功能,不适用于部署在生产环境中。
- rancher/server:stable 最新的稳定版本,适用于部署在生产环境中。
Docker Swarm 集群
Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
了解 Swarm 集群
群集是一组运行 Docker 的计算机组成,其中部分机器是集群管理机(Swarm Manager) ,其他的是工作机(Worker)。在集群中,在 Manager 机器上使用 Docker 命令,会在群集上执行。群集中的机器可以是物理机或虚拟机。加入群集后,它们被统称节点(Node)。
Swarm 管理机可以使用几种策略来运行容器,例如“最空闲节点”- 容器会填充最少使用的机器。或“全局策略”,它确保每个机器能只能获得指定容器的一个实例。您可以将这些策略写在 docker-compose.yml 这样的服务组合定义文件中,Swarm管理机会按策略部署。
Swarm Manager 是群集中唯一可以执行 docker 命令的机器,或授权其他机器作为工人机(worker)加入群集。worker 只是提供能力,没有权力指挥其他机器工作。
如果您已经熟悉单主机中使用 Docker。现在,可切换到 Docker 集群模式。启用群组模式(swarm mode)使当前的机器成为群组管理机。这时,这台 Docker 将运行管理这个群集的指令,而不再是在当前的机器上运行。
Docker 镜像、容器与服务
在上一篇文章《Docker 集群网络规划与 VM 网络配置》中,我们准备好了三台虚拟机,虚拟机使用的是 VirtualBox ,虚拟机安装的是 ubuntu service 16.04 并安装好 docker 。如果还没有配置好的同学可以查看上一篇文章。
Docker 镜像
An image is a read-only template with instructions for creating a Docker Container.
镜像是创建 docker 容器指令的只读模板。包含一个只读的文件系统镜像,应用程序在这个文件系统上运行,并拥有属于自己的网络、内存、CPU 等资源的定义。通常,一个镜像申明了自己主进程的应用。
一个 docker 镜像可以构建于另一个 docker 镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。如在 ubuntu 上添加自己的 apache 文件,然后在 apache 上建立 web 应用文件。
Docker 集群网络规划与 VM 网络配置
我们准备做一个 Docker Swarms 的集群方案,需要 PC 或者 VM 来进行部署。老师说:网络规划是工作开始的第一步。我采用 VM 进行集群部署,所以本文主要介绍 VM 网络配置。如果你电脑多并采用 PC 进行集群部署,可以忽略本文直接看下一篇。
安装 VitualBox
官方下载地址: https://www.virtualbox.org/ 不同系统下载不同的版本哦!
检查电脑 CPU 虚拟化是否有开启,没有开启的话虚拟机只能装32位系统,那就不方便后续操作了。
下载并安装 Ubuntu service 16.04
官方下载地址: https://www.ubuntu.com/download/server 下载64位的版本
Docker 简单介绍和安装
什么是 Docker
Docker 是一个基于Linux容器的高级容器引擎,基于go语言开发,源代码托管在 Github 上,遵从Apache2.0协议开源。Docker的目标是实现轻量级的操作系统虚拟化解决方案。Docker支持大部分的Linux发行版,通过使用Docker容器,就可以在不同的操作系统,不同的机器上运行自己的应用,不用关心硬件、运行环境之类的配置,应用程序的迁移变得非常简单。Docker 通过分层镜像标准化和内核虚拟化技术,Docker使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情况下提供资源隔离的应用运行环境。
构建 RESTful Service Client
在上一篇文章《构建 RESTful Service 》中我们已经介绍了构建 RESTful 服务端,现在我们来构建 RESTful 的客户端。每种框架都提供了各种访问服务端的实现。如 Apache Httpclient,JAX-RS2 client,Feign Client,Spring RestTemplate 。其实都没有什么特别,就是普通 HTTP 访问协议进一步的封装。本文主要介绍两种方式,分别是 Spring RestTemplate 和 Feign Client,如果喜欢使用 Spring 的同学可能会偏向使用 RestTemplate,它提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率,所以很多客户端比如 Android 或者第三方服务商都是使用 RestTemplate 请求 RESTful 服务。Feign Client 可以把请求的服务写成接口的形式,请求回来的是一个本地接口的一个实现,极大地方便了使用和无缝调用。
本次构建的客户端没有涉及异步访问 REST 服务,我将会另写一片文章专门介绍异步访问 REST 服务,因为这项技术相对来说难一些,内容比较多,也更为重要。
创建 REST-Client 服务端项目
使用 maven 创建 maven-archetype-quickstart 为原型的项目 REST-Client 。
构建 RESTful Service
RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。REST这个词,是Roy Thomas Fielding 在他2000年的博士论文中提出的。RESTful service是一种架构模式,它是轻量级 web 服务,发挥 HTTP 协议的原生的GET,PUT,POST,DELETE。近几年,随着云服务技术的发展,其简单方便、易于理解和扩展,一举超越 SOAP 协议,成为事实的 Web 服务标准。Web 服务开发及其简单,就是定义接口,利用工具发布服务;客户端也是定义接口,利用工具生成通讯代理;HTTP 协议作为通讯工具。
怎么构建 RESTful Service,有哪几种方式可以构建呢?本文通过 Spring 和 JAX-RS 这两种方式来实现 RESTful Service 服务端。本文代码基本来源与官方文档。项目还是基于 Spring Boot 来开发,因为 RESTful Service 其中一种是 Spring 的方式实现,还有 Spring Boot 真的太方便了。
创建 REST-Service 服务端项目
使用 maven 创建 maven-archetype-quickstart 为原型的项目 REST-Service 。
Spring MVC 连接 MySQL 数据库 JPA
在上一篇博客《Spring MVC 连接 MySQL 数据库 Hibernate》中介绍了在 Spring MVC 中使用 Hibernate 来链接数据库,虽然比 JDBC 方便了很多,但复杂一些的查询还是很麻烦,有没有更方便的方法?当然有,在 Java EE 5 规范中已经提出的 Java 持久化接口 Java Persistence API 简称 JPA。它吸取了目前 Java 持久化技术的优点,旨在规范、简化 Java 对象的持久化工作。JPA 的宗旨是为 POJO 提供持久化标准规范,并不是依赖于某一个ORM框架,Hibernate3.2+、TopLink 10.1.3 以及 OpenJPA 都提供了 JPA 的实现。JPA 的总体思想和现有 Hibernate、TopLink、JDO等ORM框架大体一致。主要提供:ORM 映射元数据、操作实体对象 API、查询语言。
在 Spring 2.0.1 中,正式提供对 JPA 的支持。Spring 使得 JPA 配置变得更加灵活,将 EntityManager 的创建与销毁、事务管理等代码抽取出来,并由其统一管理,开发者只需关心核心业务逻辑的实现代码,无需过多关注 EntityManager 的创建、事务处理等 JPA 相关的处理。Spring Data JPA 则更进一步,主要针对的就是 Spring 唯一没有简化到的业务逻辑代码,通过规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑,开发者连仅剩的实现持久层业务逻辑的工作都省了,唯一要做的,就只是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成!
JPA 只是一种规范,需要 Provider 来实现其功能的,Hibernate 就是 JPA Provider 中很强的一个,从功能上来说,JPA 就是 Hibernate 功能的一个子集。Hibernate 从3.2开始,就开始兼容 JPA。我们还是通过项目来学习简单的 JPA 操作,还是可以使用上次的 spring-mvc-mysql 项目稍作修改,不过改成用 Hibernate 分支。
Spring MVC 连接 MySQL 数据库 Hibernate
在上一篇博客《Spring MVC 连接 MySQL 数据库 JDBC》中介绍了在 Spring MVC 中使用 JDBC 来链接数据库。JDBC 可以说是访问数据库的最原始、最直接的方法。这种方式的特点是运行效率高,而缺点是程序代码中嵌入大量的 SQL 语句,使得项目难以维护,虽然 MVC 的分层结构把数据持久层单独出来,把数据库访问操作封装起来,业务层只需调用 API 就可以了。但是,如果数据模型非常复杂,代码量较大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错,就需要非常专业和有经验的开发人员来开发,还需要有足够的时间。
开发人员不是只需要专注于业务逻辑的实现吗?有没有中间件可以做这个事情呢?是的,目前已经有好多种现成的持久化中间件可以选择,有:Hiherante,TopLink,JDO等,其中 Hiberante 最受欢迎,它是基于 Java 的开发源代码的持久化中间件,对 JDBC 做了轻量级封装,不仅提供了 ORM 映射服务,还提供数据查询和缓存功能,开发人员可以方便地通过它提供的 API 来操纵数据库。大大减少了开发的工作量,降低了持久化层开发的门槛。
我们还是通过项目来学习简单的 Hiberante 链接 MySQL 数据库。可以使用上次的 spring-mvc-mysql 项目 JDBC 分支,修改 Dao 持久化层就可以了,这就是 MVC 分层结构的强大之处。