docker部署微服务(SpringBoot/Cloud)

用途及原理

- 用途

docker基于容器化,将一系列应用看作一个个容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个Docker,而MySQL运行在另外一个Docker,另外还可将该容器背后支持的镜像发布仓库储存,例如以后扩展其它业务或新增服务器部署环境只需用docker下载镜像直接发布项目无痛使用。

- 原理(摘抄)

Docker利用Linux中的核心分离机制,例如Cgroups,以及Linux的核心Namespace(名字空间)来创建独立的容器。一句话概括起来Docker就是利用Namespace做资源隔离,用Cgroup做资源限制,利用Union FS做容器文件系统的轻量级虚拟化技术。Docker容器的本质还是一个直接运行在宿主机上面的特殊进程,看到的文件系统是隔离后的,但是操作系统内核是共享宿主机OS,所以说Docker是轻量级的虚拟化技术。

本章需求实现与准备

准备

  1. jdk1.8(linux)
  2. mysql(一般都是另外一台服务器上安装的,提前准备好数据库)
  3. linux(ubuntu)服务器一台,用于实践
  4. 微服务jar包(就是你后台打包的jar)
  • 我的环境:ubuntu16.14,mysql5.7,微服务架构(SpringBoot/cloud),注册中心采用eureka,网关为zuul转发服务~~~

实现

使用docker容器化技术部署后台服务

搭建jdk镜像

准备jdk(linux)压缩包

在这里插入图片描述
注:如果没有的,下面地址下载即可

链接:https://pan.baidu.com/s/13QLACLI64X3lxGvvuM8hcg 提取码:l9p3

编辑Dockerfile配置文件

注:里面jdk就是我的压缩包文件

#指定当前镜像在于centos虚拟服务器里面存在的(相当于linux服务器一样,虚拟化了)
FROM centos:7
 
#2、指明该镜像的作者和电子邮箱
MAINTAINER xwl "250964....@@.com"
 
#3、在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/docker
 
#4、一个复制命令,把jdk安装文件复制到镜像中,语法 ADD SRC DEST ,ADD命令具有自动解压功能
ADD jdk  /usr/local/docker
 
#5、配置环境变量,此处目录为tar.gz包解压后的名称,需提前解压知晓:
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_91
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH

生成JDK镜像

执行命令
注:后面的.不能省略,必须存在

docker build -t myjdk:1.0 .

在这里插入图片描述
执行命令查看创建的镜像

docker images

在这里插入图片描述

验证jdk镜像是否成功

  • 基于jdk镜像启动容器

执行命令

docker run -itd --name testjdk  myjdk:1.0  /bin/bash

在这里插入图片描述

执行命令查看是否启动成功

docker ps

在这里插入图片描述
执行命令查看该容器的唯一id标识

docker ps -aq

在这里插入图片描述

  • 测试镜像内置jdk是否配置成功
docker exec -it  testjdk /bin/bash

在这里插入图片描述

  • 测试
java -version

jdk镜像就OK了,关闭容器即可
在这里插入图片描述

  • 退出容器:exit
  • 删除容器:docker stop testjdk
  • 删除历史:docker rm -f 你创建容器的唯一标识ID

搭建eureka镜像

注:eureka工程我就不说了,默认你存在工程环境,如果你没有,这里有我的一篇文章供参考~

eureka注册中心工程搭建及运行~

编辑Dockerfile

这里的From是引用的意思,因为jar的运行是需要jdk的环境支持,所以这里直接引用之前创建的jdk镜像就OK了

说明:jdk镜像内置有了jdk,引过来之后就相当于我当前的镜像也有了jdk,理所当然就可以运行jar包了~

From  myjdk:1.0

RUN mkdir /jars

ADD eureka-server-0.0.1-SNAPSHOT.jar /jars/eureka.jar

ENTRYPOINT ["java","-jar","/jars/eureka.jar"]

打包eureka镜像并运行

docker build -t myeureka:1.0 .

在这里插入图片描述

docker images

在这里插入图片描述
运行容器
–name:起一个容器名称
-p:对外开放的端口号为8761,对应容器内部的eureka端口号8761

docker run -d --name eurekas -p:8761:8761 myeureka:1.0
docker ps

在这里插入图片描述
查看运行日志

docker logs -f  eurekas

在这里插入图片描述
浏览器访问ip+端口
在这里插入图片描述
OK,eureka注册中心就运行成功了

搭建zuul(网关镜像)

注:网关zuul我的文章供你参考搭建如下
SpringCloud Zuul网关搭建及运行

