恕我是docker小白,自己做的springboot应用还不知道如何使用docker部署。于是只能寻求网上各种例子匹配到自己觉得应该是最合理的路数
如何在docker中部署springboot的web应用
这篇文章要求我们选择一个centos的基础镜像,我想应该不会那么复杂吧。
于是我先安装jdk,
docker pull index.tenxcloud.com/revolc/openjdk8-jre
上传到自己的私服上
docker tag b3cd86bfca5c 192.168.4.27/dev/openjdk8-jre
docker push 192.168.4.27/dev/openjdk8-jre
然后可以登陆harbor,执行docker pull 192.168.4.27/dev/openjdk8-jre:latest
进行下载。
1 spring boot单应用部署
springboot的应用在这里不描述,网上一堆,
新建Dockerfile
FROM 192.168.4.27/dev/openjdk8-jre
VOLUME /tmp
ADD xxxcenter.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
将jar和dockerfile放到同一个目录中如下面所述
执行命令构建xxxcenter的镜像,注意.
不能少
docker build -t center2018040401 .
启动xxxcenter中的服务,注意8761侧为docker对外的地址,8671是应用自身的地址,在浏览器中输入的是http://ip:8761
进行访问
docker run -p 8761:8671 xxxcenter #这种在控制台可以看到日志
docker run -p 8761:8671 -d xxxcenter #这种方式不在控制台输出
执行docker ps
,可以看到正在运行的程序
启动之后,如何停掉此应用呢,执行命令docker stop 容器名或容器ID
2 Eureka集群
关于Eureka的描述,可以参考Eureka简介,对Eureka和zookeeper对比,我个人觉得还是很容易看的明白的
Eureka作为服务的注册中心,即生产环境必须使用集群才能保证系统之间稳定运行
待解决。。。
3 docker-compose
FROM openjdk:8
VOLUME /tmp
ADD target/erueka-server.jar erueka-server.jar
EXPOSE 8761
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT [ "java","-Djava.security.egd=file:/dev/./urandom","-jar","/erueka-server.jar" ]
# 安装docker-compose
pip3 install docker-compose
#
4 erueka注册的问题
在erueka中注册是内网ip,外部是无法访问的,下面两种都是不行的。
那么怎么办呢,在启动命令中添加EUREKA_INSTANCE_IP-ADDRESS
,重新发布后,虽然看到的容器ip,但实际用的是主机ip
eureka:
instance:
prefer-ip-address: true
# hostname: ${spring.cloud.client.ip-address}
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
client:
service-url:
defaultZone: http://192.168.0.118:8761/eureka
enabled: true
docker run -d --name gateway-server -p 8762:8762 -e “EUREKA_INSTANCE_IP-ADDRESS=192.168.0.118” gateway-server:0.0.1
在我本地微服务,连接docker中的erueka后出现异常:
com.sun.jersey.api.client.ClientHandlerException: org.apache.http.NoHttpResponseException: 192.168.0.118:8761 failed to respond
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1]
at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1]
at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.9.3.jar:1.9.3]
at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1]
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1]
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1]
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509) ~[jersey-client-1.19.1.jar:1.19.1]