docker微服务部署之:三,搭建Zuul微服务项目

1.Centos7安装Docker

详见:Centos7安装Docker

2.Docker中安装jdk1.8

详见:使用Docker构建jdk1.8

3.Docker中安装mysql5.7

详见:docker安装mysql

在防火墙中开启3306端口,不然启动article项目连接docker中的mysql时,会报如下错误:

  1. Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
  2.  
  3. The last packet sent successfully to the server was milliseconds ago. The driver has not received any packets from the server.

查看端口是否开启,开启端口以及移除指定端口命令如下:

  1. #查看是否开启指定端口
  2. $ sudo firewall-cmd --query-port=/tcp
  3. no
  4. #添加指定需要开放的端口
  5. $ sudo firewall-cmd --add-port=/tcp --permanent
  6. success
    #移除指定端口
    #firewall-cmd --permanent --remove-port=3306/tcp
  7. #重新载入添加/移除的端口
  8. $ sudo firewall-cmd --reload
  9. #也可再查下是否开启指定端口
  10. $ sudo firewall-cmd --query-port=/tcp
  11. yes

4.部署demo_eureka项目

我的虚拟机的ip地址为:192.168.31.181

4.1 把demo_eureka项目打成jar包

4.1.1 打包前,修改项目配置

在打包之前,需要在demo_eureka项目中修改如下几个地方:

修改pom.xml,新增如下内容:

  1. <build>
  2. <finalName>app</finalName>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-maven-plugin</artifactId>
  7. </plugin>
  8. </plugins>
  9. </build>

修改application.yml中如下内容

  1. #defaultZone: http://127.0.0.1:${server.port}/eureka
    #192.168.31.181为虚拟机的IP地址
  2. defaultZone: http://192.168.31.181:${server.port}/eureka

4.1.2 将demo_eureka项目打成app.jar

将demo_eureka项目以及后面的demo_article项目、demo_zuul项目都打成app.jar,是因为方便利用Dockerfile部署时方便。

点击idea窗体左小角的Terminal,然后将项目demo_eureka拖动到Terminal窗体里,接着输入mvn clean package,如图:

刷新target目录,即可在该目录下看到app.jar。

4.1.3 防火墙开启7000端口(7000端口为demo_eureka项目中自定义的server.port端口号)

如果没有开启7000端口,article服务和zuul服务,会注册不到eureka上来。

  1. #查看是否开启指定端口
  2. $ sudo firewall-cmd --query-port=/tcp
  3. no
  4. #添加指定需要开放的端口
  5. $ sudo firewall-cmd --add-port=/tcp --permanent
  6. success
  7. #移除指定端口
  8. #firewall-cmd --permanent --remove-port=/tcp
  9. #重新载入添加/移除的端口
  10. $ sudo firewall-cmd --reload
  11. #也可再查下是否开启指定端口
  12. $ sudo firewall-cmd --query-port=/tcp
  13. yes

4.1.4 docker构建eureka镜像,创建并运行eureka容器、查看eureka容器运行日志

a.构建镜像前的准备工作:

  1. # 创建用于存放app.jar和Dockerfile文件的目录,取名为mydocker
  2. $ sudo mkdir /usr/local/mydocker
  3. $ sudo cd /usr/local/mydocker
  4. # 将app.jar上传到该目录(/usr/local/mydocker/)
  5. # 创建Dockerfile文件,文件名必须一模一样
  6. $ sudo vi Dockerfile
    # 基于jdk1.8镜像构建eureka镜像(因为eureka是打成了jar是通过java -jar来运行)
  7. FROM jdk1.8
    # 将当前目录的app.jar,复制到eureka镜像的/目录,名为app.jar
  8. ADD app.jar /app.jar
    # 之所以用ENTRYPOINT命令,而不是CMD命令,是因为docker run会覆盖掉CMD命令里的内容。该行命令,就是执行java -jar /app.jar
  9. ENTRYPOINT ["java","-jar","/app.jar"]

