docker实现多个jar部署在一个容器中

在之前的文章中介绍了如何在docker中部署多个实例,这篇文章讲演化后的第二版本的docker部署多jar包。

Dockerfile

centos7+java环境

FROM centos:7
MAINTAINER linwenyao
WORKDIR /usr
RUN mkdir  /usr/local/java
ADD jdk-8u181-linux-x64.tar.gz /usr/local/java/

ENV JAVA_HOME /usr/local/java/jdk1.8.0_181
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

添加语言包:

FROM registry.cn-hangzhou.aliyuncs.com/lin-service/java-env:1.0.0
MAINTAINER linwenyao

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
	&& yum -y update \
	&& yum -y install kde-l10n-Chinese \
	&& yum -y reinstall glibc-common \
	&& localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 \
	&& echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf \
	&& source /etc/locale.conf \
	&& yum clean all
ENV LANG=zh_CN.UTF-8 \
    LC_ALL=zh_CN.UTF-8

另外把maven的pom.xml文件添加如下配置:

//添加环境变量
<profiles>
    <profile>
        <id>cloud</id>
        <properties>
            <spring.profiles.active>cloud</spring.profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <spring.profiles.active>test</spring.profiles.active>
        </properties>
    </profile>
    <profile>
        <id>local</id>
        <properties>
            <spring.profiles.active>local</spring.profiles.active>
        </properties>
    </profile>
</profiles>

pom.xml中还要添加如下配置:

//修改配置文件中的标识符,因为在.yml中$标识符被占用,所以需要改成#
<properties>
    <resource.delimiter>#</resource.delimiter>
</properties>

//定义占位符
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/resources.${spring.profiles.active}</directory>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

并且springboot的配置文件bootstrap.yml改成:

spring:
  profiles:
    active: #spring.profiles.active#

重点是#spring.profiles.active#,#是标识符,spring.profiles.active是占位符

然后就是生成最后的容器了:

FROM registry.cn-hangzhou.aliyuncs.com/lin-service/java-env:1.1.0
MAINTAINER linwenyao

COPY xxx/target/xxx.jar /app1.jar
COPY xxx/xxx/target/xxx.jar /app2.jar
COPY xxx/xxx/target/xxx.jar /app3.jar
COPY xxx/xxx/target/xxx.jar /app4.jar

RUN echo -e \
"#!/bin/sh\n"\
"nohup java -jar /app1.jar > 1.log &\n"\
"nohup java -jar /app2.jar > 2.log &\n"\
"nohup java -jar /app3.jar >3.log &"\
>> /usr/bin/start.sh

RUN chmod +x /usr/bin/start.sh
CMD nohup sh -c "start.sh && java -jar /app4.jar"

jenkins的配置也要改,首先maven的build命令:
-Pxxx就是使用profiles中配置的环境变量名称
在这里插入图片描述
然后就是build:

docker build -t registry.cn-hangzhou.aliyuncs.com/xxx:1.1.0 .
docker run -d --name xxx -p 8105:8105 registry.cn-hangzhou.aliyuncs.com/xxx:1.1.0
docker push registry.cn-hangzhou.aliyuncs.com/xxx:1.1.0

似乎还有第三个版本,等我想起来再补充

Logo

更多推荐