一、 Docker网络模式
Docker在创建容器时有四种网络模式:bridge/host/container/none,bridge为默认不需要用–net去指定,其他三种模式需要在创建容器时使用–net去指定
1.bridge模式(默认模式)
docker run时使用 -p 端口:端口,这种模式会为每个容器分配一个独立的Network Namespace, 同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的
例如:
$ docker run -itd -p 7101:7101 镜像ID
-p参数可以出现多次,绑定多个端口号
$ docker run -itd -p 8080:8080 -p 8088:8088 镜像ID
2.host模式
docker run时使用–net=host,容器将不会虚拟出IP/端口,而是使用宿主机的IP和端口
例:
docker run -itd --net=host 961769676411
注1:host模式不能使用端口映射和自定义路由规则,这些都与主机一致,-p 与-icc 参数是无效的;
3.container模式(略)
4.none模式(略)
具体见
https://www.cnblogs.com/yy-cxd/p/6553624.html
二、我使用springCloud的做案例,打包放入容器中
-
idea中springcloud项目打jar包
1)在idea运行springcloud项目,不报错,均可正常访问
2)修改主模块的pom
注意改为pom而不是jar<version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging>
主模块不要配置插件
<build></build>
3)在各个子module模块的pom.xml文件中添加插件依赖
注:在各个子模块中必须添加<packaging>jar</packaging> <build> <plugins> <!--添加maven插件--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--添加自己的启动类路径!--> <mainClass>com.imooc.DemoApplication</mainClass> </configuration> <executions> <execution> <goals> <!--可以把依赖的包都打包到生成的Jar包中--> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
4) run Maven —》clean
去掉之前打的包target文件夹,
然再创建install,target文件夹下面jar包就是发布包
-
打包好后可以测试一下
copy jar 包到指定目录,例如:d:\temp\apps目录下,再通过java命令直接运行
cmd
d:
cd d:\temp\apps
java -jar *.jar --spring.profiles.active=xxx
*:哪个jar包名称
xxx:节点
例如:
java -jar eureka-server-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar eureka-server-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
-
docker部署springcloud
1) 宿主机修改hosts文件vim /etc/hosts
在里面添加要映射的域名即可
127.0.0.1 peer1
127.0.0.1 peer2
2)宿主机创建文件夹apps,上传eureka-server-cluster.jar包至apps此目录稍后作为数据卷,在宿主机和容器之间共享数据
mkdir /apps
3)使用配置过jdk镜像启动容器,并挂载指定目录为数据卷docker run -d \ -it \ --net=host \ --name eureka-server-peer2 \ --mount type=bind,source=/apps,target=/apps \ 镜像ID
4)进入容器启动微服务命令
防火墙配置firewall-cmd --zone=public --add-port=7101/tcp --permanent firewall-cmd --zone=public --add-port=7102/tcp --permanent
重启防火墙
firewall-cmd --reload
docker exec -it eureka-server-peer1 /bin/sh
java -jar eureka-server-cluster.jar --spring.profiles.active=peer1注1:同理可以启动eureka-server-peer2
注2:docker start $(docker ps -aq)
启动后看效果
最终效果
其他节点与上面操作相同,每个端口记得设置防火墙