b.构建eureka镜像

  1. # eureka为构建后的镜像名称,下面最后的.和.前面的空格一定不能少。最后的.表示使用当前目录中的Dockerfile来构建。
  2. $ sudo docker build -t eureka .
  3. Sending build context to Docker daemon .05MB
  4. Step / : FROM jdk1.
  5. ---> 1f2578d93bd0
  6. Step / : ADD app.jar /app.jar
  7. ---> 14d818fa91b0
  8. Step / : ENTRYPOINT ["java","-jar","/app.jar"]
  9. ---> Running in d421e50bf8cd
  10. Removing intermediate container d421e50bf8cd
  11. ---> 15c87bf6f8e5
  12. Successfully built 15c87bf6f8e5
  13. Successfully tagged eureka:latest
  14. # 上面输出Successfully...表示构建eureka镜像成功,也可通过docker images命令查看是否构建成功
    $ sudo docker images
  15. REPOSITORY TAG IMAGE ID CREATED SIZE
  16. eureka latest 15c87bf6f8e5 seconds ago 645MB
    ...
    # 上面可以看到REPOSITORY下有一个名为eureka的镜像,即表示构建成功

c.运行eureka容器

  1. # docker run 表示创建一个新的容器并运行
  2. # -d 表示以守护模式运行,也就是后台运行,非阻塞式运行
  3. # --name=eureka 表示运行后的容器名称为eureka
  4. # -p : 表示将宿主机的7000端口和eureka容器的7000之间做个绑定
  5. # 最后的eureka,是docker images中查看到的镜像名称
  6. $ sudo docker run -d --name=eureka -p : eureka
  7. 0af7b3701b59048f9f9a901b29aff31b9956b2391c3d299f7e5f6016c8c44ffb
  8. #出现如上一个很长的字符串,表示运行docker创建了一个eureka容器,并运行eureka容器成功,但至于eureka容器中的eureka服务是否能和我们预期的那么部署成功,还待下一步验证

d.验证eureka服务

首先查看eureka容器是否在运行中

  1. #查看运行中的容器(后面加 -a 可查看所有容器,不管该容器是否在运行中)
  2. $ sudo docker ps
  3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  4. 0af7b3701b59 eureka "java -jar /app.jar" minutes ago Up minutes 0.0.0.0:->/tcp eureka

可通过两种方式验证:

1.通过浏览器访问eureka服务地址,是否能看到eureka界面

2.通过查看运行日志

  1. # docker logs 查看docker容器运行日志
  2. # -f --tail= 一直查看最后30行的日志
  3. # eureka 容器的名称
  4. $ sudo docker logs -f --tail= eureka

5.部署demo_article项目

5.1 把demo_article项目打成jar包

5.1.1 打包前,修改项目配置

在打包之前,需要修改demo_article项目中修改如下几个地方:

修改pom.xml,新增如下内容:

  1. <build>
  2. <finalName>app</finalName>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-maven-plugin</artifactId>
  7. </plugin>
  8. </plugins>
  9. </build>

修改application.yml中相应部分内容为如下:

  1. ...
  2. url: jdbc:mysql://192.168.31.181:3306/docker?characterEncoding=UTF8
  3. ...
  4. defaultZone: http://192.168.31.181:7000/eureka
  5. ...

5.1.2 将demo_article项目打成app.jar

点击idea窗体左小角的Terminal,然后将项目demo_article拖动到Terminal窗体里,接着输入mvn clean package,回车,刷新target目录,即可在该目录下看到app.jar。

5.1.3 防火墙开启9001端口(9001端口为demo_article项目中自定义的server.port端口号)

如果没有开启9001端口,会出现demo_article项目在article容器中启动成功,但是无法访问article服务。

  1. #查看是否开启指定端口
  2. $ sudo firewall-cmd --query-port=/tcp
  3. no
  4. #添加指定需要开放的端口
  5. $ sudo firewall-cmd --add-port=/tcp --permanent
  6. success
  7. #移除指定端口
  8. #firewall-cmd --permanent --remove-port=/tcp
  9. #重新载入添加/移除的端口
  10. $ sudo firewall-cmd --reload
  11. #也可再查下是否开启指定端口
  12. $ sudo firewall-cmd --query-port=/tcp
  13. yes

5.1.4 docker构建article镜像、创建和运行article容器、查看article容器运行日志

a.构建镜像前的准备工作

  1. $ sudo cd /usr/local/mydocker
  2. # 将app.jar上传到该目录(/usr/local/mydocker/)
  3. $ sudo ls
    app.jar Dockerfile

因为在构建eureka镜像时,已经创建了一个用于存放jar包和Dockerfile的目录叫mydocker,所以不用再创建。

