EOS Low-Code Platform 8 EOS Low-Code Platform 8
产品简介
学习指南
更新说明
安装与集成
初见EOS
低代码开发手册
专业代码开发手册
专题场景实战
公共服务框架
应用运行治理
升级手册
常见问题
  • dockerfile 说明
  • 基础镜像支持 x64 和 aarch64
  • 制作镜像
  • 获取 redis 和 mysql 镜像
  • nacos 的 dockerfile
  • gateway 的 dockerfile
  • afcenter 的 dockerfile
  • afcenter UI 的 dockerfile
  • bps 的 dockerfile
  • governor 的 dockerfile

# dockerfile 说明

# 基础镜像支持 x64 和 aarch64

# x64 镜像

  • registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:8.8-jdk8
  • registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:jdk17
  • registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:8.8
  • registry.cn-shanghai.aliyuncs.com/primeton-pub/nginx:1.24.0
  • registry.cn-shanghai.aliyuncs.com/primeton-pub/redis:6.2.14
  • registry.cn-shanghai.aliyuncs.com/primeton-pub/mysql:5.7.43

# aarch64 镜像

  • registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:8.8-jdk8-arm
  • registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:jdk17-arm
  • registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:8.8-arm
  • registry.cn-shanghai.aliyuncs.com/primeton-pub/nginx:1.24.0-arm
  • registry.cn-shanghai.aliyuncs.com/primeton-pub/redis:6.2.14-arm
  • registry.cn-shanghai.aliyuncs.com/primeton-pub/mysql:5.7.43-arm

# 制作镜像

  • 查看当前系统架构
arch
  • 根据 CPU 架构选择对应镜像
# 使用 x64 架构
FROM registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:8.8-jdk8

# 使用 aarch64 镜像, 请替换为镜像结尾`-arm`
FROM registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:8.8-jdk8-arm
  • 本文当中使用 127.0.0.1 为示例 IP 地址,真实环境需要将 127.0.0.1 替换当前环境真实运行的 IP 地址

# 获取 redis 和 mysql 镜像

  • 运行 redis 镜像

加构 x64 命令如下

docker run -d --name redis -p 6379:6379 -v $PWD/data:/redisdata registry.cn-shanghai.aliyuncs.com/primeton-pub/redis:6.2.14 --appendonly yes --requirepass primeton

加构 aarch64 或 arm64 命令如下

docker run -d --name redis -p 6379:6379 -v $PWD/data:/redisdata registry.cn-shanghai.aliyuncs.com/primeton-pub/redis:6.2.14-arm --appendonly yes --requirepass primeton
  • 运行 MySQL 镜像

加构 x64 命令如下

docker run -d --name mysql -p 3306:3306 -v $PWD/mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=primeton registry.cn-shanghai.aliyuncs.com/primeton-pub/mysql:5.7.43 --lower-case-table-names=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

加构 aarch64 或 arm64 命令如下

docker run -d --name mysql -p 3306:3306 -v $PWD/mysqldata:/bitnami/mysql/data -e MYSQL_ROOT_PASSWORD=primeton -e MYSQL_EXTRA_FLAGS='--lower-case-table-names=1' registry.cn-shanghai.aliyuncs.com/primeton-pub/mysql:5.7.43-arm

# nacos 的 dockerfile

FROM registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:8.8-jdk8
ENV NACOS_PORT=8848 DB_TYPE="" DB_DRIVER="" DB_URL="" DB_USER="" DB_PASSWD="" NACOS_PKG=nacos-2.2.3-eos83.zip

WORKDIR /opt/server
ADD ${NACOS_PKG} .

RUN yum install unzip -y; yum clean all; unzip ${NACOS_PKG}; rm -f ${NACOS_PKG}
RUN sed -i "/spring.sql.init.platform=.*$/spring.sql.init.platform=\${DB_TYPE}" conf/application.properties ;\
    sed -i "/db.driver-class-name.0=.*$/db.driver-class-name.0=\${DB_DRIVER}" conf/application.properties ;\
    sed -i "/db.url.0=.*$/cdb.url.0=\${DB_URL}" conf/application.properties ;\
    sed -i "/db.user=.*$/cdb.user=\${DB_USER}" conf/application.properties ;\
    sed -i "/db.password=.*$/cdb.password=\${DB_PASSWD}" conf/application.properties ;\
    sed -i "/server.tomcat.accesslog.enabled=.*$/cserver.tomcat.accesslog.enabled=true" conf/application.properties ;\
    sed -i "/nohup.*$/c\$JAVA \${JAVA_OPT} nacos.nacos" bin/startup.sh

EXPOSE ${NACOS_PORT}
CMD ["bash","bin/startup.sh"]

构建镜像

  • 下载 nacos-2.2.3-eos83.zip
  • 创建 Dockerfile-NACOS
  • 构建 docker build -t nacos:8.3 -f Dockerfile-NACOS .
  • 运行 nacos 镜像
docker run -d --name nacos \
  -e DB_TYPE=mysql \
  -e DB_DRIVER=com.mysql.jdbc.Driver \
  -e DB_URL="jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC" \
  -e DB_USER=root \
  -e DB_PASSWD=primeton \
  -p 8848:8848 \
  nacos:8.3 \

# gateway 的 dockerfile

