天天看點

Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

文章目錄

  • 1、Docker網絡配置
    • Docker網絡模式介紹
  • 外部通路docker容器
  • 2、Docker部署SpringCloud項目
    • idea中springcloud項目打jar包
    • docker部署springcloud

1、Docker網絡配置

Docker網絡模式介紹

Docker在建立容器時有四種網絡模式:bridge/host/container/none,bridge為預設不需要用–net去指定,其他三種模式需要在建立容器時使用–net去指定

  1. bridge模式(預設模式)

docker run時使用–net=bridge,這種模式會為每個容器配置設定一個獨立的Network Namespace,

同一個主控端上的所有容器會在同一個網段下,互相之間是可以通信的

注1:bridge為預設模式,不需要使用參數–net去指定,使用了–net參數反而無效

注2:bridge模式無法指定容器IP(但非絕對)

檢視容器

Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

通過指令

docker rm -f +imageId

删除所有的容器

最後幹淨了

Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker run -it --name mytomcat01 -p 8081:8080 鏡像ID

建兩個

最好使用保險的tomcat7版本;

Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

這裡是通路不了8080 的

2. host模式 docker run時使用–net=host,容器将不會虛拟出IP/端口,而是使用主控端的IP和端口

docker run -itd --net=host 961769676411
           
注1:host模式不能使用端口映射和自定義路由規則,這些都與主機一緻,-p 與-icc 參數是無效的
  1. container模式(略)
  2. none模式(略)
  3. 跨主機通信(略)

    以上四種均未跨主機,也就是說容器均運作在一台主控端上,但實際生産環境不可能隻用一台來跑。

    肯定會用到多台,那麼多台主機之間的容器如何通信

    1.使用路由機制打通網絡

    2.使用Open vSwitch(OVS)打通網絡

    3.使用flannel來打通網絡

    4.使用Quagga來實作自動學習路由

注1:詳情見

https://www.cnblogs.com/yy-cxd/p/6553624.html

外部通路docker容器

  1. bridge模式
docker run -itd  -p 7101:7101 鏡像ID
           

-p參數可以出現多次,綁定多個端口号

docker run -itd -p 8080:8080 -p 8088:8088 鏡像ID

  1. 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

  1. 相關指令
#停止并删除所有容器
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
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

這樣才能通路到8080

Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

2、Docker部署SpringCloud項目

首先确定本地項目沒有問題,再開始部署。

啟動三合一的Eureka

http://localhost:2001/
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

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> 

           
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

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>

           

注意修改成自己的

Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

4、首先可以清空一下target,RunMaven—>clear,再RunMaven—>install,一定不能報錯

Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

如果遇到打包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>

           
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

jar包拷貝出來看注意大小,很小的話就是有問題的

Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

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項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

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
           
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

2.主控端建立檔案夾apps,rz上傳eureka-server-cluster.jar包至apps

  • 此目錄稍後作為資料卷,在主控端和容器之間共享資料
  • Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
  • Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
    3.使用jre:8鏡像啟動容器,并挂載指定目錄為資料卷
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
docker run -d \
       -it \
       --net=host \
       --name eureka-server-peer5 \
       --mount type=bind,source=/wxm/apps,target=/wxm/apps \
      04e72ed3aeee

           
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
注意: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之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目
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/

Docker之網絡配置和部署SpringCloud項目1、Docker網絡配置外部通路docker容器2、Docker部署SpringCloud項目

還要記得把防火牆打開

防火牆狀态 systemctl status firewalld

啟動防火牆 systemctl start firewalld

關閉防火牆 systemctl stop firewalld.service

關閉開機自啟動 systemctl disable firewalld.service