另外,由于不管是哪个项目,都打包成了名为app.jar,所以Dockerfile文件也可以复用。

故只需要把demo_article打成的jar包,上传到/usr/local/mydocker目录下,覆盖掉原先的app.jar即可。

b.构建article镜像

  1. # article为构建后的镜像名称,下面最后的.和.前面的空格一定不能少。最后的.表示使用当前目录中的Dockerfile来构建。
  2. $ sudo docker build -t article .
  3. Sending build context to Docker daemon .05MB
  4. Step / : FROM jdk1.
  5. ---> 1f2578d93bd0
  6. Step / : ADD app.jar /app.jar
  7. ---> 9633e0cb462b
  8. Step / : ENTRYPOINT ["java","-jar","/app.jar"]
  9. ---> Running in a51dd9b611e6
  10. Removing intermediate container a51dd9b611e6
  11. ---> 7f5954f085f6
  12. Successfully built 7f5954f085f6
  13. Successfully tagged eureka:latest
  14. # 上面输出Successfully...表示构建article镜像成功,也可通过docker images命令查看是否构建成功
  15. $ sudo docker images
  16. REPOSITORY TAG IMAGE ID CREATED SIZE
  17. article latest 7f5954f085f6 minutes ago 651MB
  18. ...
  19. # 上面可以看到REPOSITORY下有一个名为article的镜像,即表示构建成功

c.运行article容器

  1. # docker run 表示创建一个新的容器并运行
  2. # -d 表示以守护模式运行,也就是后台运行,非阻塞式运行
  3. # --name=article 表示运行后的容器名称为article
  4. # -p : 表示将宿主机的9001端口和eureka容器的9001之间做个绑定
  5. # 最后的eureka,是docker images中查看到的镜像名称
  6. $ sudo docker run -d --name=article -p : article
  7. 7031e9a5bd25d2708e18b8b986ae3081c09bb29caa4948fd437e7b5a9b47c602
  8. #出现如上一个很长的字符串,表示运行docker创建了一个article容器,并运行article容器成功,但至于article容器中的article服务是否能和我们预期的那么部署成功,还待下一步验证

d.验证article服务

首先查看article容器是否在运行中

  1. #查看运行中的容器(后面加 -a 可查看所有容器,不管该容器是否在运行中)
  2. $ sudo docker ps
  3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  4. 7031e9a5bd25 article "java -jar /app.jar" About a minute ago Up About a minute 0.0.0.0:->/tcp article

可通过三种方式验证:

1.通过浏览器访问eureka服务地址,查看demo_article服务是否注册到eureka上

2.通过查看运行日志

  1. # docker logs 查看docker容器运行日志
  2. # -f --tail= 一直查看最后30行的日志
  3. # article 容器的名称
  4. $ sudo docker logs -f --tail= article

3.通过访问demo_article项目的url

6. 部署demo_zuul项目

6.1 把demo_zuul项目打成jar包

6.1.1 打包前,修改项目配置

在打包之前,需要修改demo_zuul项目中修改如下几个地方:

修改pom.xml,新增如下内容:

  1. <build>
  2. <finalName>app</finalName>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-maven-plugin</artifactId>
  7. </plugin>
  8. </plugins>
  9. </build>

修改application.yml中相应部分内容为如下:

  1. ...
  2. defaultZone: http://192.168.31.181:7000/eureka
  3. ...

6.1.2 将demo_zuul项目打成app.jar

点击idea窗体左小角的Terminal,然后将项目demo_zuul拖动到Terminal窗体里,接着输入mvn clean package,回车,刷新target目录,即可在该目录下看到app.jar。

6.13 防火墙开启8888端口(8888端口为demo_zuul项目中自定义的server.port端口号)

如果没有开启8888端口,会出现通过网关代理去访问article服务时,出现访问错误情况。

  1. #查看是否开启指定端口
  2. $ sudo firewall-cmd --query-port=/tcp
  3. no
  4. #添加指定需要开放的端口
  5. $ sudo firewall-cmd --add-port=/tcp --permanent
  6. success
  7. #移除指定端口
  8. #firewall-cmd --permanent --remove-port=/tcp
  9. #重新载入添加/移除的端口
  10. $ sudo firewall-cmd --reload
  11. #也可再查下是否开启指定端口
  12. $ sudo firewall-cmd --query-port=/tcp
  13. yes