FROM registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:jdk17
MAINTAINER www.primeton.com
ENV APP_NAME=GATEWAY APP_PORT=9090 \
    EOS_SYS_KEY= EOS_PROFILE= \
    REDIS_HOST= REDIS_PORT= REDIS_USER= REDIS_PASSWORD= REDIS_CLUSTER_NODES= \
    REDIS_SENTINEL_MASTER= REDIS_SENTINEL_NODES= REDIS_SENTINEL_USER= REDIS_SENTINEL_PASSWORD= \
    NACOS_URL= NACOS_USER= NACOS_PASSWORD= \
    SW_URL= JAVA_OPTS= PATCH_URLS= LICENSE_URL=

WORKDIR /skywalking-agent
ADD skywalking-java-agent-9.0.0.zip .

WORKDIR /opt/server
ADD EOS_Platform_8.3_API_Gateway.tar.gz .

RUN \
    sed -i "/export APP_NAME=.*$/cexport APP_NAME=${APP_NAME}" bin/startup.sh ;\
    sed -i "/^export EOS_DAP_MEM_OPTS=/d" bin/startup.sh ;\
    \
    sed -i "/spring.application.name=.*$/cspring.application.name=${APP_NAME}" config/application.properties
    
RUN echo -e '\
if [[ "${JAVA_OPTS}" == "" ]] || [[ "${JAVA_OPTS}" != *"-XX:MaxRAMPercentage"* ]]; \n\
then \n\
    export JAVA_OPTS="-XX:MaxRAMPercentage=75 ${JAVA_OPTS}" \n\
fi \n\
if [[ "${PATCH_URLS}" != "" ]]; \n\
then \n\
    cd /opt/server/lib \n\
    IFS="," read -ra urls <<< "$PATCH_URLS" \n\
    for url in "${urls[@]}" \n\
    do \n\
        curl -O $url \n\
        filename=$(basename "$url") \n\
        if [[ "${filename}" == *".zip" ]]; \n\
        then \n\
            unzip ${filename} && rm -f ${filename} \n\
        fi \n\
    done \n\
fi \n\
if [[ "${LICENSE_URL}" != "" ]]; \n\
then \n\
    curl -o /opt/primetonlicense.xml $LICENSE_URL \n\
fi \n\
sed -i "/server.port=.*$/cserver.port=${APP_PORT}" /opt/server/config/application.properties \n\
if [[ "${EOS_SYS_KEY}" != "" ]]; \n\
then \n\
    sed -i "/eos.gateway.sys-key=.*$/ceos.gateway.sys-key=${EOS_SYS_KEY}" /opt/server/config/application.properties \n\
fi \n\
if [[ "${REDIS_HOST}" != "" ]]; \n\
then \n\
    sed -i "/spring.redis.host=.*$/cspring.redis.host=${REDIS_HOST}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/cspring.redis.port=${REDIS_PORT}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/cspring.redis.username=${REDIS_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/cspring.redis.password=${REDIS_PASSWORD}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/c#spring.redis.cluster.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/c#spring.redis.sentinel.master=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/c#spring.redis.sentinel.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/c#spring.redis.sentinel.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/c#spring.redis.sentinel.password=" /opt/server/config/application.properties \n\
elif [[ "${REDIS_CLUSTER_NODES}" != "" ]]; \n\
then \n\
    sed -i "/spring.redis.host=.*$/c#spring.redis.host=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/c#spring.redis.port=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/cspring.redis.username=${REDIS_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/cspring.redis.password=${REDIS_PASSWORD}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/cspring.redis.cluster.nodes=${REDIS_CLUSTER_NODES}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/c#spring.redis.sentinel.master=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/c#spring.redis.sentinel.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/c#spring.redis.sentinel.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/c#spring.redis.sentinel.password=" /opt/server/config/application.properties \n\
elif [[ "${REDIS_SENTINEL_NODES}" != "" ]]; \n\
then \n\
    sed -i "/spring.redis.host=.*$/c#spring.redis.host=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/c#spring.redis.port=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/cspring.redis.username=${REDIS_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/cspring.redis.password=${REDIS_PASSWORD}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/c#spring.redis.cluster.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/cspring.redis.sentinel.master=${REDIS_SENTINEL_MASTER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/cspring.redis.sentinel.nodes=${REDIS_SENTINEL_NODES}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/cspring.redis.sentinel.username=${REDIS_SENTINEL_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/cspring.redis.sentinel.password=${REDIS_SENTINEL_PASSWORD}" /opt/server/config/application.properties \n\
else \n\
    sed -i "/spring.redis.timeout=.*$/c#spring.redis.timeout=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.host=.*$/c#spring.redis.host=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/c#spring.redis.port=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/c#spring.redis.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/c#spring.redis.password=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/c#spring.redis.cluster.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/c#spring.redis.sentinel.master=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/c#spring.redis.sentinel.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/c#spring.redis.sentinel.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/c#spring.redis.sentinel.password=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.max-active=.*$/c#spring.redis.lettuce.pool.max-active=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.max-idle=.*$/c#spring.redis.lettuce.pool.max-idle=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.max-wait=.*$/c#spring.redis.lettuce.pool.max-wait=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.min-idle=.*$/c#spring.redis.lettuce.pool.min-idle=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.shutdown-timeout=.*$/c#spring.redis.lettuce.shutdown-timeout=" /opt/server/config/application.properties \n\
fi \n\
if [[ "${NACOS_URL}" == "" ]]; \n\
then \n\
    sed -i "/spring.cloud.nacos.discovery.enabled=.*$/cspring.cloud.nacos.discovery.enabled=false" /opt/server/config/application-nacos.properties \n\
    sed -i "/spring.cloud.nacos.config.enabled=.*$/cspring.cloud.nacos.config.enabled=false" /opt/server/config/bootstrap.properties \n\
else \n\
    sed -i "/spring.cloud.nacos.discovery.enabled=.*$/cspring.cloud.nacos.discovery.enabled=true" /opt/server/config/application-nacos.properties \n\
    sed -i "/spring.cloud.nacos.discovery.server-addr=.*$/cspring.cloud.nacos.discovery.server-addr=${NACOS_URL}" /opt/server/config/application-nacos.properties \n\
    sed -i "/spring.cloud.nacos.config.enabled=.*$/cspring.cloud.nacos.config.enabled=true" /opt/server/config/bootstrap.properties \n\
    sed -i "/spring.cloud.nacos.config.server-addr=.*$/cspring.cloud.nacos.config.server-addr=${NACOS_URL}" /opt/server/config/bootstrap.properties \n\
    sed -i "/spring.cloud.nacos.username=.*$/cspring.cloud.nacos.username=${NACOS_USER}" /opt/server/config/bootstrap.properties \n\
    sed -i "/spring.cloud.nacos.password=.*$/cspring.cloud.nacos.password=${NACOS_PASSWORD}" /opt/server/config/bootstrap.properties \n\
fi \n\
if [[ "${SW_URL}" == "" ]]; \n\
then \n\
    /opt/server/bin/startup.sh run -opens \n\
else \n\
    sed -i '\''/-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=.*$/cexport JAVA_OPTS="$JAVA_OPTS -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=${SW_URL}"'\'' /opt/server/bin/startup.sh \n\
    /opt/server/bin/startup.sh run -apm -opens \n\
