设为首页 收藏本站
查看: 2418|回复: 0

[经验分享] 『高级篇』docker之微服务服务docker化(18)

[复制链接]

尚未签到

发表于 2019-2-20 06:44:10 | 显示全部楼层 |阅读模式
  >原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
>原文链接地址:『高级篇』docker之微服务服务docker化(18)
  这次进入微服务的部署,代码也基本都通过了。如果比做一首歌曲的话,前奏已经结束,现在开始我们的高潮部分,如果吧我们的服务使用docker,使用服务编排工具,把项目给部署运行起来。源码:https://github.com/limingios/msA-docker


注意

  因docker话都是在linux环境,为了方便编写dockerfile文件,我切换到mac本上进行演示,目的只有一个方便开发sh。方便使用。CICD学习实践首选电脑还是mac。


微服务部署


  • 服务docker化,可以在docker下运行。
  • Docker仓库创建,docker创建的镜像push到仓库里面。
  • 构建高可用的集群环境,Mesos,Swarm,kubernetes。运行这3个服务编排工具把我们的服务运行和编排起来。可以优雅的启动,停止,扩充容,故障的恢复。

docker化

  服务有个适合的环境,服务可以运行起来,给他准备一个环境,比如服务是个种子,我们需要准备一片土地,服务是一条鱼,就需要准备一片大海。源码中的服务有一个是python写的,有一个是java写的,也就是需要2个运行环境,一个基于java,一个基于python。

DSC0000.jpg



  • java镜像
      去hub.docker.com 搜索java,找到tag


DSC0001.jpg



  • 下载java镜像
      先配置加速,https://www.daocloud.io/mirror



docker pull java:openjdk-8
docker images|grep jdk
DSC0002.jpg

DSC0003.jpg



  • 安装jdk容器
    docker run -it --entrypoint bash java:openjdk-8
    java -version
DSC0004.jpg

DSC0005.jpg


开始dockerfile的开发

  熟悉docker的老铁应该都知道,如果要编译docker的话需要docker化,首选需要开发dockerfile文件。



  •   准备工作

      文件中不能有写死的情况,如果写死了,每次服务的变更都需要变更镜像。为了减少构建镜像的过程,尽量吧数据库的访问地址,经常会发生变化的东西,需要踢出去,不要在配置文件中配置死,针对数据库的访问,不能地址直接写死,mysql的地址,当服务运行在docker之后,他的ip是实时都在变化的,不能写死在镜像里,直接就找不到了就报错了。还有个问题,我们的服务以什么样的形式放在我们docker里面,springboot之所以说适用于微服务,他有个很大的好处,它可以将咱们的服务构建成一个fat jar,只有一个jar包,然后通过java的一个命令:java -jar 文件.jar 运行起来,这种方式对于微服务来说也是很友好的,也非常的简单,就使用这种方式来做。变量的方式就可以通过springboot --mysql.address 就可以传递进来了。


  • 构建user-thrift-service
      修改配置文件  和 pom.xml文件


  application.properties

service.name=user-thrift-service
service.port=7911
#数据源的配置
spring.datasource.url=jdbc:mysql://{mysql.address}:3306/db_user
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

  pom.xml




org.springframework.boot
spring-boot-starter-parent
1.5.3.RELEASE

4.0.0
com.idig8
user-thrift-service
1.0-SNAPSHOT


org.springframework.boot
spring-boot-starter


org.apache.thrift
libthrift
0.10.0


com.idig8
user-thrift-service-api
1.0-SNAPSHOT


org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.1


mysql
mysql-connector-java
5.1.44





org.apache.maven.plugins
maven-compiler-plugin
2.3.2

1.8
1.8



org.springframework.boot
spring-boot-maven-plugin



repackage







  Dockfile编写


FROM java:openjdk-8
MAINTAINER liming www.idig8.com
COPY target/user-thrift-service-1.0-SNAPSHOT.jar /user-thrift-service.jar
ENTRYPOINT ["java","-jar","/user-thrift-service.jar"]
DSC0006.jpg


  执行build生成镜像


docker build -t user-thrift-service:latest .
DSC0007.jpg


  查看ip地址

ifconfig
DSC0008.jpg

  生成容器

docker run -it user-thrift-service:latest --mysql.address=192.168.1.140
DSC0009.jpg


  新建立build.sh


#!/usr/bin/env bash
  mvn package
docker build -t user-thrift-service:latest .


