GVKun编程网logo

微服务架构 Day06-SpringBoot 之 Docker(docker部署springboot微服务)

10

以上就是给各位分享微服务架构Day06-SpringBoot之Docker,其中也会对docker部署springboot微服务进行解释,同时本文还将给你拓展2020年最全微服务设计架构:Spring

以上就是给各位分享微服务架构 Day06-SpringBoot 之 Docker,其中也会对docker部署springboot微服务进行解释,同时本文还将给你拓展2020年最全微服务设计架构:SpringBoot+Cloud+Docker、Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务、Docker和Spring Boot:构建可靠、高可用的微服务架构、spring boot 集成 zookeeper 搭建微服务架构等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

微服务架构 Day06-SpringBoot 之 Docker(docker部署springboot微服务)

微服务架构 Day06-SpringBoot 之 Docker(docker部署springboot微服务)

Docker 介绍

  • 开源应用容器引擎
  • Docker 支持将软件编译成一个镜像并配置好,就可以直接使用这个镜像了
  • 运行中的镜像称为容器,容器的启动是非常快的

Docker 的核心概念

  • Docker 镜像 (Images): 用于创建 Docker 容器的模板
  • Docker 容器 (Container): 容器是独立运行的一个或一组应用
  • Docker 客户端 (Client): 客户端通过命令行或工具使用 Docker
  • Docker 主机 (Host): 安装了 Docker 的机器 (Docker 是安装在操作系统上的)
  • Docker 仓库 (Registry): 用来保存打包好的软件镜像
  • 使用步骤:
    1. 安装 Docker
    2. 去 Docker 仓库找到对应的镜像
    3. 使用 Docker 运行这个镜像,就会生成 Docker 容器
    4. 对容器的启动停止就是对软件的启动停止

Docker 安装

  • 安装 Docker:
  • 启动 Docker:systemctl start docker
  • 将 Docker 服务设为开机启动: systemctl enable docker

Docker 命令

  • 检索:docker search xxx
  • 拉取:docker pull xxx: 版本号 (tag)
  • 列表:docker images
  • 删除:docker rmi image-id

容器操作

软件镜像 - 运行镜像 - 产生一个容器 (正在运行的软件)

  • 运行:docker run --name container-name (自定义容器名) -d (后台运行) image-name (指定镜像模板)
  • 列表,查看运行中的容器:docker ps -a (所有容器)
  • 停止:docker stop id(name)
  • 启动:docker start id(name)
  • 删除:docker rm id
  • 端口映射:-p xxxx (主机):xxxx (容器)
  • 容器日志:docker logs id(name)
    步骤:
    1. 搜索镜像:docker search xx
    2. 拉取镜像:docker pull xx:tag
    3. 根据镜像启动容器:docker run --name container-name -d image-name
    4. 查看运行中的容器:dock ps
    5. 停止运行中的容器:docker stop id (name)
    6. 查看所有容器:dock ps -a
    7. 启动容器:docker start id (name)
    8. 删除一个容器:docker rm id
    9. 启动一个端口映射的 Tomcat:docker run -d -p 8888:8080 tomcat

在 Docker 下安装 MySQL

1. 安装 MySQL

docker pull mysql

2. 启动 MySQL, 需要指定 MYSQL_ROOT_PASSWORD,MYSQL_ALLOW_EMPTY_PASSWORD,MYSQL_RANDOM_ROOT_PASSWORD 中的一个参数,并映射端口

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql

MySQL 高级操作

docker run --name mysql -v /my/custom:/etc/mysql/conf.d -e  MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
// 把主机的/my/custom文件夹挂载到mysqldocker容器的/etc/mysql/conf.d文件里面


docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8m64_unicode_ci
// 指定mysql的一些参数

2020年最全微服务设计架构:SpringBoot+Cloud+Docker

2020年最全微服务设计架构:SpringBoot+Cloud+Docker

前言