fi \n\
' > /opt/start.sh

RUN chmod +x /opt/start.sh
RUN chmod +x /opt/server/bin/*.sh
RUN chmod +x /opt/server/*.jar

EXPOSE ${APP_PORT} 
CMD /bin/bash -c "/opt/start.sh"

构建镜像

  • 下载 EOS_Platform_8.3_API_Gateway.tar.gz,skywalking-java-agent-9.0.0.zip(如果需要apm监控功能)
  • 创建 Dockerfile-API
  • 构建 docker build -t gateway:8.3 -f Dockerfile-API .
  • 运行 gateway 镜像
docker run -d --name gateway \
  -e NACOS_URL=127.0.0.1:8848 \
  -e REDIS_HOST=127.0.0.1 \
  -e REDIS_PORT=6379 \
  -e REDIS_PASSWORD=primeton \
  -p 9090:9090 \
  gateway:8.3

# afcenter 的 dockerfile

FROM registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:jdk17
MAINTAINER www.primeton.com
ENV APP_NAME=AFCENTER APP_PORT=28083 \
    EOS_SYS_KEY= EOS_PROFILE= \
    REDIS_HOST= REDIS_PORT= REDIS_USER= REDIS_PASSWORD= REDIS_CLUSTER_NODES= \
    REDIS_SENTINEL_MASTER= REDIS_SENTINEL_NODES= REDIS_SENTINEL_USER= REDIS_SENTINEL_PASSWORD= \
    NACOS_URL= NACOS_USER= NACOS_PASSWORD= \
    SW_URL= JAVA_OPTS= PATCH_URLS= LICENSE_URL=

WORKDIR /skywalking-agent
ADD skywalking-java-agent-9.0.0.zip .

WORKDIR /opt/server
ADD EOS_Platform_AFCenter_8.3.tar.gz .

RUN \
    sed -i "/export APP_NAME=.*$/cexport APP_NAME=${APP_NAME}" bin/startup.sh ;\
    sed -i "/^export EOS_DAP_MEM_OPTS=/d" bin/startup.sh ;\
    \
    sed -i "/spring.application.name=.*$/cspring.application.name=${APP_NAME}" config/application.properties ;\
    \
    sed -i "69,76s/<configValue key=\"Database-Type\">.*/<configValue key=\"Database-Type\">\${DB_TYPE}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
    sed -i "69,76s/<configValue key=\"C3p0-DriverClass\">.*/<configValue key=\"C3p0-DriverClass\">\${DB_DRIVER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
    sed -i "69,76s/<configValue key=\"C3p0-Url\">.*/<configValue key=\"C3p0-Url\">\${DB_URL}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
    sed -i "69,76s/<configValue key=\"C3p0-UserName\">.*/<configValue key=\"C3p0-UserName\">\${DB_USER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
    sed -i "69,76s/<configValue key=\"C3p0-Password\">.*/<configValue key=\"C3p0-Password\">\${DB_PASSWD}<\/configValue>/" config/${APP_NAME}/config/user-config.xml
    