6.1.4 docker构建zuul镜像、创建和运行zuul容器、查看zuul容器运行日志

a.构建镜像前的准备工作

  1. $ sudo cd /usr/local/mydocker
  2. # 将app.jar上传到该目录(/usr/local/mydocker/)
  3. $ sudo ls
  4. app.jar Dockerfile

因为在构建eureka镜像时,已经创建了一个用于存放jar包和Dockerfile的目录叫mydocker,所以不用再创建。

另外,由于不管是哪个项目,都打包成了名为app.jar,所以Dockerfile文件也可以复用。

故只需要把demo_article打成的jar包,上传到/usr/local/mydocker目录下,覆盖掉原先的app.jar即可。

b.构建zuul镜像

  1. # zuul为构建后的镜像名称,下面最后的.和.前面的空格一定不能少。最后的.表示使用当前目录中的Dockerfile来构建。
  2. $ sudo docker build -t zuul .
  3. Sending build context to Docker daemon .05MB
  4. Step / : FROM jdk1.
  5. ---> 1f2578d93bd0
  6. Step / : ADD app.jar /app.jar
  7. ---> 9496a939de7f
  8. Step / : ENTRYPOINT ["java","-jar","/app.jar"]
  9. ---> Running in e682a3f423e5
  10. Removing intermediate container e682a3f423e5
  11. ---> 62c091b00c8f
  12. Successfully built 62c091b00c8f
  13. Successfully tagged eureka:latest
  14. # 上面输出Successfully...表示构建article镜像成功,也可通过docker images命令查看是否构建成功
  15. $ sudo docker images
  16. REPOSITORY TAG IMAGE ID CREATED SIZE
  17. zuul latest 62c091b00c8f About a minute ago 642MB
  18. ...
  19. # 上面可以看到REPOSITORY下有一个名为zuul的镜像,即表示构建成功

c.运行zuul容器

  1. # docker run 表示创建一个新的容器并运行
  2. # -d 表示以守护模式运行,也就是后台运行,非阻塞式运行
  3. # --name=zuul 表示运行后的容器名称为zuul
  4. # -p : 表示将宿主机的9001端口和zuul容器的8888之间做个绑定
  5. # 最后的zuul,是docker images中查看到的镜像名称
  6. $ sudo docker run -d --name=zuul -p : zuul
  7. 94a28b1a9fdd2456aab3cbae3685e3fe77cd1754e2107a6f3bcc0b3d788051d1
  8. #出现如上一个很长的字符串,表示运行docker创建了一个zuul容器,并运行zuul容器成功,但至于zuul容器中的zuul服务是否能和我们预期的那么部署成功,还待下一步验证

d.验证zuul服务

首先查看zuul容器是否在运行中

#查看运行中的容器(后面加 -a 可查看所有容器,不管该容器是否在运行中)

  1. $ sudo # docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 94a28b1a9fdd zuul "java -jar /app.jar" About a minute ago Up About a minute 0.0.0.0:->/tcp zuul

可通过三种方式验证:

1.通过浏览器访问eureka服务地址,查看demo_zuul服务是否注册到eureka上

2.通过查看运行日志

  1. # docker logs 查看docker容器运行日志
  2. # -f --tail= 一直查看最后30行的日志
  3. # zuul容器的名称
  4. $ sudo docker logs -f --tail= zuul

3.通过zuul网关代理访问demo_article项目的url

docker微服务部署之:五、利用DockerMaven插件自动构建镜像