最近几年,微服务可谓是大行其道。在业务模型不完善,超大规模流量的冲击的情况下,许多企业纷纷抛弃了传统的单体架构,拥抱微服务。这种模式具备独立开发、独立部署、可扩展性、可重用性的优点的同时,也带来这样一个问题:开发、运维的复杂性提高。有人感觉微服务越做越不方便管理。

然而,随着 Docker 容器技术和自动化运维等相关技术发展,微服务变得更容易维护。因此,未来微服务的发展只会越来越完善,成为将来大中型企业业务架构的发展方向。

但微服务架构包含了 N 多优化、N 多细节,对于一些 coding 的朋友,由于接触不到一线实战架构设计,眼看别人都在向微服务架构转型,自己却只能日复一日地重复造轮子。

什么是微服务架构

简单地说,微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTfulAPI进行通信协作。被拆分成的每一个小型服务都围绕着系统中的某一项或一些耦合度较高的业务功能进行构建,并且每个服务都维护着自身的数据存储、业务开发、自动化测试案例以及独立部署机制。由于有了轻量级的通信协作基础,所以这些微服务可以使用不同的语言来编写。

最近整理了一套微服务实战文档,讲解很透彻。今天分享给大家。这份资料尤其适合以下人群:

1.没有用过微服务技术,只会用传统的 SSM 框架

2.用过 Spring Cloud、Dubbo等技术,但是只限于使用,遇到问题基本无法解决

3.从来没有系统学习微服务架构,觉得架构设计是遥不可及的

4.对于微服务技术有所了解,但尚没有设计高可用高并发的实践经历

看完这份文档你将获得哪些收获?

  1. 理解当下最火热的微服务架构原理及其开源框架;
  2. 触及一线大厂所配备的微服务核心技术内幕知识;
  3. 对照自己掌握知识点进行查漏补缺,帮助扫除知识盲区、重构知识体系。

此书籍具体内容有:

  1. 基础知识
  2. 微服务设计原则
  3. 微服务之Spring Boot
  4. 微服务之Dcker
  5. 微服务之Spring Cloud
  6. 微服务之Spring Cloud其他框架
  7. 微服务之自动化测试与质量管理
  8. 微服务之JHipster
  9. 微服务之自动化部署
  10. 微服务之日志收集与监控
  11. 完整示例
  12. 微服务核心功能推荐

基础知识:什么是微服务架构、与单体系统的区别、如何实施微服务、为什么选择Spring Cloud、Spring Cloud简介。

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

微服务之Spring Boot:详细地介绍Spring Boot的开发,包括使用它的优缺点,以及在企业级开发中常用的工具包的整合,包括面向切面编程、Web 开发、文档管理和调度管理,最后结合Dubbo完成一个示例性的分布式工程。

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

微服务设计原则:针对微服务的设计理念进行整理,包括服务如何折分、前后端分离、CAP 理论和CQRS等,是一个高层次的指导原则

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

微服务之Dcker:主要讲解Docker的基础操作,介绍微服务中所用到的容器相关的技术,最后给出通用的基于容器的私有云架构。

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

微服务之Spring Cloud:Spring Cloud实现微服务的几个重要框架进行展开描述,让读者了解注册中心、负载均衡、容错、分布式配置、网关和消息总线,能够完成开发层面的微服务架构。

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

微服务之Spring Cloud其他框架:对Spring Cloud的非核心框架进行介绍,包括Consul、ZooKeeper. 安全框架和数据流框架。

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

微服务之自动化测试与质量管理:主要对测试和质量管理进行介绍,测试部分包括单元测试、AB测试、旨烟和回归测试,质量管理部分主要使用静态代码分析,并且基于SonarQube对代码进行静态检查,以及分析代码的总体质量。

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

微服务之JHipster:对微服务的最佳实践JHipster进行系统的介绍,并且对JHipster部分内容做了处理,将在国内不是很流行的部分进行了处理,尽可能详细地介绍JHipster的应用和配置。

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

微服务之自动化部署:主要对自动化部署进行介绍,因为微服务的目的不仅仅是简化开发,而且能够提高整个团队的运行效率。所以私服的使用和自动化运维就显得非常重要。

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

