文章目錄
- 1、Docker網絡配置
-
- Docker網絡模式介紹
- 外部通路docker容器
- 2、Docker部署SpringCloud項目
-
- idea中springcloud項目打jar包
- docker部署springcloud
1、Docker網絡配置
Docker網絡模式介紹
Docker在建立容器時有四種網絡模式:bridge/host/container/none,bridge為預設不需要用–net去指定,其他三種模式需要在建立容器時使用–net去指定
- bridge模式(預設模式)
docker run時使用–net=bridge,這種模式會為每個容器配置設定一個獨立的Network Namespace,
同一個主控端上的所有容器會在同一個網段下,互相之間是可以通信的
注1:bridge為預設模式,不需要使用參數–net去指定,使用了–net參數反而無效
注2:bridge模式無法指定容器IP(但非絕對)
檢視容器
通過指令
docker rm -f +imageId
删除所有的容器
最後幹淨了
Docker run -it --name mytomcat01 -p 8081:8080 鏡像ID
建兩個
最好使用保險的tomcat7版本;
這裡是通路不了8080 的
2. host模式 docker run時使用–net=host,容器将不會虛拟出IP/端口,而是使用主控端的IP和端口
docker run -itd --net=host 961769676411
注1:host模式不能使用端口映射和自定義路由規則,這些都與主機一緻,-p 與-icc 參數是無效的
- container模式(略)
- none模式(略)
-
跨主機通信(略)
以上四種均未跨主機,也就是說容器均運作在一台主控端上,但實際生産環境不可能隻用一台來跑。
肯定會用到多台,那麼多台主機之間的容器如何通信
1.使用路由機制打通網絡
2.使用Open vSwitch(OVS)打通網絡
3.使用flannel來打通網絡
4.使用Quagga來實作自動學習路由
注1:詳情見
https://www.cnblogs.com/yy-cxd/p/6553624.html
外部通路docker容器
- bridge模式
docker run -itd -p 7101:7101 鏡像ID
-p參數可以出現多次,綁定多個端口号
docker run -itd -p 8080:8080 -p 8088:8088 鏡像ID
- host模式
docker run -itd --net=host 鏡像ID
注1:不需要添加-p參數,因為它使用的就是主機的IP和端口,添加-p參數後,反而會出現以下警告: WARNING: Published
ports are discarded when using host network mode
注2:主控端的ip路由轉發功能一定要打開,否則所建立的容器無法聯網! echo 1 >
/proc/sys/net/ipv4/ip_forward
- 相關指令
#停止并删除所有容器
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
網橋檢視工具bridge-utils
apt install bridge-utils
brctl show
[[email protected] ~]# docker run -it --name mytomcat3 --net=host
這樣才能通路到8080
2、Docker部署SpringCloud項目
首先确定本地項目沒有問題,再開始部署。
啟動三合一的Eureka
http://localhost:2001/
idea中springcloud項目打jar包
打jar不需要安裝Tomcat環境,war包需要依賴外界的環境
1.在idea運作springcloud項目,不報錯,均可正常通路
2.修改主子產品的pom
<version>0.0.1-SNAPSHOT</version>
<!-- 1.注意更改為pom而不是jar -->
<!--
<packaging>jar</packaging>
-->
<packaging>pom</packaging>
3.在各個子module子產品的pom.xml檔案中添加插件依賴
停止啟動剛剛的服務
打包三合一的eureka+provider+consume
<build>
<plugins>
<!--添加maven插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--添加自己的啟動類路徑!-->
<mainClass>com.wxm.microserviceeurekaserver.MicroserviceEurekaServerApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<!--可以把依賴的包都打包到生成的Jar包中-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
注意修改成自己的
4、首先可以清空一下target,RunMaven—>clear,再RunMaven—>install,一定不能報錯
如果遇到打包jar過程中有報錯maven install的時候報錯,提示程式或引用找不到,明碼寫着common類找不到
修改common: (其他的配置檔案不需要改)
<build>
<plugins>
<!--添加maven插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>execute</classifier>
<!--添加自己的啟動類路徑!-->
<mainClass>com.wxm.microservicecommon.MicroserviceCommonApplication</mainClass>
</configuration>
<executions>
<execution>
<phase>none</phase>
<goals>
<!--可以把依賴的包都打包到生成的Jar包中-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
jar包拷貝出來看注意大小,很小的話就是有問題的
5、不要急于放到Docker中,先測試jar包有沒有問題,将項目各子子產品target目錄下的jar包,複制到指定目錄,在目錄下再通過java指令直接運作
ctrl+右鍵
java -jar microservice-eureka-server-1.0-SNAPSHOT.jar --spring.profiles.active=eureka2001
java -jar microservice-eureka-server-1.0-SNAPSHOT.jar --spring.profiles.active=eureka2002
java -jar microservice-student-provider-1.0-SNAPSHOT.jar --spring.profiles.active=provider-hystrix-1002
java -jar microservice-student-consumer-80-1.0-SNAPSHOT.jar
運作:
docker部署springcloud
我們已經知道一個Docker容器相當于一個伺服器,由上面我們得知可以在一個個具備jre環境的容器中啟動jre,可以在crm指令裡把java項目啟動起來。
1.主控端修改hosts檔案
vi /etc/hosts
- 在裡面添加要映射的域名即可
127.0.0.1 eureka2001.wxm.com
127.0.0.1 eureka2002.wxm.com
2.主控端建立檔案夾apps,rz上傳eureka-server-cluster.jar包至apps
- 此目錄稍後作為資料卷,在主控端和容器之間共享資料
- 3.使用jre:8鏡像啟動容器,并挂載指定目錄為資料卷
docker run -d \
-it \
--net=host \
--name eureka-server-peer5 \
--mount type=bind,source=/wxm/apps,target=/wxm/apps \
04e72ed3aeee
注意:jre:8是自定義鏡像,已安裝jre1.8
我有兩個注冊中心,換個容器名字再次運作
docker run -d \
-it \
--net=host \
--name eureka-server-peer6 \
--mount type=bind,source=/wxm/apps,target=/wxm/apps \
04e72ed3aeee
docker exec -it 8999135809ac /bin/sh
java -jar microservice-eureka-server-1.0-SNAPSHOT.jar --spring.profiles.active=eureka2001
java -jar microservice-eureka-server-1.0-SNAPSHOT.jar --spring.profiles.active=eureka2002
java -jar microservice-student-provider-1.0-SNAPSHOT.jar --spring.profiles.active=provider-1002
java -jar microservice-student-consumer-80-1.0-SNAPSHOT.jar
通路測試:
http://192.168.192.137:2001/
http://192.168.192.137:2002/
還要記得把防火牆打開
防火牆狀态 systemctl status firewalld
啟動防火牆 systemctl start firewalld
關閉防火牆 systemctl stop firewalld.service
關閉開機自啟動 systemctl disable firewalld.service