目录
前言
本章的内容为网络配置的概念,以及在我之前的博客中的springcloud合集中的一些项目都会在本章出现,
因为本章的一个核心点也就是如何把springcloud项目中的子项目都放入到容器中。
在之前的学习中我们掌握了许多的知识,比如数据卷,上章放到云端且包含jre的镜像,都与本章的网络配置进行一个结合。
网络配置的概念
Docker在创建容器时有三种网络模式,bridge为默认不需要用–net去指定,其他三种模式需要在创建容器时使用–net去指定。
bridge 模式,使用–net=bridge指定,默认设置。
none 模式,使用–net=none指定。
host 模式,使用–net=host指定。
container 模式,使用–net=container:容器名称或ID指定
1、bridge网络模式
Bridge桥接模式的缺陷:
-
最明显的是,该模式下 Docker Container 不具有一个公有 IP,即和宿主机的 eth0
不处于同一个网段。导致的结果是宿主机以外的世界不能直接和容器进行通信。 -
虽然 NAT 模式经过中间处理实现了这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争端口,容器内部服务的访问者需要使用服务发现获知服务的外部端口等。
-
另外 NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。
2、HOST网络模式
host 模式是 bridge 桥接模式很好的补充。采用 host 模式的 Docker Container,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换。
Host 网络模式的缺陷:
当然,有这样的方便,肯定会损失部分其他的特性。
-
最明显的是 Docker Container 网络环境隔离性的弱化。即容器不再拥有隔离、独立的网络栈。
-
另外,使用 host 模式的 Docker Container 虽然可以让容器内部的服务和传统情况无差别、无改造的使用,但是由于网络隔离性的弱化,该容器会与宿主机共享竞争网络栈的使用;
-
另外,容器内部将不再拥有所有的端口资源,原因是部分端口资源已经被宿主机本身的服务占用,还有部分端口已经用以 bridge 网络模式容器的端口映射。
3、container模式和none模式
参考链接在这,因为本章不涉及到这个两个模式,所以就不去过多涉及
http://www.freesion.com/article/54811900/
4、测试bridge和host模式的区别
下载tomcat8,来测试:
docker run -it -d --name mytomcat01 -p 8081:8080 镜像ID
docker run -it -d --name mytomcat02 --net=host 镜像ID
然后自行测试一下
ip:8081 # 桥接模式
ip:8080 # 主机模式
如果主机模式的8080端口进不去就关闭防火墙:
开放端口 (建议直接开启两个,还有一个3306mysql要用)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
跟新防火墙规则
firewall-cmd --reload
防火墙列表
firewall-cmd --zone=public --list-ports
防火墙状态
systemctl status firewalld
启动防火墙
systemctl start firewalld
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
项目导出成jar包并上传到宿主机(Erueka项目测试即可)
要修改pom.xml并导出install的项目:
1、父项目的pom.xml
2、Erueka注册中心的pom.xml
pom.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--保持使用版本的一致1.0-SNAPSHOT-->
<parent>
<groupId>com.liwangwang</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>microservice-eureka-server</artifactId>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- eureka是一个服务注册,服务发现框架基于rset的服务,这个是服务注册中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 修改后立即生效,热部署 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
<version>1.4.5.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--添加maven插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--添加自己的启动类路径!-->
<mainClass>com.liwangwang.microserviceeurekaserver.MicroserviceEurekaServerApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<!--可以把依赖的包都打包到生成的Jar包中-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
3、拿jar 包
copy到
4、上传
上传到宿主机上去,并创建一个/javawwl/apps
合集启动
启动了一个erueka-server-peer1的容器
docker run -di --name erueka-server-peer1 --net=host --mount type=bind,source=/javawwl/apps,target=/javawwl/apps 镜像ID
开启服务
java -jar microservice-eureka-server.jar --spring.profiles.active=eureka2001
测试:
宿主机ip:端口号
还可以搞一个集群都行;
方法一样
后记
在拿需要依赖于公共模块的子项目的时候是会出问题的,所以就提前放出来:
maven install的时候报错,提示程序或引用找不到:
https://blog.csdn.net/weixin_43943548/article/details/103390116