微服务之日志收集与监控:主要讲解日志收集和APM监控,对于线上系统来说,出现问题的概率还是非常大的,如何快速定位并第一时间找到问题所在的点就显得非常重要。APM部分对常用的监控工具进行列举,重点介绍Pinpoint,对使用和邮件告警也进行了重点介绍。

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

完整案例:通过对PiggyMetrics的全面讲解,让读者能够了解-一个简单的微服务架构所包含的技术点和构建原则,并且实际部署微服务,完成业务的基础操作。

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

微服务核心功能推荐:对在微服务构建过程中可能涉及的技术点进行讲解,包括工作流引擎、规则引擎、调度系统、分布式配置及单点登录。

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

由于篇幅限制,小编这里只将此实战文档的所含内容全部展现出来了,需要获取完整文档用以学习的猿友们,关注公众号:Java架构师联盟,即可查看获取方式

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

这可能是2020年把微服务讲的最全了:SpringBoot+Cloud+Docker

Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务

Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务

本篇为Docker从入门到掉坑第二篇:基于Docker构建SpringBoot微服务,没有看过上一篇的最好读过 Docker 从入门到掉坑 之后,阅读本篇。

在之前的文章里面介绍了如何基于docker容器部署一些常见的基础环境,例如MysqL、Redis这些,那么这篇文章里面我会介绍一些关于SpringBoot如何打包运行到docker容器中。

先介绍一下需要准备的基础环境内容:

1.一台centos机器

docker运行在centos7上,要求系统为64位,Linux内核版本为3.10以上

docker运行在centos6.5或更高的版本上,要求系统为64位,系统内核版本为2.6.32-431或更高版本

关于如何查看当前系统的内核版本可以通过uname指令来查询:


[root@izwz9ic9ggky8kub9x1ptuz target]# uname -r3.10.0-514.26.2.el7.x86_64[root@izwz9ic9ggky8kub9x1ptuz target]#

2.一份基础的SpringBoot项目代码

首先我们来构建一个简单的springboot模板项目,下边这份是相关的依赖文件:


<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.sise</groupId>    <artifactId>docker-springboot</artifactId>    <version>1.0-SNAPSHOT</version>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.0.0.RELEASE</version>    </parent>    <properties>        <docker.image.prefix>springboot</docker.image.prefix>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <!-- 注意这里的命名要与后边编写DockerFile中的命名一致 -->        <finalName>spring-boot-docker-1.0</finalName>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>            <!-- Docker maven plugin -->            <plugin>                <groupId>com.spotify</groupId>                <artifactId>docker-maven-plugin</artifactId>                <version>1.0.0</version>                <configuration>                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>                    <dockerDirectory>src/main/docker</dockerDirectory>                    <resources>                        <resource>                            <targetPath>/</targetPath>                            <directory>${project.build.directory}</directory>                            <include>${project.build.finalName}.jar</include>                        </resource>                    </resources>                </configuration>            </plugin>            <!-- Docker maven plugin -->        </plugins>    </build></project>

注意,这里有几个配置点需要仔细注意一下,在上边的maven配置中有一条叫做dockerDirectory的属性配置:


               <configuration>                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>                    <dockerDirectory>src/main/docker</dockerDirectory>                    <resources>                        <resource>                            <targetPath>/</targetPath>                            <directory>${project.build.directory}</directory>                            <include>${project.build.finalName}.jar</include>                        </resource>                    </resources>                </configuration>

这条属性对应的是指Dockerfile文件所存放的位置:

Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务

注意有坑:

在src/main/docker的目录底下需要我们编写一份叫做Dockerfile的文件,注意这份Dockerfile文件的命名一定不能修改,否则会识别不出来,导致后边会抛出下边这种异常:


Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (default-cli) on project docker-springboot:Exception caught: Request error: POST unix://localhost:80/build?t=springboot%2Fdocker-springboot: 500, body:{"message":"Cannot locate specified Dockerfile: Dockerfile"}: HTTP 500 Internal Server Error -> [Help 1]

