docker微服务部署之:三,搭建Zuul微服务项目html
详见:Centos7安装Dockerjava
详见:使用Docker构建jdk1.8mysql
详见:docker安装mysqlspring
在防火墙中开启3306端口,否则启动article项目链接docker中的mysql时,会报以下错误:sql
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
查看端口是否开启,开启端口以及移除指定端口命令以下:docker
#查看是否开启指定端口 $ sudo firewall-cmd --query-port=3306/tcp no #添加指定须要开放的端口 $ sudo firewall-cmd --add-port=3306/tcp --permanent success
#移除指定端口
#firewall-cmd --permanent --remove-port=3306/tcp #从新载入添加/移除的端口 $ sudo firewall-cmd --reload #也可再查下是否开启指定端口 $ sudo firewall-cmd --query-port=3306/tcp yes
个人虚拟机的ip地址为:192.168.31.181浏览器
在打包以前,须要在demo_eureka项目中修改以下几个地方:app
修改pom.xml,新增以下内容:maven
<build> <finalName>app</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
修改application.yml中以下内容tcp
#defaultZone: http://127.0.0.1:${server.port}/eureka
#192.168.31.181为虚拟机的IP地址 defaultZone: http://192.168.31.181:${server.port}/eureka
将demo_eureka项目以及后面的demo_article项目、demo_zuul项目都打成app.jar,是由于方便利用Dockerfile部署时方便。
点击idea窗体左小角的Terminal,而后将项目demo_eureka拖动到Terminal窗体里,接着输入mvn clean package,如图:
刷新target目录,便可在该目录下看到app.jar。
若是没有开启7000端口,article服务和zuul服务,会注册不到eureka上来。
#查看是否开启指定端口 $ sudo firewall-cmd --query-port=7000/tcp no #添加指定须要开放的端口 $ sudo firewall-cmd --add-port=7000/tcp --permanent success #移除指定端口 #firewall-cmd --permanent --remove-port=7000/tcp #从新载入添加/移除的端口 $ sudo firewall-cmd --reload #也可再查下是否开启指定端口 $ sudo firewall-cmd --query-port=7000/tcp yes
a.构建镜像前的准备工做:
# 建立用于存放app.jar和Dockerfile文件的目录,取名为mydocker $ sudo mkdir /usr/local/mydocker $ sudo cd /usr/local/mydocker # 将app.jar上传到该目录(/usr/local/mydocker/) # 建立Dockerfile文件,文件名必须如出一辙 $ sudo vi Dockerfile
# 基于jdk1.8镜像构建eureka镜像(由于eureka是打成了jar是经过java -jar来运行) FROM jdk1.8
# 将当前目录的app.jar,复制到eureka镜像的/目录,名为app.jar ADD app.jar /app.jar
# 之因此用ENTRYPOINT命令,而不是CMD命令,是由于docker run会覆盖掉CMD命令里的内容。该行命令,就是执行java -jar /app.jar ENTRYPOINT ["java","-jar","/app.jar"]
b.构建eureka镜像
# eureka为构建后的镜像名称,下面最后的.和.前面的空格必定不能少。最后的.表示使用当前目录中的Dockerfile来构建。 $ sudo docker build -t eureka . Sending build context to Docker daemon 46.05MB Step 1/3 : FROM jdk1.8 ---> 1f2578d93bd0 Step 2/3 : ADD app.jar /app.jar ---> 14d818fa91b0 Step 3/3 : ENTRYPOINT ["java","-jar","/app.jar"] ---> Running in d421e50bf8cd Removing intermediate container d421e50bf8cd ---> 15c87bf6f8e5 Successfully built 15c87bf6f8e5 Successfully tagged eureka:latest # 上面输出Successfully...表示构建eureka镜像成功,也可经过docker images命令查看是否构建成功
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE eureka latest 15c87bf6f8e5 51 seconds ago 645MB
...
# 上面能够看到REPOSITORY下有一个名为eureka的镜像,即表示构建成功
c.运行eureka容器
# docker run 表示建立一个新的容器并运行 # -d 表示以守护模式运行,也就是后台运行,非阻塞式运行 # --name=eureka 表示运行后的容器名称为eureka # -p 7000:7000 表示将宿主机的7000端口和eureka容器的7000之间作个绑定 # 最后的eureka,是docker images中查看到的镜像名称 $ sudo docker run -d --name=eureka -p 7000:7000 eureka 0af7b3701b59048f9f9a901b29aff31b9956b2391c3d299f7e5f6016c8c44ffb #出现如上一个很长的字符串,表示运行docker建立了一个eureka容器,并运行eureka容器成功,但至于eureka容器中的eureka服务是否能和咱们预期的那么部署成功,还待下一步验证
d.验证eureka服务
首先查看eureka容器是否在运行中
#查看运行中的容器(后面加 -a 可查看全部容器,无论该容器是否在运行中) $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0af7b3701b59 eureka "java -jar /app.jar" 17 minutes ago Up 17 minutes 0.0.0.0:7000->7000/tcp eureka
可经过两种方式验证:
1.经过浏览器访问eureka服务地址,是否能看到eureka界面
2.经过查看运行日志
# docker logs 查看docker容器运行日志 # -f --tail=30 一直查看最后30行的日志 # eureka 容器的名称 $ sudo docker logs -f --tail=30 eureka
在打包以前,须要修改demo_article项目中修改以下几个地方:
修改pom.xml,新增以下内容:
<build> <finalName>app</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
修改application.yml中相应部份内容为以下:
... url: jdbc:mysql://192.168.31.181:3306/docker?characterEncoding=UTF8 ... defaultZone: http://192.168.31.181:7000/eureka ...
点击idea窗体左小角的Terminal,而后将项目demo_article拖动到Terminal窗体里,接着输入mvn clean package,回车,刷新target目录,便可在该目录下看到app.jar。
若是没有开启9001端口,会出现demo_article项目在article容器中启动成功,可是没法访问article服务。
#查看是否开启指定端口 $ sudo firewall-cmd --query-port=9001/tcp no #添加指定须要开放的端口 $ sudo firewall-cmd --add-port=9001/tcp --permanent success #移除指定端口 #firewall-cmd --permanent --remove-port=9001/tcp #从新载入添加/移除的端口 $ sudo firewall-cmd --reload #也可再查下是否开启指定端口 $ sudo firewall-cmd --query-port=9001/tcp yes
a.构建镜像前的准备工做
$ sudo cd /usr/local/mydocker # 将app.jar上传到该目录(/usr/local/mydocker/) $ sudo ls
app.jar Dockerfile
由于在构建eureka镜像时,已经建立了一个用于存放jar包和Dockerfile的目录叫mydocker,因此不用再建立。
另外,因为无论是哪一个项目,都打包成了名为app.jar,因此Dockerfile文件也能够复用。
故只须要把demo_article打成的jar包,上传到/usr/local/mydocker目录下,覆盖掉原先的app.jar便可。
b.构建article镜像
# article为构建后的镜像名称,下面最后的.和.前面的空格必定不能少。最后的.表示使用当前目录中的Dockerfile来构建。 $ sudo docker build -t article . Sending build context to Docker daemon 46.05MB Step 1/3 : FROM jdk1.8 ---> 1f2578d93bd0 Step 2/3 : ADD app.jar /app.jar ---> 9633e0cb462b Step 3/3 : ENTRYPOINT ["java","-jar","/app.jar"] ---> Running in a51dd9b611e6 Removing intermediate container a51dd9b611e6 ---> 7f5954f085f6 Successfully built 7f5954f085f6 Successfully tagged eureka:latest # 上面输出Successfully...表示构建article镜像成功,也可经过docker images命令查看是否构建成功 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE article latest 7f5954f085f6 2 minutes ago 651MB ... # 上面能够看到REPOSITORY下有一个名为article的镜像,即表示构建成功
c.运行article容器
# docker run 表示建立一个新的容器并运行 # -d 表示以守护模式运行,也就是后台运行,非阻塞式运行 # --name=article 表示运行后的容器名称为article # -p 9001:9001 表示将宿主机的9001端口和eureka容器的9001之间作个绑定 # 最后的eureka,是docker images中查看到的镜像名称 $ sudo docker run -d --name=article -p 9001:9001 article 7031e9a5bd25d2708e18b8b986ae3081c09bb29caa4948fd437e7b5a9b47c602 #出现如上一个很长的字符串,表示运行docker建立了一个article容器,并运行article容器成功,但至于article容器中的article服务是否能和咱们预期的那么部署成功,还待下一步验证
d.验证article服务
首先查看article容器是否在运行中
#查看运行中的容器(后面加 -a 可查看全部容器,无论该容器是否在运行中) $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7031e9a5bd25 article "java -jar /app.jar" About a minute ago Up About a minute 0.0.0.0:9001->9001/tcp article
可经过三种方式验证:
1.经过浏览器访问eureka服务地址,查看demo_article服务是否注册到eureka上
2.经过查看运行日志
# docker logs 查看docker容器运行日志 # -f --tail=30 一直查看最后30行的日志 # article 容器的名称 $ sudo docker logs -f --tail=30 article
3.经过访问demo_article项目的url
在打包以前,须要修改demo_zuul项目中修改以下几个地方:
修改pom.xml,新增以下内容:
<build> <finalName>app</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
修改application.yml中相应部份内容为以下:
... defaultZone: http://192.168.31.181:7000/eureka ...
点击idea窗体左小角的Terminal,而后将项目demo_zuul拖动到Terminal窗体里,接着输入mvn clean package,回车,刷新target目录,便可在该目录下看到app.jar。
若是没有开启8888端口,会出现经过网关代理去访问article服务时,出现访问错误状况。
#查看是否开启指定端口 $ sudo firewall-cmd --query-port=8888/tcp no #添加指定须要开放的端口 $ sudo firewall-cmd --add-port=8888/tcp --permanent success #移除指定端口 #firewall-cmd --permanent --remove-port=8888/tcp #从新载入添加/移除的端口 $ sudo firewall-cmd --reload #也可再查下是否开启指定端口 $ sudo firewall-cmd --query-port=8888/tcp yes
a.构建镜像前的准备工做
$ sudo cd /usr/local/mydocker # 将app.jar上传到该目录(/usr/local/mydocker/) $ sudo ls app.jar Dockerfile
由于在构建eureka镜像时,已经建立了一个用于存放jar包和Dockerfile的目录叫mydocker,因此不用再建立。
另外,因为无论是哪一个项目,都打包成了名为app.jar,因此Dockerfile文件也能够复用。
故只须要把demo_article打成的jar包,上传到/usr/local/mydocker目录下,覆盖掉原先的app.jar便可。
b.构建zuul镜像
# zuul为构建后的镜像名称,下面最后的.和.前面的空格必定不能少。最后的.表示使用当前目录中的Dockerfile来构建。 $ sudo docker build -t zuul . Sending build context to Docker daemon 46.05MB Step 1/3 : FROM jdk1.8 ---> 1f2578d93bd0 Step 2/3 : ADD app.jar /app.jar ---> 9496a939de7f Step 3/3 : ENTRYPOINT ["java","-jar","/app.jar"] ---> Running in e682a3f423e5 Removing intermediate container e682a3f423e5 ---> 62c091b00c8f Successfully built 62c091b00c8f Successfully tagged eureka:latest # 上面输出Successfully...表示构建article镜像成功,也可经过docker images命令查看是否构建成功 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE zuul latest 62c091b00c8f About a minute ago 642MB ... # 上面能够看到REPOSITORY下有一个名为zuul的镜像,即表示构建成功
c.运行zuul容器
# docker run 表示建立一个新的容器并运行 # -d 表示以守护模式运行,也就是后台运行,非阻塞式运行 # --name=zuul 表示运行后的容器名称为zuul # -p 8888:8888 表示将宿主机的9001端口和zuul容器的8888之间作个绑定 # 最后的zuul,是docker images中查看到的镜像名称 $ sudo docker run -d --name=zuul -p 8888:8888 zuul 94a28b1a9fdd2456aab3cbae3685e3fe77cd1754e2107a6f3bcc0b3d788051d1 #出现如上一个很长的字符串,表示运行docker建立了一个zuul容器,并运行zuul容器成功,但至于zuul容器中的zuul服务是否能和咱们预期的那么部署成功,还待下一步验证
d.验证zuul服务
首先查看zuul容器是否在运行中
#查看运行中的容器(后面加 -a 可查看全部容器,无论该容器是否在运行中)
$ sudo # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 94a28b1a9fdd zuul "java -jar /app.jar" About a minute ago Up About a minute 0.0.0.0:8888->8888/tcp zuul
可经过三种方式验证:
1.经过浏览器访问eureka服务地址,查看demo_zuul服务是否注册到eureka上
2.经过查看运行日志
# docker logs 查看docker容器运行日志 # -f --tail=30 一直查看最后30行的日志 # zuul容器的名称 $ sudo docker logs -f --tail=30 zuul
3.经过zuul网关代理访问demo_article项目的url