docker微服务部署之:四、安装docker、docker中安装mysql和jdk1.8、手动构建镜像、部署项目的更多相关文章

  1. docker微服务部署之:六、Rancher管理部署微服务

    docker微服务部署之:五.利用DockerMaven插件自动构建镜像 一. 什么是Rancher Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源 ...

  2. docker微服务部署之:五、利用DockerMaven插件自动构建镜像

    docker微服务部署之:四.安装docker.docker中安装mysql和jdk1.8.手动构建镜像.部署项目 在上一篇文章中,我们是手动构建镜像,即: 4.1.2.5.1.2.6.1.2中的将d ...

  3. docker微服务部署之:三,搭建Zuul微服务项目

    docker微服务部署之:二.搭建文章微服务项目 一.新增demo_eureka模块,并编写代码 右键demo_parent->new->Module->Maven,选择Module ...

  4. docker微服务部署之:七、Rancher进行微服务扩容和缩容

    docker微服务部署之:六.Rancher管理部署微服务 Rancher有两个特色用起来很方便,那就是扩容和缩容. 一.扩容前的准备工作 为了能直观的查看效果,需要修改下demo_article项目 ...

  5. docker微服务部署之:二、搭建文章微服务项目

    docker微服务部署之:一,搭建Eureka微服务项目 一.新增demo_article模块,并编写代码 右键demo_parent->new->Module->Maven,选择M ...

  6. docker微服务部署之:一,搭建Eureka微服务项目

    先说明一下docker需要搭建的微服务的基本情况: 项目情况:一个demo_parent项目,下面三个子模块:demo_eureka(eureka服务).demo_article(文章服务).demo ...

  7. 《Spring Cloud与Docker微服务架构实战》配套代码

    不才写了本使用Spring Cloud玩转微服务架构的书,书名是<Spring Cloud与Docker微服务架构实战> - 周立,已于2017-01-12交稿.不少朋友想先看看源码,现将 ...

  8. 微服务架构实践 - 你只懂docker与spring boot就够了吗?

    微服务架构实践 - 你只懂docker与spring boot就够了吗? 作者 浮云发发 已关注 2017.02.27 02:50* 字数 2613 阅读 2583评论 6喜欢 35赞赏 2 微服务并 ...

  9. Spring Cloud与Docker微服务架构实战 PDF版 内含目录

    Spring Cloud与Docker微服务架构实战  目录 1 微服务架构概述 1 1.1 单体应用架构存在的问题1 1.2 如何解决单体应用架构存在的问题3 1.3 什么是微服务3 1.4 微服务 ...

随机推荐

  1. ios 解决Wkwebview闪烁问题

    // 网页闪烁问题    if ([self.webView.realWebView isKindOfClass:[WKWebView class]]) {         ((WKWebView * ...

  2. 电话号码的字母组合 · Letter Combinations of a Phone Number

    [抄题]: Given a digit string excluded 01, return all possible letter combinations that the number coul ...

  3. Struts2,Spring3,Hibernate4整合--SSH框架

    Struts2,Spring3,Hibernate4整合--SSH框架(学习中) 一.包的导入 1.Spring包 2.Hibernate 包 3.struts 包 (还欠 struts2-sprin ...

  4. Basic4android v3.20 发布

    这次主要是可视化设计器的增强. 具体新功能如下: This version includes many important improvements: Visual designer Anchors ...

  5. 各大主流.Net的IOC框架性能测试比较(转)

    出处:http://www.cnblogs.com/liping13599168/archive/2011/07/17/2108734.html 在上一篇中,我简单介绍了下Autofac的使用,有人希 ...

  6. 关于Safari浏览器使用的几点总结

    声明:下载的是Safari英文版本,在Windows操作系统下使用. 一.Safari浏览器中的开发者调试工具隐藏得比较深,找了好久才找到的,方法:按一下键盘上的alt键,浏览器上方就会弹出一个开发者 ...

  7. Linux上编译hadoop-2.7.1的libhdfs.so和libhdfs.a

    hadoop提供了CMake来编译libhdfs,因此在编译之前需要先安装好CMake工具. 然后进入libhdfs的源代码目录,如:/data/hadoop-2.7.1-src/hadoop-hdf ...

  8. linux每天一小步---cp命令详解

    1 命令功能      cp命令用于复制文件或者目录,cp是copy的缩写. 2 命令语法 cp  [参数] 源文件或者目录  目的文件或者目录 3 命令参数 -a  等同于-dRp,保存所有 -d ...

  9. Modelsim10.2c使用教程(一个完整工程的仿真)

    之前玩过Altera的板子,不不, 现在应该叫intel PSG.在QuartusII13.0上老喜欢用modelsim_ae做仿真,小工程用起来也方便,但是我做IIC配置摄像头的时序仿真时,就显得有 ...

  10. 9.使用GetData,Children实现对ZNode的监控

    一. zookeeper中的watcher 1. exists :监控的是[znode]的CUD 的操作   2. getdata 的时候注册的watcher[U,D 监控]update delete ...