RUN echo -e '\
if [[ "${JAVA_OPTS}" == "" ]] || [[ "${JAVA_OPTS}" != *"-XX:MaxRAMPercentage"* ]]; \n\
then \n\
    export JAVA_OPTS="-XX:MaxRAMPercentage=75 ${JAVA_OPTS}" \n\
fi \n\
if [[ "${PATCH_URLS}" != "" ]]; \n\
then \n\
    cd /opt/server/lib \n\
    IFS="," read -ra urls <<< "$PATCH_URLS" \n\
    for url in "${urls[@]}" \n\
    do \n\
        curl -O $url \n\
        filename=$(basename "$url") \n\
        if [[ "${filename}" == *".zip" ]]; \n\
        then \n\
            unzip ${filename} && rm -f ${filename} \n\
        fi \n\
    done \n\
fi \n\
if [[ "${LICENSE_URL}" != "" ]]; \n\
then \n\
    curl -o /opt/primetonlicense.xml $LICENSE_URL \n\
fi \n\
sed -i "/server.port=.*$/cserver.port=${APP_PORT}" /opt/server/config/application.properties \n\
if [[ "${EOS_SYS_KEY}" != "" ]]; \n\
then \n\
    sed -i "/eos.application.sys-key=.*$/ceos.application.sys-key=${EOS_SYS_KEY}" /opt/server/config/application.properties \n\
fi \n\
if [[ "${EOS_PROFILE}" != "" ]]; \n\
then \n\
    sed -i "/eos.profiles.active=.*$/ceos.profiles.active=${EOS_PROFILE}" /opt/server/config/application.properties \n\
fi \n\
if [[ "${REDIS_HOST}" != "" ]]; \n\
then \n\
    sed -i "/spring.redis.host=.*$/cspring.redis.host=${REDIS_HOST}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/cspring.redis.port=${REDIS_PORT}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/cspring.redis.username=${REDIS_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/cspring.redis.password=${REDIS_PASSWORD}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/c#spring.redis.cluster.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/c#spring.redis.sentinel.master=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/c#spring.redis.sentinel.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/c#spring.redis.sentinel.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/c#spring.redis.sentinel.password=" /opt/server/config/application.properties \n\
elif [[ "${REDIS_CLUSTER_NODES}" != "" ]]; \n\
then \n\
    sed -i "/spring.redis.host=.*$/c#spring.redis.host=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/c#spring.redis.port=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/cspring.redis.username=${REDIS_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/cspring.redis.password=${REDIS_PASSWORD}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/cspring.redis.cluster.nodes=${REDIS_CLUSTER_NODES}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/c#spring.redis.sentinel.master=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/c#spring.redis.sentinel.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/c#spring.redis.sentinel.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/c#spring.redis.sentinel.password=" /opt/server/config/application.properties \n\
elif [[ "${REDIS_SENTINEL_NODES}" != "" ]]; \n\
then \n\
    sed -i "/spring.redis.host=.*$/c#spring.redis.host=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/c#spring.redis.port=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/cspring.redis.username=${REDIS_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/cspring.redis.password=${REDIS_PASSWORD}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/c#spring.redis.cluster.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/cspring.redis.sentinel.master=${REDIS_SENTINEL_MASTER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/cspring.redis.sentinel.nodes=${REDIS_SENTINEL_NODES}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/cspring.redis.sentinel.username=${REDIS_SENTINEL_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/cspring.redis.sentinel.password=${REDIS_SENTINEL_PASSWORD}" /opt/server/config/application.properties \n\
else \n\
    sed -i "/spring.redis.timeout=.*$/c#spring.redis.timeout=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.host=.*$/c#spring.redis.host=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/c#spring.redis.port=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/c#spring.redis.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/c#spring.redis.password=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/c#spring.redis.cluster.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/c#spring.redis.sentinel.master=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/c#spring.redis.sentinel.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/c#spring.redis.sentinel.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/c#spring.redis.sentinel.password=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.max-active=.*$/c#spring.redis.lettuce.pool.max-active=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.max-idle=.*$/c#spring.redis.lettuce.pool.max-idle=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.max-wait=.*$/c#spring.redis.lettuce.pool.max-wait=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.min-idle=.*$/c#spring.redis.lettuce.pool.min-idle=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.shutdown-timeout=.*$/c#spring.redis.lettuce.shutdown-timeout=" /opt/server/config/application.properties \n\
fi \n\
if [[ "${NACOS_URL}" == "" ]]; \n\
then \n\
    sed -i "/spring.cloud.nacos.discovery.enabled=.*$/cspring.cloud.nacos.discovery.enabled=false" /opt/server/config/application-nacos.properties \n\
    sed -i "/spring.cloud.nacos.config.enabled=.*$/cspring.cloud.nacos.config.enabled=false" /opt/server/config/bootstrap.properties \n\
else \n\
    sed -i "/spring.cloud.nacos.discovery.enabled=.*$/cspring.cloud.nacos.discovery.enabled=true" /opt/server/config/application-nacos.properties \n\
    sed -i "/spring.cloud.nacos.discovery.server-addr=.*$/cspring.cloud.nacos.discovery.server-addr=${NACOS_URL}" /opt/server/config/application-nacos.properties \n\
    sed -i "/spring.cloud.nacos.config.enabled=.*$/cspring.cloud.nacos.config.enabled=true" /opt/server/config/bootstrap.properties \n\
    sed -i "/spring.cloud.nacos.config.server-addr=.*$/cspring.cloud.nacos.config.server-addr=${NACOS_URL}" /opt/server/config/bootstrap.properties \n\
    sed -i "/spring.cloud.nacos.username=.*$/cspring.cloud.nacos.username=${NACOS_USER}" /opt/server/config/bootstrap.properties \n\
    sed -i "/spring.cloud.nacos.password=.*$/cspring.cloud.nacos.password=${NACOS_PASSWORD}" /opt/server/config/bootstrap.properties \n\
fi \n\
if [[ "${SW_URL}" == "" ]]; \n\
then \n\
    /opt/server/bin/startup.sh run -opens \n\
else \n\
    sed -i '\''/-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=.*$/cexport JAVA_OPTS="$JAVA_OPTS -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=${SW_URL}"'\'' /opt/server/bin/startup.sh \n\
    /opt/server/bin/startup.sh run -opens -apm \n\