这份Dockerfile文件需要用特殊的语法规则来进行编写,这里我给出一份基础的Dockerfile文件模板:


FROM openjdk:8-jdk-alpineVOLUME /tmpADD spring-boot-docker-1.0.jar app.jarENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

稍微解释一下这里的语义含义:

FROM [image]指需要依赖的其他镜像信息,这里选择了jdk镜像

对于不熟悉的镜像环境如果需要搜索可以去到docker的官方网站进行查看:
https://hub.docker.com/

Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务

在这里插入图片描述
ADD 源地址目标地址 是指将原先的src文件 添加到我们需要打包的镜像里面

VOLUME /tmp Spring Boot应用程序为Tomcat创建的默认工作目录。作用是在你的主机”/var/lib/docker”目录下创建一个临时的文件,并且链接到容器中的”/tmp”目录。这部分的内容可以进入相应的目录下边去详细查看:


[root@izwz9ic9ggky8kub9x1ptuz docker]# cd /var/lib/docker[root@izwz9ic9ggky8kub9x1ptuz docker]# lsbuilder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes[root@izwz9ic9ggky8kub9x1ptuz docker]# cd ./tmp/[root@izwz9ic9ggky8kub9x1ptuz tmp]# lsdocker-builder661781695[root@izwz9ic9ggky8kub9x1ptuz tmp]# cd docker-builder661781695/[root@izwz9ic9ggky8kub9x1ptuz docker-builder661781695]# lsdockerFile  docker-springboot-1.0-SNAPSHOT.jar[root@izwz9ic9ggky8kub9x1ptuz docker-builder661781695]# 

ENTRYPOINT 这条指令的含义是说执行应用的时候默认传输的命令内容。

SpringBoot的代码也比较简单,分别是Application启动类:


package com.sise.docker;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * @author idea * @data 2019/11/10 */@SpringBootApplicationpublic class DockerApplication {    public static void main(String[] args) {        SpringApplication.run(DockerApplication.class);    }}

以及相应的SpringBoot控制器:


package com.sise.docker.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @author idea * @data 2019/11/10 */@RestController@RequestMapping(value = "/docker")public class DockerController {    @GetMapping(value = "/test")    public String test(){        return "this is docker test";    }}

application.yml文件信息:

server:  port: 7089

3.服务器上边需要安装maven和docker环境

关于docker的环境安装,在上一篇文章中已经讲解到了,没看上一篇的,点这里:Docker 从入门到掉坑。

maven的环境安装讲解:

首先需要选择自己机器上边的安装地址,然后下载相应的文件包,并且进行解压:

wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gztar zxf apache-maven-3.1.1-bin.tar.gz

然后我们进行相应的环境变量配置:


export MAVEN_HOME=[maven的安装路径]export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

记得刷新一下profile配置文件


source /etc/profile

最后记得验证一下maven的配置是否正常:


[root@izwz9ic9ggky8kub9x1ptuz docker]# mvn -versionApache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 23:22:22+0800)Maven home: /opt/maven/apache-maven-3.1.1Java version: 1.8.0_151, vendor: Oracle CorporationJava home: /opt/jdk/jdk1.8.0_151/jreDefault locale: en_US, platform encoding: UTF-8OS name: "linux", version: "3.10.0-514.26.2.el7.x86_64", arch: "amd64", family: "unix"

一切就绪了,现在我们来将原先的准备好的一份SpringBoot项目上传到centos机器里面,然后通过maven的命令进行打包:


mvn package docker:build

当构建成功之后会有以下信息出现:


