作者:naniwang99_537_742 | 来源:互联网 | 2024-10-21 17:57
1.打包发布到本地 < plugin> < groupId> com. spotify< / groupId> < artifactId> dockerfile- maven- plugin< / artifactId> < version> 1.4 .10 < / version> < configuration> < dockerfile> DockerFile< / dockerfile> < repository> ${ docker. image. prefix} / ${ project. artifactId} < / repository> < buildArgs> < JAR_FILE> target/ ${ project. build. finalName} . jar< / JAR_FILE> < / buildArgs> < / configuration> < / plugin>
pom添加此dockerfile插件。 若版本为1.4以下会出现 &#xff0c; Could not acquire image ID or digest following build
标签为指定dockerfile文件目录&#xff0c;在不指定情况下根目录新建Dockerfile可能会找不到而报错&#xff1a; Could not acquire image ID or digest following build 根目录新建Dockerfile&#xff08;pom同级&#xff09;
FROM java: 8 EXPOSE 10012 ARG JAR_FILE ADD ${ JAR_FILE} / server- sync. jar ENTRYPOINT [ "java" , "-jar" , "/server-sync.jar" ]
这里根据需求写。
打开docker的Expose daemon on tcp://localhost:2375 without TLS 我这边使用的时windows直接勾选就行。
然后执行
mvn clean package dockerfile: build - Dskiptests
就是maven clean&#43;mvn package&#43;dockerfile打包到容器&#xff0c;跳过测试。
feign调用 feign时springcloud的一个组件&#xff0c;服务通过注册到eureka发现服务&#xff0c;然后使用feign时&#xff0c;会自动去寻找对应的服务的地址端口。比resttemplate方便的地方在于不用写服务地址&#xff0c;就算服务地址改变了也不用更改任何代码。
docker说白了就是虚拟机&#xff0c;在系统下构建一块虚拟机linux&#xff0c;那docker首先会从网卡中分出一个网段&#xff0c;docker默认为桥接。然后分配到各个docker容器&#xff08;虚拟机&#xff09;下。 相当于docker在主机下面重新开了一个路由器&#xff0c;然后由docker分配ip&#xff0c; 那么当docker容器处于同一个主机时&#xff0c;我们只需要配置
eureka&#xff1a;instance: prefer- ip- address: true
把真实ip显示出来就行&#xff0c;此ip为docker分配给容器的ip。那么feign获得的此ip可以直接使用。
当服务处于不同主机时&#xff0c;使用此IP肯定时无法访问&#xff0c;不同主机之间应该使用主机ip来访问&#xff0c;docker通过映射端口也可以通过主机地址访问内到容器。
我们可以指定环境变量
EUREKA_INSTANCE_IP- ADDRESS&#61; 192.168 .0 .58
192.168.0.58 ip为主机ip&#xff0c; 可以在docker启动时配置&#xff0c;也可以写在dockerfile中 启动时添加参数
- e "EUREKA_INSTANCE_IP-ADDRESS&#61;192.168.0.58"
dockerfile添加参数
ENV EUREKA_INSTANCE_IP- ADDRESS 192.168 .0 .58
192.168.0.58 ip为主机ip&#xff0c;
当然 nginx也是不错的选择&#xff0c;在此部一一赘述。