fi \n\
' > /opt/start.sh

RUN chmod +x /opt/start.sh
RUN chmod +x /opt/server/bin/*.sh
RUN chmod +x /opt/server/*.jar

EXPOSE ${APP_PORT} 
CMD /bin/bash -c "/opt/start.sh"

构建镜像

  • 下载 EOS_Platform_AFCenter_8.3.tar.gz,skywalking-java-agent-9.0.0.zip(如果需要apm监控功能)
  • 创建 Dockerfile-AFC
  • 构建 docker build -t afc:8.3 -f Dockerfile-AFC .
  • 运行 afcenter 镜像
docker run -d --name afc \
  -e JAVA_OPTS="'-DDB_TYPE=mysql -DDB_DRIVER=com.mysql.jdbc.Driver -DDB_URL=jdbc:mysql://127.0.0.1:3306/afcenter4eos82?characterEncoding=utf8&useSSL=false -DDB_USER=root -DDB_PASSWD=primeton'" \
  -e NACOS_URL=127.0.0.1:8848 \
  -e REDIS_HOST=127.0.0.1 \
  -e REDIS_PORT=6379 \
  -e REDIS_PASSWORD=primeton \
  -p 28083:28083 \
  afc:8.3

# afcenter UI 的 dockerfile

FROM  registry.cn-shanghai.aliyuncs.com/primeton-pub/nginx:1.24.0
ENV WEB_PORT=80 MOBILE_PORT=81 BACKEND_ADDRESS= GATEWAY_ADDRESS= EOS_SYS_KEY= 

RUN mkdir -p /opt/{web,moblie}
ADD EOS_Platform_AFCenter_UI_8.3.tar.gz /opt/web
ADD EOS_Platform_AFCenter_MOBILE_UI_8.3.tar.gz /opt/moblie

RUN echo '\
server { \n\
    listen  ${WEB_PORT}; \n\
    client_max_body_size 200m; \n\
    proxy_set_header Host $host; \n\
    proxy_set_header X-Real-IP $remote_addr; \n\
    proxy_set_header X-Real-Port $remote_port; \n\
    proxy_set_header REMOTE-HOST $remote_addr; \n\
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; \n\
    \n\
    location ^~/api/ { \n\
        proxy_pass ${BACKEND_ADDRESS}; \n\
    } \n\
    \n\
    location ~ /(.*)/api/ { \n\
        rewrite ^/(.*)/api/(.*)$ /api/$2 break; \n\
        proxy_pass ${BACKEND_ADDRESS}; \n\
    } \n\
    \n\
    location ~ \.biz\.ext$ { \n\
        proxy_pass ${BACKEND_ADDRESS}; \n\
    } \n\
    \n\
    location / { \n\
        root  /opt/web; \n\
        access_log /opt/access.log ; \n\
        error_log /opt/error.log warn; \n\
        index  index.html index.htm; \n\
        try_files $uri /index.html; \n\
    } \n\
} \n\
server { \n\
    listen  ${MOBILE_PORT}; \n\
    client_max_body_size 200m; \n\
    proxy_set_header Host $host; \n\
    proxy_set_header X-Real-IP $remote_addr; \n\
    proxy_set_header X-Real-Port $remote_port; \n\
    proxy_set_header REMOTE-HOST $remote_addr; \n\
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; \n\
    \n\
    location ^~/api/ { \n\
        proxy_pass ${BACKEND_ADDRESS}; \n\
    } \n\
    \n\
    location ~ /(.*)/api/ { \n\
        rewrite ^/(.*)/api/(.*)$ /api/$2 break; \n\
        proxy_pass ${BACKEND_ADDRESS}; \n\
    } \n\
    \n\
    location ~ \.biz\.ext$ { \n\
        proxy_pass ${BACKEND_ADDRESS}; \n\
    } \n\
    \n\
    location / { \n\
        root  /opt/moblie; \n\
        access_log /opt/moblie-access.log ; \n\
        error_log /opt/moblie-error.log warn; \n\
        index  index.html index.htm; \n\
        try_files $uri /index.html; \n\
    } \n\
} \n\
' > /opt/nginx-conf.template

RUN echo '\
server { \n\
    listen  ${WEB_PORT}; \n\
    client_max_body_size 200m; \n\
    proxy_set_header Host $host; \n\
    proxy_set_header X-Real-IP $remote_addr; \n\
    proxy_set_header X-Real-Port $remote_port; \n\
    proxy_set_header REMOTE-HOST $remote_addr; \n\
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; \n\
    \n\
    location ^~/api/ { \n\
        proxy_set_header X-EOS-SourceSysKey ${EOS_SYS_KEY}; \n\
        proxy_pass ${GATEWAY_ADDRESS}; \n\
    } \n\
    \n\
    location ~ /(.*)/api/ { \n\
        proxy_set_header X-EOS-SourceSysKey ${EOS_SYS_KEY}; \n\
        proxy_pass ${GATEWAY_ADDRESS}; \n\
    } \n\
    \n\
    location ~ \.biz\.ext$ { \n\
        proxy_set_header X-EOS-SourceSysKey ${EOS_SYS_KEY}; \n\
        proxy_pass ${GATEWAY_ADDRESS}; \n\
    } \n\
    \n\
    location / { \n\
        root  /opt/web; \n\
        access_log /opt/access.log ; \n\
        error_log /opt/error.log warn; \n\
        index  index.html index.htm; \n\
        try_files $uri /index.html; \n\
    } \n\
} \n\
server { \n\
    listen  ${MOBILE_PORT}; \n\
    client_max_body_size 200m; \n\
    proxy_set_header Host $host; \n\
    proxy_set_header X-Real-IP $remote_addr; \n\
    proxy_set_header X-Real-Port $remote_port; \n\
    proxy_set_header REMOTE-HOST $remote_addr; \n\
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; \n\
    \n\
    location ^~/api/ { \n\
        proxy_set_header X-EOS-SourceSysKey ${EOS_SYS_KEY}; \n\
        proxy_pass ${GATEWAY_ADDRESS}; \n\
    } \n\
    \n\
    location ~ /(.*)/api/ { \n\
        proxy_set_header X-EOS-SourceSysKey ${EOS_SYS_KEY}; \n\
        proxy_pass ${GATEWAY_ADDRESS}; \n\
    } \n\
    \n\
    location ~ \.biz\.ext$ { \n\
        proxy_set_header X-EOS-SourceSysKey ${EOS_SYS_KEY}; \n\
        proxy_pass ${GATEWAY_ADDRESS}; \n\
    } \n\
    \n\
    location / { \n\
        root  /opt/moblie; \n\
        access_log /opt/moblie-access.log ; \n\
        error_log /opt/moblie-error.log warn; \n\
        index  index.html index.htm; \n\
        try_files $uri /index.html; \n\
    } \n\
} \n\
' > /opt/nginx-conf-gateway.template

RUN echo '\
if [[ "${GATEWAY_ADDRESS}" == "" ]]; \n\
then \n\
    envsubst "\${WEB_PORT} \${MOBILE_PORT} \${BACKEND_ADDRESS} \${GATEWAY_ADDRESS} \${EOS_SYS_KEY}" < /opt/nginx-conf.template > /etc/nginx/conf.d/default.conf \n\
else \n\
    envsubst "\${WEB_PORT} \${MOBILE_PORT} \${BACKEND_ADDRESS} \${GATEWAY_ADDRESS} \${EOS_SYS_KEY}" < /opt/nginx-conf-gateway.template > /etc/nginx/conf.d/default.conf \n\
fi \n\
nginx -g "daemon off;" \n\
' > /opt/start.sh

RUN chmod +x /opt/start.sh

EXPOSE ${WEB_PORT} ${MOBILE_PORT}
CMD /bin/bash -c "/opt/start.sh"

构建镜像

  • 下载 EOS_Platform_AFCenter_UI_8.3.tar.gz
  • 创建 Dockerfile-AFCUI
  • 构建 docker build -t afcui:8.3 -f Dockerfile-AFCUI .
  • 运行 afcenter UI 镜像
docker run -d --name afcui -e GATEWAY_ADDRESS=http://127.0.0.1:9090 -p 80:80  afcui:8.3

# bps 的 dockerfile

FROM registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:jdk17
ENV APP_NAME=BPS-SERVER APP_PORT=48084 \
    EOS_SYS_KEY= EOS_PROFILE= \
    REDIS_HOST= REDIS_PORT= REDIS_USER= REDIS_PASSWORD= REDIS_CLUSTER_NODES= \
    REDIS_SENTINEL_MASTER= REDIS_SENTINEL_NODES= REDIS_SENTINEL_USER= REDIS_SENTINEL_PASSWORD= \
    NACOS_URL= NACOS_USER= NACOS_PASSWORD= \
    JAVA_OPTS= PATCH_URLS= LICENSE_URL=

WORKDIR /opt/server
ADD EOS_Platform_BPS_Server_8.3.tar.gz .

RUN \
    sed -i "/export APP_NAME=.*$/cexport APP_NAME=${APP_NAME}" bin/startup.sh ;\
    sed -i "/^export EOS_DAP_MEM_OPTS=/d" bin/startup.sh ;\
    \
    sed -i "/spring.application.name=.*$/cspring.application.name=${APP_NAME}" config/application.properties ;\
    \
    sed -i "69,76s/<configValue key=\"Database-Type\">.*/<configValue key=\"Database-Type\">\${DB_TYPE}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
    sed -i "69,76s/<configValue key=\"C3p0-DriverClass\">.*/<configValue key=\"C3p0-DriverClass\">\${DB_DRIVER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
    sed -i "69,76s/<configValue key=\"C3p0-Url\">.*/<configValue key=\"C3p0-Url\">\${DB_URL}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
    sed -i "69,76s/<configValue key=\"C3p0-UserName\">.*/<configValue key=\"C3p0-UserName\">\${DB_USER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
    sed -i "69,76s/<configValue key=\"C3p0-Password\">.*/<configValue key=\"C3p0-Password\">\${DB_PASSWD}<\/configValue>/" config/${APP_NAME}/config/user-config.xml
    