注意:网关是要注册到eureka上面去的,那么配置文件注册的时候实际注册到eureka的地址就不能写localhost了,因为docker里面宿主机每个容器的IP地址不同,这里注册的时候就要写成eureka容器的名称或者容器的地址,以下是我的配置文件供参考

server:
  port: 5555
spring:
  application:
    name: zuul-server
    #mysql基础配置
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/myxue?characterEncoding=utf-8
eureka:
  instance:
    hostname: localhost
    #指定访问本机IP
    prefer-ip-address: true
  client:
    #被注册中心eureka发现并注册
    fetch-registry: true
    register-with-eureka: true
    service-url:
      #eurekas就是注册中心刚才容器的名称
      defaultZone: http://eurekas:8761/eureka
zuul:
  prefix: /api
  #转发服务
  routes:
    other:
      path: /other-server/**
      serviceId: other-server
    show:
      path: /show-server/**
      serviceId: show-server
#配置mybatis-plus打印sql语句于控制台
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    #开启驼峰命名转换
    map-underscore-to-camel-case: true
  #错误响应配置时间
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000 #熔断响应时间
  #ribbon超时配置 读取和等待时间都设置6
ribbon:
  #熔断读取时间
  ReadTimeout: 60000
  #连接等待时间
  ConnectTimeout: 60000

编辑Dockerfile镜像

From  myjdk:1.0

RUN mkdir /jars

ADD zuul-server-0.0.1-SNAPSHOT.jar  /jars/zuul.jar

ENTRYPOINT ["java","-jar","/jars/zuul.jar"]

打包镜像并运行

docker build -t myzuul:1.0 .

在这里插入图片描述
查看网关zuul镜像

docker images

在这里插入图片描述
基于镜像运行容器并注册到eureka上
–link:打通与eureka注册中心的互连

说明:docker是容器化部署,那它的每个容器运行都是在虚拟化环境中运行,那么就是在不同的主机运行,ip肯定不一致,所以docker提供了一个link参数桥接容器与容器之间的连接,以达到高可用的效果

docker run -d --name zuuls -p:5555:5555 --link eurekas:eurekas myzuul:1.0

可以看到目前已经启动了两个容器分别是eureka和网关zuul
在这里插入图片描述
测试网络是否互通
进入网关容器

docker exec -it zuuls /bin/bash

查看eureka是否和它互连

cat  /etc/hosts

在这里插入图片描述
在网关容器内部我去pingeureka的ip

ping eureka的ip

在这里插入图片描述

上图所示,可以ping通,OK~~

查看效果
在这里插入图片描述

搭建其它服务

微服务业务服务很多,我这里就举例一个了~其它的大同小异,和我这个类似,自行发挥就行

编辑Dockerfile

From  myjdk:1.0

RUN mkdir /jars

ADD other-server-1.0-SNAPSHOT.jar  /jars/other.jar

ENTRYPOINT ["java","-jar","/jars/other.jar"]

打包镜像并运行

注意:其它服务是通过网关进行转发的,那么其它服务就不能默认localhost了,就要给它分发一个ip,让网关根据我们设置的ip去找容器,这样就可以转发成功,必须设置我设置的为172.18.0.4,这个是根据刚才的网关和eureka的ip自己随便弄一个就行,至于为了是172.18.0.4因为这是我服务器上这几个容器运行的网段,~~

#端口
server:
  port: 8111

spring:
  application:
    name: other-server
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/myxue?characterEncoding=utf-8
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
  cloud:
    inetutils:
      default-ip-address: 172.18.0.4
eureka:
  instance:
    hostname: localhost
    prefer-ip-address: true
    instance-id: ${spring.cloud.inetutils.default-ip-address}:${spring.application.name}:${server.port}
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: http://eurekas:8761/eureka
#配置mybatis-plus打印sql语句于控制台
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    #开启驼峰命名转换
    map-underscore-to-camel-case: true

docker build -t myother:1.0 .

在这里插入图片描述

docker images

在这里插入图片描述
运行容器
–link:这里互通两个,一个是eureka,一个是网关zuul

说明:普通服务要注册到eureka上,并且也要和zuul互通,因为网关的转发都是基于其它服务的所以这是必然的~

docker run -d --name other-server -p:8111:8111 --link eurekas:eurekas --link zuuls:zuuls myother:1.0
docker ps

在这里插入图片描述

查看注册中心服务列表,成功!
在这里插入图片描述

结语

自此,docker就算入门了,还有其它更优秀的知识能够更简洁的部署服务,这里是我学到docker的入门阶段自己实践成功之后发布的文章,供大家参考学习~,循序渐进,完事儿。

有问题?联系我

如果你没有实践成功,或者文章有不理想的地方,欢迎一起交流
微信:x331191249
QQ:2509647976

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值