[INFO] Built springboot/spring-boot-docker[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 54.346 s[INFO] Finished at: 2018-03-13T16:20:15+08:00[INFO] Final Memory: 42M/182M[INFO] ------------------------------------------------------------------------

接着我们便可以通过熟悉的docker images命令来查看当前的镜像内容了:

最后便是启动我们的镜像文件,并且进行测试:


[root@izwz9ic9ggky8kub9x1ptuz springboot-docker]# docker run -p 7089:7089 -d springboot/docker-springboot38ec31c7a4802d852ee0834e1773136bd58a255875a9fa8cb2898aef0daa3e51[root@izwz9ic9ggky8kub9x1ptuz springboot-docker]#

启动成功之后,我们通过命令进行测试接口:


[root@izwz9ic9ggky8kub9x1ptuz springboot-docker]# curl 127.0.0.1:7089/docker/testthis is docker test[root@izwz9ic9ggky8kub9x1ptuz springboot-docker]# 

好了,一个基本的基于docker容器运行的SpringBoot容器构建到这里就告一段落了。

写在文末

在文末部分,我打算继上一篇文章中所提到的几个不足我在这里进行一些补充:
应 @古名 读者提到的问题,关于docker镜像的没有做官方的介绍:

当我们需要查询某些特殊镜像的时候有两种途径去搜索有关镜像的信息,一种是直接进入官网镜像搜索,还有一种是通过docker search 的方式搜索镜像。

第一种方式的具体操作为进入https://hub.docker.com 官网,然后在顶部的搜索栏进行相关的搜索。例如说我们要搜索关于MysqL的镜像信息,那么就可以通过以下操作:

Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务

在官网上的搜索和在命令行执行docker search [镜像关键字]的结果基本是一致的:


[root@izwz9ic9ggky8kub9x1ptuz springboot-docker]# docker search MysqLNAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATEDMysqL                             MysqL is a widely used, open-source relation…   8787                [OK]                mariadb                           MariaDB is a community-developed fork of MyS…   3080                [OK]                MysqL/MysqL-server                Optimized MysqL Server Docker images. Create…   652                                     [OK]percona                           Percona Server is a fork of the MysqL relati…   459                 [OK]                centos/MysqL-57-centos7           MysqL 5.7 sql database server                   64                                      centurylink/MysqL                 Image containing MysqL. Optimized to be link…   61                                      [OK]MysqL/MysqL-cluster               Experimental MysqL Cluster Docker images. Cr…   56                                      deitch/MysqL-backup               REPLACED! Please use http://hub.docker.com/r…   41                                      [OK]bitnami/MysqL                     Bitnami MysqL Docker Image                      35                                      [OK]tutum/MysqL                       Base docker image to run a MysqL database se…   34                                      schickling/MysqL-backup-s3        Backup MysqL to S3 (supports periodic backup…   28                                      [OK]prom/MysqLd-exporter                                                              23                                      [OK]linuxserver/MysqL                 A MysqL container, brought to you by LinuxSe…   22                                      centos/MysqL-56-centos7           MysqL 5.6 sql database server                   17                                      circleci/MysqL                    MysqL is a widely used, open-source relation…   16                                      MysqL/MysqL-router                MysqL Router provides transparent routing be…   14                                      arey/MysqL-client                 Run a MysqL client from a docker container      13                                      [OK]imega/MysqL-client                Size: 36 MB, alpine:3.5, MysqL client: 10.1.…   9                                       [OK]openshift/MysqL-55-centos7        DEPRECATED: A Centos7 based MysqL v5.5 image…   6                                       fradelg/MysqL-cron-backup         MysqL/MariaDB database backup using cron tas…   4                                       [OK]genschsa/MysqL-employees          MysqL Employee Sample Database                  2                                       [OK]ansibleplaybookbundle/MysqL-apb   An APB which deploys RHSCL MysqL                2                                       [OK]jelastic/MysqL                    An image of the MysqL database server mainta…   1                                       widdpim/MysqL-client              Dockerized MysqL Client (5.7) including Curl…   0                                       [OK]monasca/MysqL-init                A minimal decoupled init container for MysqL    0   

这里你可能会疑惑,为何输入了MysqL关键字之后却出来了这么多的相关信息,实际上这里走的是一次全文搜索,会将一些在描述内容中包含有MysqL的镜像信息都统一查询出来。

假设我们需要选择MysqL的某一份镜像进行下载的话,可以直接docker pull MysqL,但是这种方式会拉去最新版本的镜像到宿主机中。如果对版本有要求,我们可以到官网上选择合适的版本进行指定拉去。

Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务

图中我也圈起来了拉去不同版本镜像的命令。

应 @别慌张 读者问到的docker可视化管理工具的问题。

实际上docker的可视化管理工具有很多:shipyard,DockerUI,Portainer,Rancher等等

我建议是,如果是作为初学者,还是建议使用命令行会好些,可视化工具实际上是会弱化开发人员的动手能力。使用可视化工具的主要目的还是为了提升工作效率和降低实操难度而设计的。

Docker和Spring Boot:构建可靠、高可用的微服务架构

Docker和Spring Boot:构建可靠、高可用的微服务架构

docker和spring boot:构建可靠、高可用的微服务架构

Docker和Spring Boot:构建可靠、高可用的微服务架构,需要具体代码示例

引言:
如今,微服务架构已成为众多企业构建应用程序的首选。而在构建微服务架构时,使用容器化技术成为一种常见选择。Docker作为目前主流的容器技术之一,与Spring Boot搭配使用,可提供可靠、高可用的微服务架构。本文将介绍Docker与Spring Boot的结合,并提供具体的代码示例。

一、Docker简介
Docker是一个用于开发、交付和运行应用程序的开源平台。它利用容器技术,将应用程序及其依赖项打包到一个可移植的容器中。由于Docker提供了一种轻量级的虚拟化方式,可以基于同一个操作系统内核运行多个独立的容器,从而实现了更高的资源利用率和更快的应用程序启动速度。

二、Spring Boot简介
Spring Boot是一个用于创建独立的、基于Spring框架的java应用程序的框架。它简化了Spring应用程序的配置和部署过程,并提供了一套便捷的开发工具和约定,使开发者可以更加专注于业务逻辑的实现。Spring Boot通过内嵌的Tomcat等服务器,可以快速地创建和运行可独立部署的java应用程序。

三、Docker与Spring Boot的结合

  1. 构建Docker镜像:
    首先,我们需要用Dockerfile来描述Docker镜像的构建过程。下面是一个简单的Dockerfile示例:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/myapp.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
登录后复制
登录后复制
  1. 编写Docker Compose文件:
    Docker Compose是一个用于定义和运行多个Docker容器的工具。我们可以使用它来定义多个微服务容器之间的关系和网络配置。下面是一个简单的docker-compose.yml示例:
version: ''3''
services:
  myapp:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:8080
    networks:
      - mynetwork
networks:
  mynetwork:
    driver: bridge
登录后复制
登录后复制
  1. 部署Spring Boot应用程序:
    使用上述的Dockerfile和docker-compose.yml文件,我们可以通过以下步骤来部署Spring Boot应用程序:
  • 在应用程序的根目录下执行docker-compose up命令,Docker Compose将会自动构建镜像并启动容器。
  • 应用程序将在本地的8080端口上运行。

四、实例演示
下面我们通过一个简单的示例来演示Docker和Spring Boot的结合使用。我们将创建一个简单的RESTful服务,查询并返回一些用户信息。

  1. 创建Spring Boot项目:
    首先,使用Spring Initializer创建一个新的Spring Boot项目。在项目中添加以下依赖项:
implementation ''org.springframework.boot:spring-boot-starter-web''
登录后复制
  1. 编写RESTful接口:
    在项目中创建一个UserController类,编写一个简单的RESTful接口:
@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public User getUserById(@PathVariable("id") Long id) {
        // 根据用户id查询并返回用户信息
        // ...
    }
}
登录后复制
  1. 构建Docker镜像:
    在项目根目录下创建一个名为Dockerfile的文件,其内容如下:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/myapp.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