RUN echo -e '\
if [[ "${JAVA_OPTS}" == "" ]] || [[ "${JAVA_OPTS}" != *"-XX:MaxRAMPercentage"* ]]; \n\
then \n\
    export JAVA_OPTS="-XX:MaxRAMPercentage=75 ${JAVA_OPTS}" \n\
fi \n\
if [[ "${PATCH_URLS}" != "" ]]; \n\
then \n\
    cd /opt/server/lib \n\
    IFS="," read -ra urls <<< "$PATCH_URLS" \n\
    for url in "${urls[@]}" \n\
    do \n\
        curl -O $url \n\
        filename=$(basename "$url") \n\
        if [[ "${filename}" == *".zip" ]]; \n\
        then \n\
            unzip ${filename} && rm -f ${filename} \n\
        fi \n\
    done \n\
fi \n\
if [[ "${LICENSE_URL}" != "" ]]; \n\
then \n\
    curl -o /opt/primetonlicense.xml $LICENSE_URL \n\
fi \n\
sed -i "/server.port=.*$/cserver.port=${APP_PORT}" /opt/server/config/application.properties \n\
if [[ "${EOS_SYS_KEY}" != "" ]]; \n\
then \n\
    sed -i "/eos.application.sys-key=.*$/ceos.application.sys-key=${EOS_SYS_KEY}" /opt/server/config/application.properties \n\
fi \n\
if [[ "${EOS_PROFILE}" != "" ]]; \n\
then \n\
    sed -i "/eos.profiles.active=.*$/ceos.profiles.active=${EOS_PROFILE}" /opt/server/config/application.properties \n\
fi \n\
if [[ "${REDIS_HOST}" != "" ]]; \n\
then \n\
    sed -i "/spring.redis.host=.*$/cspring.redis.host=${REDIS_HOST}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/cspring.redis.port=${REDIS_PORT}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/cspring.redis.username=${REDIS_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/cspring.redis.password=${REDIS_PASSWORD}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/c#spring.redis.cluster.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/c#spring.redis.sentinel.master=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/c#spring.redis.sentinel.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/c#spring.redis.sentinel.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/c#spring.redis.sentinel.password=" /opt/server/config/application.properties \n\
elif [[ "${REDIS_CLUSTER_NODES}" != "" ]]; \n\
then \n\
    sed -i "/spring.redis.host=.*$/c#spring.redis.host=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/c#spring.redis.port=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/cspring.redis.username=${REDIS_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/cspring.redis.password=${REDIS_PASSWORD}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/cspring.redis.cluster.nodes=${REDIS_CLUSTER_NODES}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/c#spring.redis.sentinel.master=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/c#spring.redis.sentinel.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/c#spring.redis.sentinel.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/c#spring.redis.sentinel.password=" /opt/server/config/application.properties \n\
elif [[ "${REDIS_SENTINEL_NODES}" != "" ]]; \n\
then \n\
    sed -i "/spring.redis.host=.*$/c#spring.redis.host=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/c#spring.redis.port=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/cspring.redis.username=${REDIS_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/cspring.redis.password=${REDIS_PASSWORD}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/c#spring.redis.cluster.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/cspring.redis.sentinel.master=${REDIS_SENTINEL_MASTER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/cspring.redis.sentinel.nodes=${REDIS_SENTINEL_NODES}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/cspring.redis.sentinel.username=${REDIS_SENTINEL_USER}" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/cspring.redis.sentinel.password=${REDIS_SENTINEL_PASSWORD}" /opt/server/config/application.properties \n\
else \n\
    sed -i "/spring.redis.timeout=.*$/c#spring.redis.timeout=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.host=.*$/c#spring.redis.host=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.port=.*$/c#spring.redis.port=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.username=.*$/c#spring.redis.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.password=.*$/c#spring.redis.password=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.cluster.nodes=.*$/c#spring.redis.cluster.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.master=.*$/c#spring.redis.sentinel.master=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.nodes=.*$/c#spring.redis.sentinel.nodes=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.username=.*$/c#spring.redis.sentinel.username=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.sentinel.password=.*$/c#spring.redis.sentinel.password=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.max-active=.*$/c#spring.redis.lettuce.pool.max-active=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.max-idle=.*$/c#spring.redis.lettuce.pool.max-idle=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.max-wait=.*$/c#spring.redis.lettuce.pool.max-wait=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.pool.min-idle=.*$/c#spring.redis.lettuce.pool.min-idle=" /opt/server/config/application.properties \n\
    sed -i "/spring.redis.lettuce.shutdown-timeout=.*$/c#spring.redis.lettuce.shutdown-timeout=" /opt/server/config/application.properties \n\
fi \n\
if [[ "${NACOS_URL}" == "" ]]; \n\
then \n\
    sed -i "/spring.cloud.nacos.discovery.enabled=.*$/cspring.cloud.nacos.discovery.enabled=false" /opt/server/config/application-nacos.properties \n\
    sed -i "/spring.cloud.nacos.config.enabled=.*$/cspring.cloud.nacos.config.enabled=false" /opt/server/config/bootstrap.properties \n\
else \n\
    sed -i "/spring.cloud.nacos.discovery.enabled=.*$/cspring.cloud.nacos.discovery.enabled=true" /opt/server/config/application-nacos.properties \n\
    sed -i "/spring.cloud.nacos.discovery.server-addr=.*$/cspring.cloud.nacos.discovery.server-addr=${NACOS_URL}" /opt/server/config/application-nacos.properties \n\
    sed -i "/spring.cloud.nacos.config.enabled=.*$/cspring.cloud.nacos.config.enabled=true" /opt/server/config/bootstrap.properties \n\
    sed -i "/spring.cloud.nacos.config.server-addr=.*$/cspring.cloud.nacos.config.server-addr=${NACOS_URL}" /opt/server/config/bootstrap.properties \n\
    sed -i "/spring.cloud.nacos.username=.*$/cspring.cloud.nacos.username=${NACOS_USER}" /opt/server/config/bootstrap.properties \n\
    sed -i "/spring.cloud.nacos.password=.*$/cspring.cloud.nacos.password=${NACOS_PASSWORD}" /opt/server/config/bootstrap.properties \n\
fi \n\
/opt/server/bin/startup.sh run -opens \n\
' > /opt/start.sh

