简介
近几年,很流行的一件事就是使用docker来跑微服务。这就会涉及到我们需要将编译后的jar包还得通过某种方式打包进镜像中,然后利用镜像启动容器。
maven有一个docker-maven-plugin插件,可以让我们在编译的时候直接生成包含最终编译后的jar包的镜像。
一、项目配置
1.1 编辑pom.xml
在项目的pom.xml文件中新增配置
<!-- docker maven -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<!--docker镜像相关的配置信息-->
<configuration>
<registryUrl>registry.test.com</registryUrl> <!--镜像生成后需要推送到某个仓库地址的配置-->
<pushImage>true</pushImage> <!--是否向配置的仓库推送镜像-->
<imageName>registry.test.com/o2o/${project.artifactId}</imageName> <!--生成的镜像名称-->
<!--TAG,这里用工程版本号-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!-- 使用Dockerfile -->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!--这里是复制 jar 包到 docker 容器指定目录配置-->
<forceTags>true</forceTags> <!--覆盖相同标签镜像-->
<resources> <!-- 指定资源文件 -->
<resource>
<targetPath>/</targetPath> <!-- 指定要复制的目录路径,这里是当前目录 -->
<directory>${project.build.directory}</directory> <!-- 指定要复制的根目录,这里是target目录 -->
<include>${project.build.finalName}.jar</include> <!-- 指定需要拷贝的文件,这里指最后生成的jar包 -->
</resource>
</resources>
</configuration>
</plugin>
1.2 新增Dockerfile文件和run.sh文件
- 在项目src/main路径下新建docker目录,在其中创建Dockerfile文件
#基础镜像来源
FROM registry.test.com/common/java:8u111-jdk
#同步容器和宿主机时间
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
ADD /cloud-zuul-server-1.0.0.jar /
ADD ./run.sh /
ENV JAVA_OPTS=""
ENV EUREKA_HOST="eureka-service"
ENV CONFIG_HOST="config-service"
ENV CONFIG_PROFILE="default"
ENV SERVER_PORT="8105"
ENTRYPOINT [ "sh", "-c", "/run.sh" ]
- 在docker目录下新建run.sh文件
java $JAVA_OPTS -jar /cloud-zuul-server-1.0.0.jar \
--eureka.host=$EUREKA_HOST --config.host=$CONFIG_HOST --config.profile=$CONFIG_PROFILE --server.port=$SERVER_PORT
- 在项目根路径下执行编译命令生成镜像
mvn clean package -U -Dmaven.test.skip=true docker:build
1.3 编写yaml
1.3.1 编写deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: cloud-eureka-server
namespace: local
spec:
replicas: 1
template:
metadata:
labels:
app: cloud-eureka-server
spec:
containers:
- name: cloud-eureka-server
image: registry.test.com/o2o/cloud-eureka-server
tty: true
ports:
- containerPort: 9761
1.3.2 编写service.yaml
apiVersion: v1
kind: Service
metadata:
name: eureka-service
namespace: local
spec:
type: ClusterIP
ports:
- port: 9761
targetport: 9761
selector:
app: cloud-eureka-server
1.3.3 编写ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: eureka-ingress
namespace: local
spec:
rules:
- host: eureka.test.com
http:
paths:
- path: /
backend:
serviceName: eureka-service
servicePort: 9761
1.4 部署springcloud项目
[root@k8s-master ingress]# kubectl create -f deployment.yaml service.yaml ingress.yaml
通过dashboard查看部署
通过浏览器访问eureka.test.com查看eureka注册中心
至此,我们使用docker-maven-plugin来生成springcloud项目镜像成功,并顺便给大家展示了下springcloud的注册中心eureka用k8s部署的方式。
版权声明:本文为qq_22917163原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。