![](https://upload-images.jianshu.io/upload_images/11223715-966e41457da6513c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 构建message-thrift-python-service
>后面很多的服务,都依赖它,必须把它做好。它是一个python的服务,我们需要找一个python的镜像。去官方找吧
``` bash
docker pull python:3.6
docker images|grep python
DSC00010.jpg


  编写Dockerfile


FROM python:3.6
MAINTAINER liming www.idig8.com
RUN pip install thrift
ENV PYTHONPATH /
COPY message /message
ENTRYPOINT ["python","/message/message_service.py"]

DSC00011.jpg


docker build -t message-thrift-python-service:latest .
DSC00012.jpg


  build开发


#!/usr/bin/env bash
docker build -t message-thrift-python-service:latest .
DSC00013.jpg


  镜像生成容器


docker run -it message-thrift-python-service:latest
DSC00014.jpg



  • 构建user-edge-service
      微服务的依赖,了解docker的老铁应该知道可以通过link的方式,去根据名字搜索到这个服务,只要不在开发范围内的,认为是通过另外的介入方式ip,域名的方式。通过docker分为2种情况,微服务和微服务之间的通信,微服务和外围系统的通信。
    修改配置文件  和 pom.xml文件


  application.properties

server.name=user-edge-service
server.port=8082
thrift.user.ip=user-thrift-service
thrift.user.port=7911
thrift.message.ip=message-thrift-python-service
thrift.message.port=9090
#redis config
spring.redis.host=${redis.address}
spring.redis.port=6379
spring.redis.password=liming
spring.redis.timeout=30000

  pom.xml




org.springframework.boot
spring-boot-starter-parent
1.5.3.RELEASE

4.0.0
com.idig8
user-edge-service
1.0-SNAPSHOT


org.springframework.boot
spring-boot-starter-web


org.apache.thrift
libthrift
0.10.0


com.idig8
user-thrift-service-api
1.0-SNAPSHOT


com.idig8
message-thrift-service-api
1.0-SNAPSHOT


org.springframework.boot
spring-boot-starter-data-redis


commons-lang
commons-lang
2.6


org.springframework.boot
spring-boot-starter-thymeleaf





org.apache.maven.plugins
maven-compiler-plugin
2.3.2

1.8
1.8



org.springframework.boot
spring-boot-maven-plugin



repackage







  Dockerfile编写


FROM java:openjdk-8
MAINTAINER liming www.idig8.com
COPY target/user-edge-service-1.0-SNAPSHOT.jar /user-edge-service.jar
ENTRYPOINT ["java","-jar","/user-edge-service.jar"]
DSC00015.jpg


  build.sh 编写


#!/usr/bin/env bash
mvn package
docker build -t user-edge-service:latest .
DSC00016.jpg


sh build.sh
DSC00017.jpg

DSC00018.jpg


  创建容器


docker run -it user-edge-service:latest --redis.address=192.168.1.140
DSC00019.jpg



  • 构建course-dubbo-service

  微服务的依赖,了解docker的老铁应该知道可以通过link的方式,去根据名字搜索到这个服务,只要不在开发范围内的,认为是通过另外的介入方式ip,域名的方式。通过docker分为2种情况,微服务和微服务之间的通信,微服务和外围系统的通信。
修改配置文件  和 pom.xml文件

  application.properties

#dubbo 配置
spring.dubbo.application.name=course-dubbo-service
spring.dubbo.registry.address=zookeeper://${zookeeper.address}:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
#spring.dubbo.protocol.host=127.0.0.1
spring.dubbo.scan=com.idig8.course
#数据源的配置
spring.datasource.url=jdbc:mysql://${mysql.address}:3306/db_course
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
thrift.user.ip=user-thrift-service
thrift.user.port=7911
  pom.xml




org.springframework.boot
spring-boot-starter-parent
1.5.3.RELEASE

4.0.0
com.idig8
course-dubbo-service
1.0-SNAPSHOT


io.dubbo.springboot
spring-boot-starter-dubbo
1.0.0


org.springframework.boot
spring-boot-starter


org.apache.thrift
libthrift
0.10.0


org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.1


mysql
mysql-connector-java
5.1.44


com.idig8
course-dubbo-service-api
1.0-SNAPSHOT


com.idig8
user-thrift-service
1.0-SNAPSHOT


com.idig8
user-thrift-service-api
1.0-SNAPSHOT





org.apache.maven.plugins
maven-compiler-plugin
2.3.2

1.8
1.8



org.springframework.boot
spring-boot-maven-plugin



repackage







  Dockerfile编写


FROM java:openjdk-8
MAINTAINER liming www.idig8.com
COPY target/course-dubbo-service-1.0-SNAPSHOT.jar /course-dubbo-service.jar
ENTRYPOINT ["java","-jar","/course-dubbo-service.jar"]
DSC00020.jpg


  build.sh 编写

#!/usr/bin/env bashmvn package
docker build -t course-dubbo-service:latest .
sh build.sh
DSC00021.jpg

DSC00022.jpg


  创建容器


docker run -it course-dubbo-service:latest --redis.address=192.168.1.140 --zookeeper.address=192.168.1.140
DSC00023.jpg



  • 构建course-edge-service
      跟之间的基本是一样的,都是重复的工作。直接看源码吧

    • 修改pom文件增加maven构建
    • 增加dockerfile文件
    • 增加build.sh文件
    • 资源文件的修改


DSC00024.jpg


docker run -it course-edge-service:latest --zookeeper.address=192.168.1.140
DSC00025.jpg

DSC00026.jpg


docker run -it gataway-zuul:latest                                         
DSC00027.jpg

  PS:把所有单独的服务,做成了镜像,下次想个办法服务和镜像统一的运行起来。
DSC00028.jpg





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674538-1-1.html 上篇帖子: 『高级篇』docker之APIGateway(17) 下篇帖子: 『高级篇』docker之微服务docker下的服务通讯(19)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表