本文档介绍使用主数据安装介质制作Docker镜像,镜像分为套件版镜像和微服务版镜像。
# 基础镜像说明
在制作Docker镜像前,需要确认系统的CPU架构,根据CPU架构类型选择合适的基础镜像。
查看系统架构
执行如下命令查看系统架构
# x86架构
[root@localhost ~]# arch
x86_64
# arm架构
[root@localhost ~]# arch
arm64
选择镜像,根据架构选择基础镜像,基础镜像如下:
# x86架构
FROM registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:8.8-jdk8
# arm架构
FROM registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:8.8-jdk8-arm
# 套件版镜像
# 套件版安装包准备
解压Primeton_MDM_7.3.0_Standalone.tar.gz
,将server/pubresmng_ext_lib目录移动到server/mdm目录下。同时修改server/mdm/config/application-comp-pubresmng.properties文件,修改public-resource.database.library.path`配置值修,如下:
public-resource.database.library.path=${loader.path}/../pubresmng_ext_lib
进入到server/mdm目录下,执行如下命令,打包后端服务。
tar -zcvf Primeton_MDM_7.3.0_Standalone_Server.tar.gz *
# 后端服务Dockerfile
创建Dockerfile文件,命名为Dockerfile-MDM-Standalone,内容如下:
FROM registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:8.8-jdk8
MAINTAINER www.primeton.com
ENV APP_NAME=MDM APP_PORT=28090 \
EOS_SYS_KEY= EOS_PROFILE= REDIS_HOST= REDIS_PORT= REDIS_PASSWORD= NACOS_URL= SW_URL= \
JAVA_OPTS= PATCH_URLS= LICENSE_URL=
WORKDIR /opt/server
ADD Primeton_MDM_7.3.0_Standalone_Server.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 "73,76s/<configValue key=\"Database-Type\">.*/<configValue key=\"Database-Type\">\${DB_TYPE}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "73,76s/<configValue key=\"C3p0-DriverClass\">.*/<configValue key=\"C3p0-DriverClass\">\${DB_DRIVER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "73,76s/<configValue key=\"C3p0-Url\">.*/<configValue key=\"C3p0-Url\">\${DB_URL}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "73,76s/<configValue key=\"C3p0-UserName\">.*/<configValue key=\"C3p0-UserName\">\${DB_USER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "73,76s/<configValue key=\"C3p0-Password\">.*/<configValue key=\"C3p0-Password\">\${DB_PASSWD}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
\
sed -i "97,97s/<configValue key=\"Database-Type\">.*/<configValue key=\"Database-Type\">\${PUB_DB_TYPE}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "97,97s/<configValue key=\"C3p0-DriverClass\">.*/<configValue key=\"C3p0-DriverClass\">\${PUB_DB_DRIVER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "97,97s/<configValue key=\"C3p0-Url\">.*/<configValue key=\"C3p0-Url\">\${PUB_DB_URL}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "97,97s/<configValue key=\"C3p0-UserName\">.*/<configValue key=\"C3p0-UserName\">\${PUB_DB_USER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "97,97s/<configValue key=\"C3p0-Password\">.*/<configValue key=\"C3p0-Password\">\${PUB_DB_PASSWD}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
\
sed -i "/afc.application.name=.*$/cafc.application.name=AFCENTER" config/application-afc.properties
RUN echo -e '\
if [[ "${JAVA_OPTS}" == "" ]] || [[ "${JAVA_OPTS}" != *"-XX:MaxRAMPercentage"* ]]; \n\
then \n\
export JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 ${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.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.password=.*$/c#spring.redis.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\
else \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.password=.*$/cspring.redis.password=${REDIS_PASSWORD}" /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\
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"
# 构建镜像
将Dockerfile-MDM-Standalone文件和mdm_standalone.tar.gz放到空目录下,执行如下命令:
docker build . \
-f Dockerfile-MDM-Standalone \
-t registry.cn-shanghai.aliyuncs.com/primeton-pub/mdm-server:7.3.0
如果系统是arm64架构,需要增加
--platform linux/arm64
参数,并选择对应架构的基础镜像。
# 启动服务
执行如下命令启动服务:
docker run -d --name mdm-server \
-e JAVA_OPTS="-DDB_TYPE=mysql -DDB_DRIVER=com.mysql.jdbc.Driver -DDB_URL=jdbc:mysql://192.168.2.240:3306/mdm?characterEncoding=utf8&useSSL=false -DDB_USER=root -DDB_PASSWD=primeton -DPUB_DB_TYPE=mysql -DPUB_DB_DRIVER=com.mysql.jdbc.Driver -DPUB_DB_URL=jdbc:mysql://192.168.2.240:3306/mdm_pub?characterEncoding=utf8&useSSL=false -DPUB_DB_USER=root -DPUB_DB_PASSWD=primeton -Dspring.cloud.nacos.discovery.ip=192.168.2.240" \
-p 28090:28090 \
registry.cn-shanghai.aliyuncs.com/primeton-pub/mdm-server:7.3.0
# 微服务版镜像
# 微服务版安装包准备
解压Primeton_MDM_7.3.0_MicroApp.tar.gz
,解决后可以看到后端服务的压缩包``Primeton_MDM_7.3.0_Server.tar.gz`。
# 后端服务Dockerfile
创建Dockerfile文件,命名为Dockerfile-MDM-MicroApp,内容如下:
FROM registry.cn-shanghai.aliyuncs.com/primeton-pub/rockylinux:8.8-jdk8
MAINTAINER www.primeton.com
ENV APP_NAME=MDM APP_PORT=28090 \
EOS_SYS_KEY= EOS_PROFILE= REDIS_HOST= REDIS_PORT= REDIS_PASSWORD= NACOS_URL= SW_URL= \
JAVA_OPTS= PATCH_URLS= LICENSE_URL=
WORKDIR /opt/server
ADD Primeton_MDM_7.3.0_Server.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 "73,76s/<configValue key=\"Database-Type\">.*/<configValue key=\"Database-Type\">\${DB_TYPE}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "73,76s/<configValue key=\"C3p0-DriverClass\">.*/<configValue key=\"C3p0-DriverClass\">\${DB_DRIVER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "73,76s/<configValue key=\"C3p0-Url\">.*/<configValue key=\"C3p0-Url\">\${DB_URL}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "73,76s/<configValue key=\"C3p0-UserName\">.*/<configValue key=\"C3p0-UserName\">\${DB_USER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "73,76s/<configValue key=\"C3p0-Password\">.*/<configValue key=\"C3p0-Password\">\${DB_PASSWD}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
\
sed -i "97,97s/<configValue key=\"Database-Type\">.*/<configValue key=\"Database-Type\">\${PUB_DB_TYPE}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "97,97s/<configValue key=\"C3p0-DriverClass\">.*/<configValue key=\"C3p0-DriverClass\">\${PUB_DB_DRIVER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "97,97s/<configValue key=\"C3p0-Url\">.*/<configValue key=\"C3p0-Url\">\${PUB_DB_URL}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "97,97s/<configValue key=\"C3p0-UserName\">.*/<configValue key=\"C3p0-UserName\">\${PUB_DB_USER}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
sed -i "97,97s/<configValue key=\"C3p0-Password\">.*/<configValue key=\"C3p0-Password\">\${PUB_DB_PASSWD}<\/configValue>/" config/${APP_NAME}/config/user-config.xml ;\
\
sed -i "/afc.application.name=.*$/cafc.application.name=AFCENTER" config/application-afc.properties
RUN echo -e '\
if [[ "${JAVA_OPTS}" == "" ]] || [[ "${JAVA_OPTS}" != *"-XX:MaxRAMPercentage"* ]]; \n\
then \n\
export JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 ${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.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.password=.*$/c#spring.redis.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\
else \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.password=.*$/cspring.redis.password=${REDIS_PASSWORD}" /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\
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"
# 构建镜像
将Dockerfile-MDM-Standalone文件和mdm_standalone.tar.gz放到空目录下,执行如下命令:
docker build . \
-f Dockerfile-MDM-MicroApp \
-t registry.cn-shanghai.aliyuncs.com/primeton-pub/mdm-server:7.3.0
如果系统是arm64架构,需要增加
--platform linux/arm64
参数,并选择对应架构的基础镜像。
# 启动服务
执行如下命令启动服务:
docker run -d --name mdm-server \
-e JAVA_OPTS="-DDB_TYPE=mysql -DDB_DRIVER=com.mysql.jdbc.Driver -DDB_URL=jdbc:mysql://192.168.2.240:3306/mdm?characterEncoding=utf8&useSSL=false -DDB_USER=root -DDB_PASSWD=primeton -DPUB_DB_TYPE=mysql -DPUB_DB_DRIVER=com.mysql.jdbc.Driver -DPUB_DB_URL=jdbc:mysql://192.168.2.240:3306/mdm_pub?characterEncoding=utf8&useSSL=false -DPUB_DB_USER=root -DPUB_DB_PASSWD=primeton -Dspring.cloud.nacos.discovery.ip=192.168.2.240" \
-e NACOS_URL=192.168.2.240:8848 \
-e REDIS_HOST=192.168.2.240 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD= \
-p 28090:28090 \
registry.cn-shanghai.aliyuncs.com/primeton-pub/mdm-server:7.3.0