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