RUN chmod +x /opt/start.sh
RUN chmod +x /opt/server/bin/*.sh
RUN chmod +x /opt/server/*.jar

EXPOSE ${APP_PORT} 
CMD /bin/bash -c "/opt/start.sh"

构建镜像

  • 下载 EOS_Platform_BPS_Server_8.3.tar.gz
  • 创建 Dockerfile-BPS
  • 构建 docker build -t bps:8.3 -f Dockerfile-BPS .
  • 运行 bps 镜像
docker run -d --name bps-container \
  -e JAVA_OPTS="$JAVA_OPTS '-DDB_TYPE=mysql -DDB_DRIVER=com.mysql.jdbc.Driver -DDB_URL=jdbc:mysql://127.0.0.1:3306/bps4eos82?characterEncoding=utf8&useSSL=false -DDB_USER=root -DDB_PASSWD=primeton'" \
  -e NACOS_URL=127.0.0.1:8848 \
  -e REDIS_HOST=127.0.0.1 \
  -e REDIS_PORT=6379 \
  -e REDIS_PASSWORD=primeton \
  -p 48084:48084 \
  bps:8.3

# governor 的 dockerfile

FROM registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:jdk17
ENV APP_NAME=GOVERNOR APP_PORT=29898 \
    DB_DRIVER= DB_URL= DB_USER= DB_PASSWD= JAVA_OPTS= PATCH_URLS= LICENSE_URL=

WORKDIR /opt/server
ADD EOS_Platform_8.3_Governor_Master.tar.gz .

RUN \
    sed -i "/export APP_NAME=.*$/cexport APP_NAME=${APP_NAME}" bin/startup.sh ;\
    sed -i "/^export EOS_DAP_MEM_OPTS=/d" bin/startup.sh ;\
    \
    sed -i "/spring.application.name=.*$/cspring.application.name=${APP_NAME}" config/application.properties ;\
    \
    sed -i "/spring.datasource.driver-class-name=.*$/cspring.datasource.driver-class-name=\${DB_DRIVER}" config/application.properties ;\
    sed -i "/spring.datasource.url=.*$/cspring.datasource.url=\${DB_URL}" config/application.properties ;\
    sed -i "/spring.datasource.username=.*$/cspring.datasource.username=\${DB_USER}" config/application.properties ;\
    sed -i "/spring.datasource.password=.*$/cspring.datasource.password=\${DB_PASSWD}" config/application.properties
    
RUN echo -e '\
if [[ "${JAVA_OPTS}" == "" ]] || [[ "${JAVA_OPTS}" != *"-XX:MaxRAMPercentage"* ]]; \n\
then \n\
    export JAVA_OPTS="-XX:MaxRAMPercentage=75 ${JAVA_OPTS}" \n\
fi \n\
if [[ "${PATCH_URLS}" != "" ]]; \n\
then \n\
    cd /opt/server/lib \n\
    IFS="," read -ra urls <<< "$PATCH_URLS" \n\
    for url in "${urls[@]}" \n\
    do \n\
        curl -O $url \n\
        filename=$(basename "$url") \n\
        if [[ "${filename}" == *".zip" ]]; \n\
        then \n\
            unzip ${filename} && rm -f ${filename} \n\
        fi \n\
    done \n\
fi \n\
if [[ "${LICENSE_URL}" != "" ]]; \n\
then \n\
    curl -o /opt/primetonlicense.xml $LICENSE_URL \n\
fi \n\
sed -i "/server.port=.*$/cserver.port=${APP_PORT}" /opt/server/config/application.properties \n\
/opt/server/bin/startup.sh run -opens \n\
' > /opt/start.sh

RUN chmod +x /opt/start.sh
RUN chmod +x /opt/server/bin/*.sh
RUN chmod +x /opt/server/*.jar

EXPOSE ${APP_PORT} 
CMD /bin/bash -c "/opt/start.sh"

构建镜像

  • 下载 EOS_Platform_8.3_Governor_Master.tar.gz
  • 创建 Dockerfile-GOV
  • 构建 docker build -t gov:8.3 -f Dockerfile-GOV .
  • 运行 governor 镜像
docker run -d --name governor \
    -e DB_DRIVER=com.mysql.jdbc.Driver \
    -e DB_URL=jdbc:mysql://127.0.0.1:3306/govdb?serverTimezone=GMT%2B8&characterEncoding=UTF-8 \
    -e DB_USER=root \
    -e DB_PASSWD=primeton \
    -p 29898:29898 \
    gov:8.3

← 如何把EOS8应用打包成一个独立可执行的fatjar包 打印应用中的组件版本信息 →