本章目标:
Docker网络配置
项目导出成jar包并上传到宿主机(Erueka项目测试即可)
Docker网络配置
Docker网络模式介绍
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 mytomcat -p 8081:8080 镜像ID
docker run -it -d --name mytomcat02 -p 8081:8080 镜像ID
docker run -it -d --name mytomcat03 --net=host 镜像ID
如果主机模式的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
修改原先的build文件
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>
<parent>
<groupId>com.cgl</groupId>
<artifactId>microservice</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>microservice-eureka-server</artifactId>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
</dependencies>
<build>
<plugins>
<!--添加maven插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--添加自己的启动类路径!-->
<mainClass>com.cgl.microserviceeurekaserver.MicroserviceEurekaServerApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<!--可以把依赖的包都打包到生成的Jar包中-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
3、拿jar 包
copy这个
4、上传
上传到宿主机上去,并创建一个/javacgl/apps
宿主机修改hosts文件
== vim /etc/hosts==
## 在里面添加要映射的域名即可
127.0.0.1 eureka2001.javacgl.com
127.0.0.1 eureka2002.javacgl.com
合集启动
启动了一个erueka-server-peer1的容器
docker run -d \
-it \
--net=host \
--name eureka-server-peer1 \
--mount type=bind,source=/javacgl/apps,target=/javacgl/apps \
镜像ID
开启,用主机模式,并绑定其中的一个文件
开启服务
java -jar microservice-eureka-server.jar --spring.profiles.active=eureka2001
拿到jar包的文件夹下,开始运行 eureka2001