简介

近几年,很流行的一件事就是使用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文件

  1. 在项目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" ]
  1. 在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
  1. 在项目根路径下执行编译命令生成镜像
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部署的方式。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