登录后复制
登录后复制
  1. 编写Docker Compose文件:
    在项目根目录下创建一个名为docker-compose.yml的文件,其内容如下:
version: ''3''
services:
  myapp:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:8080
    networks:
      - mynetwork
networks:
  mynetwork:
    driver: bridge
登录后复制
登录后复制
  1. 启动应用程序:
    在项目的根目录下依次执行以下命令:
./mvnw clean package
docker-compose up
登录后复制

这样,Spring Boot应用程序将会在本地的8080端口上运行。可以使用Postman等工具发送GET请求进行测试。

结论:
通过结合使用Docker和Spring Boot,我们可以快速构建可靠、高可用的微服务架构。Docker的轻量级虚拟化技术使得应用程序的部署更加灵活和高效,而Spring Boot的简洁和便捷使得开发过程更加快速和方便。希望本文提供的具体代码示例对读者在构建微服务架构方面有所帮助。

以上就是Docker和Spring Boot:构建可靠、高可用的微服务架构的详细内容,更多请关注php中文网其它相关文章!

spring boot 集成 zookeeper 搭建微服务架构

spring boot 集成 zookeeper 搭建微服务架构

PRC原理

  RPC 远程过程调用(Remote Procedure Call)

  一般用来实现部署在不同机器上的系统之间的方法调用,使得程序能够像访问本地系统资源一样,通过网络传输去访问远程系统资源,RPC框架实现的原理都是类似的,如下图:

  Client Code:客户端调用方代码实现,负责发起RPC调用,为调用方用户提供使用API。

  Serialization/Deserialization:负责对RPC调用通过网络传输的内容进行序列化与反序列化,不同的RPC框架有不同的实现机制,主要分为文本与二进制两大类。(文本序列化机制主要有XML与JSON两种格式,二进制类别的序列化机制常见的有Java原生的序列化机制,以及Hessian、protobuf、Thrift、Avro、Kryo、MessagePack等),不同的序列化方式在可读性,码流大小,支持的数据类型以及性能等方面都存在较大差异,需要根据实际情况进行筛选。

  Stub Proxy:可以看做是一种代理对象,屏蔽RPC调用过程中复杂的网络处理逻辑,使得RPC调用透明化,能够保持与本地调用一样的代码风格。

  Transport:作为RPC框架底层的通信传输模块,一般通过Socket在客户端与服务端之间传递请求与应答消息。

  Server Code:服务端服务业务逻辑具体的实现。

服务注册中心介绍

我和你都有表达的能力,但是我们怎么沟通呢?见面聊?电话谈?还是微信语音呢?

显然,注册中心来解决这个问题:

ZooKeeper介绍

  zookeeper是dubbo中的注册中心,dubbo是一个分布式服务框架,自带RPC,dubbo使用maven引入。

  要运行dubbo,首先需要一个注册中心,可供选择的注册中心有Zookeeper、Multicast、Redis、Simple。

下载从官网去下载

解压后进入conf目录,里面有一个zoo.cfg (如果没有就自己创建)  配置说明如下:

  tickTime=2000  #单位毫秒 zk中最小时间单位长度

  dataDir=/user/local/zookeeper/data  #zk服务器存储快照文件目录

  dataLogDir=/user/local/zookeeper/logs  #zk服务器存储事务日志文件目录

  clientPort=2181  #服务端对外的服务端口

  initLimit=5  #tickTime的倍数  Leader等待Follower启动并完成数据同步的时间

  syncLimit=2  #tickTime的倍数  Leader与Follower之间心跳最大延时时间

 

进入bin目录下 运行 sh zkServer.sh start  (Windows直接双击)

spring boot 集成 zookeeper

稍微介绍一下设计

一共有3个模块:

web:服务消费者,包含入口层与业务逻辑层。  (war包)

service.user:服务提供者,用户服务层  (war包)

base.core:共用层  包含对象实体  interface  (jar包)

多的我就不说了,都在代码里

源码分享

Fork me on Gitee

 

今天关于微服务架构 Day06-SpringBoot 之 Dockerdocker部署springboot微服务的讲解已经结束,谢谢您的阅读,如果想了解更多关于2020年最全微服务设计架构:SpringBoot+Cloud+Docker、Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务、Docker和Spring Boot:构建可靠、高可用的微服务架构、spring boot 集成 zookeeper 搭建微服务架构的相关知识,请在本站搜索。

本文标签: