Maximo 容器化改造试验


这篇文章写于2017年,具体年月日给忘了,总之比较早,Docker也更新了好几个版本了。在这归档一下


1. 写在前面

由于近期涌现了好几家对接公司Maximo的项目,需要频繁的给厂家搭建Maximo测试系统。而我司仅有一台虚拟化服务器作为测试资源,虽然CPU性能强大,但总内存只有64G,磁盘空间也仅有500g。为了减小硬件的开销,将现有的Maximo测试系统实例进行容器化改造,通过多个容器实例搭建不同的测试环境。Maximo测试环境采用Linux+Docker的方式运行。

由于公司Maximo项目比较老旧,且Oracle数据库在DockerHub上并没有现成的镜像,GitHub上的Dockerfile没有Weblogic、Oraclejdk、OracleDatabase旧版本的搭建范例,只能照瓢画葫地修改Dockerfile。迁移的过程中踩了很多坑,但也学习到了许多Weblogic、Oracle数据库、Maximo的知识,在此记录一下。

2. 实验目标

迁移前

迁移后

软件

Maximo 7.1

Maximo 7.1

Java版本

jdk1.6.4

jdk1.6.4

集群

6节点

暂无(计划采用Nginx+AdminServer)

EJB中间件

IBM Websphere 6.1.0.23

Weblogic 10.3.6.0

网页中间件

Apache

Nginx

数据库

Oracle 10g

Oracle 11g 11.2.0.1

基本镜像


OracleLinux 7

容器化


Docker

操作系统

Windows 2003

Ubuntu 16.04

虚拟化系统


Esxi 5.5

3. 前期准备

3.1 技术选型

EJB中间件: Oracle容器化在GitHub上的示例非常的完善,Weblogic且获取渠道比Was较为容易(相对配置较为简单),使用Weblogic替换Was作为EJB容器是个不错的选择。同时Maximo7.1仅支持jdk1.6的版本,导致了 Weblogic不能采用最新的12c版本,必须采用Weblogic 11c( 10.3.6.0)

数据库: Oracle放弃了对Oracle 10g的支持,乃至网站亦无法找到Oracle 10g的下载包。退而求其次采用Oracle 11g。

3.2 数据库备份

exp {生产数据库账户}/{生产数据库密码}@{生产数据库SID} file=phdb.dmp log=phdbexp.log owner={生产数据库账户} grants=Y indexes=Y compress=Y buffer=1064000 rows=Y

这块没啥好说的,由于集团虚拟仓库系统采用了存储过程,为了避免数据库导入出错和Maximo在出库时报错,可以导出对应用户的表,或干脆在导入后停止存储过程。

注意!!:
数据库导出时请检查客户端所在的OracleDatabase版本,低版本exp工具可以导出高版本数据,但高版本exp工具不能导出低版本数据。

规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务器

规则2:高版本exp出的dmp文件,低版本无法imp(无法识别dmp文件)

规则3:低版本exp出的dmp文件,高版本可以imp(向下兼容)

规则4:从Oracle 低版本的Export数据可以Import到Oracle高版本中,但限于Oracle的相邻版本

3.3 Maximo备份

将生产环境中部署的Maximo备份。

包文件

描述

MAXIMO.ear

Maximo核心文件

MAXIMOHELP.ear

Maximo帮助文件

doclinks

Maximo附件/文档库

注意!!:MAXIMO.ear与MAXIMOHELP.ear一般位于Was节点的installedApps目录下,具体没有研究,Windows下的doclink一般位于D盘根目录下

例如:

C:\Program Files\IBM\WebSphere\AppServer\profiles\ctgAppSrv01\installedApps\ctgCell01\MAXIMO.ear

D:\doclinks

3.4 软件下载

为了避免出错,请勿重命名文件

文件名

描述

jdk-6u45-linux-x64.bin

Linux 64位 JDK1.6

wls1036_generic.jar

Weblogic 10.3.6安装文件

linux.x64_11gR2_database_1of2.zip

OracleDatabase 11g安装文件1

linux.x64_11gR2_database_2of2.zip

OracleDatabase 11g安装文件2

3.5 宿主机安装与配置

安装Ubuntu:略

3.5.1 创建数据卷文件夹

在用户目录下新建部署文件夹,将MAXIMO.ear、MAXIMOHELP.ear、doclinks复制至maximo文件夹下。新建OracleDatabase数据文件,表空间存放的文件夹

#(根据个人喜好建立,该文件夹用于部署Weblogic)
	mkdir -P ~/deploy/maximo
	#(根据个人喜好建立,该文件夹用于存放数据库表空间等)
	mkdir -P ~/deploy/oradata

注意!!:请牢记新建的文件夹,该教程中文件夹用于数据卷的映射,Docker官方建议持久化的数据不应存放于容器中,应当采用数据卷或数据卷容器

3.5.2 Docker安装

(基于Ubuntu) 将当前用户加入docker组可以减少sudo的操作。

#安装docker
    sudo apt update && apt install docker.io
    #将当前用户加入docker组
    sudo groupadd docker
    sudo gpasswd -a ${USER} docker
    #重启docker服务
    sudo service docker restart
3.5.3 其他

安装git,开启ssh服务

sudo apt install git openssh-server

注意!!:由于dockerHub在国内未有CDN加速,直接pull镜像非常慢,建议参照网上教程修改docker镜像仓库

4. Docker部分

Docker部分参照GitHub中官方的模板修改,强烈建议先Git模板至宿主机保存。

cd ~
	git clone https://github.com/oracle/docker-images.git

4.1 Docker 数据库

4.1.1 OracleDatabase基础镜像

OracleDatabase官方Dockerfile模板采用的是xe版本,该版本做为免费的版本有以下限制

最大数据库大小为 11 GB
可使用的最大内存是 1G
一台机器上只能安装一个 XE 实例
XE 只能使用单 CPU,无法在多CPU上进行分布处理

本文采用GitHub上jhouzard/docker-oracle11g-ee的模板

git clone https://github.com/jhouzard/docker-oracle11g-ee.git

将linux.x64_11gR2_database_1of2.zip,linux.x64_11gR2_database_2of2.zip复制至installation_files目录下,复制完后该模板目录树如下:

.
├── database_files 
│   ├── createdb.sql 						#创建默认数据库SQL
│   ├── create.sh							#作者写的创建默认数据库脚本
│   ├── initORCL.ora 						#创建数据库配置文件
│   └── oracle-.bashrc 						#默认数据库环境变量脚本
├── dockerBuild.sh 							#docker脚本(本文中并未使用)
├── Dockerfile  							#dockerfile脚本
├── installation_files 
│   ├── linux.x64_11gR2_database_1of2.zip 	#数据库安装文件
│   ├── linux.x64_11gR2_database_2of2.zip 	#数据库安装文件
│   ├── oracle.sh 							#容器中默认的启动脚本
│   └── oraInst.loc 
└── readme.md

注意!!:由于时间关系,并未测试数据库创建的脚本,可修改initORCL.ora,本文还是使用默认的数据库orcl

回到Dockerfile所在的目录下构建OracleDatabase基础镜像。

docker build -t jhouzard/oracle-11g-ee .

4.1.2 MaximoDB镜像

MaxmioDB Dockerfile编译的文件树如下,将数据库dmp文件复制至database-data下,SetCHARACTER.sql(修改默认字符集),SetTABLESPASE.sql(创建表空间)请根据生产环境做相应的修改

.
├── container-scripts		#容器编译脚本文件夹
│   ├── impData.sh			#数据库导入脚本
│   ├── initDB.sh			#数据库初始化脚本
│   ├── SetCHARACTER.sql		#SQL命令-修改默认字符集
│   ├── SetRETRIEVA.sql		#SQL命令-创建全文检索
│   ├── SetTABLESPASE.sql	#SQL命令-创建表空间和用户
│   ├── sqlnet.ora			#数据库网络配置
│   └── tnsnames.ora			#数据库网络配置
├── database-data			#数据库导入数据文件夹
│   └── phdb.dmp
├── Dockerfile

Dockerfile

# 从OracleDatabase基础镜像建立
    # jhouzard/oracle-11g-ee
    # https://github.com/jhouzard/docker-oracle11g-ee
    # ---------------
    FROM jhouzard/oracle-11g-ee
    USER root
    RUN mkdir /u01/app/container-scripts/ 
    RUN mkdir /u01/app/database-data/
    RUN mkdir /u01/app/oradata/phmax
    ADD container-scripts/* /u01/app/container-scripts/
    WORKDIR /u01/app/container-scripts/
    # 若希望编译镜像时也将数据导入,请取消以下命令注释(不建议,这样会使得镜像变得非常大)
    #RUN sh initDB.sh
    #COPY database-data/phdb.dmp /u01/app/database-data/phdb.dmp
    #RUN sh impData.sh
    #RUN rm  -f /u01/app/database-data/phdb.dmp   
    ########################################
    # Start Oracle command
    ########################################
    CMD oracle.sh


initDB.sh

#!/bin/bash
    ORACLE_BASE=/u01/app/oracle
    ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1
    SCRIPTS_BASE=/u01/app/container-scripts
    
    date
    chown oracle -R /u01/app/container-scripts/
    echo "Init DataBase..."
    echo "Init DataBase NETWORK Setting"
    #cp $SCRIPTS_BASE/sqlnet.ora $ORACLE_HOME/network/admin/sqlnet.ora
    cp $SCRIPTS_BASE/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora
    echo "Change DataBase CHARACTER"
    
    sudo -u oracle -i bash -c "sqlplus / as sysdba @$SCRIPTS_BASE/SetCHARACTER.sql"
    
    echo "Set Fulltext Retrieval.."
    
    chown -R oracle $ORACLE_BASE/oradata/phmax
    sudo -u oracle -i bash -c "sqlplus / as sysdba @$SCRIPTS_BASE/SetRETRIEVA.sql"
    
    echo "Creat Tablespace&USER"
    sudo -u oracle -i bash -c "sqlplus / as sysdba @$SCRIPTS_BASE/SetTABLESPASE.sql"

  回到Dockerfile所在的目录下构建maximodb基础镜像。

    docker build -t maximodb .

4.1.3 从MaximoDB镜像中创建容器

首先创建库容器卷oradata

docker run -d --name={数据卷容器名} \
-v /deploy/oradata/:/u01/app/oracle/oradata/ \
ubuntu /bin/bash

注意:数据库容器卷可以不必运行

示例

docker run -d --name=oradata \
	-v {宿主机数据库持久化目录}:/u01/app/oracle/oradata/ \
	ubuntu /bin/bash

创建数据库容器

docker run -d --name {容器名} \
 -v {宿主机dmp文件目录}:/u01/app/database-data/ \ 
 --volumes-from={数据卷容器名} \
-p {宿主机暴露端口}:1521
-p {宿主机暴露端口}:1158
{镜像名}

示例

docker run -d --name OracleDB 	\	
    -v /home/deerjoe/docker/Maximo/:/u01/app/database-data/ \
    -v /deploy/oradata/:/u01/app/oracle/oradata/ \
    --volumes-from=oradata \
    -p 1521:1521
    -p 1158:1158
     maximodb

查看数据库容器启动日志,若启动正常,执行下一步

docker logs -f {容器名}

进入容器中执行initDB.sh&&impData.sh,对数据库初始化
进入容器并调用bash

docker exec -it /bin/bash
	[root@99e2fa43c5d4 /]#  sh $ORACLE_BASE/container-scripts/initDB.sh
	[root@99e2fa43c5d4 /]#  sh $ORACLE_BASE/container-scripts/impData.sh

若返回正常,无错误,且PL/SQL能够通过1521端口连上数据库,浏览器能通过1158端口进入EM,证明数据库搭建成功。

4.2 Docker Weblogic

4.2.1 Weblogic基础镜像

将jdk-6u45-linux-x64.bin,wls1036_generic.jar复制到Weblogic的Docker文件夹目录树如下

├── Dockerfile				#docker编译文件
├── jdk-6u45-linux-x64.bin	#jdk安装文件
├── wls1036_generic.jar		#jdk安装文件
└── wls-silent.xml			#静默安装配置文件

Dockerfile如下

# ---------------
	FROM oraclelinux:7
	# Environment variables required for this build (do NOT change)
	# -------------------------------------------------------------
	RUN yum -y install kde-l10n-Chinese.noarch   	#安装中文语言包
	RUN yum -y reinstall glibc-common				#重新编译glibc-common
	RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 	#将系统字符集设置成UTF-8
	ENV LANG=zh_CN.UTF-8
	ENV LANGUAGE=zh_CN:en_US
	ENV LC_CTYPE=en_US.UTF-8
	ENV JAVA_RPM jdk-6u45-linux-x64.bin
	ENV WLS_PKG wls1036_generic.jar
	# Setup required packages (unzip), filesystem, and oracle user
	# ------------------------------------------------------------
	RUN mkdir /u01 && \
	chmod a+xr /u01 && \
	useradd -b /u01 -m -s /bin/bash oracle 
	 
	# Copy packages
	COPY $WLS_PKG /u01/
	COPY $JAVA_RPM /u01/
	COPY wls-silent.xml /u01/
	# Install and configure Oracle JDK
	# -------------------------------------
	RUN chmod +x /u01/$JAVA_RPM 
	WORKDIR /u01
	RUN ./$JAVA_RPM 
	
	RUN mv jdk1.6.0_45 /usr/local/ &&\
	rm $JAVA_RPM
	
	ENV JAVA_HOME=/usr/local/jdk1.6.0_45
	ENV JAVA_BIN=/usr/local/jdk1.6.0_45/bin
	ENV PATH=$PATH:$JAVA_HOME/bin
	ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
	ENV JAVA_HOME JAVA_BIN PATH CLASSPATH
	 # Change the open file limits in /etc/security/limits.conf
	RUN sed -i '/.*EOF/d' /etc/security/limits.conf && \
	echo "* soft nofile 16384" >> /etc/security/limits.conf && \ 
	echo "* hard nofile 16384" >> /etc/security/limits.conf && \ 
	echo "# EOF"  >> /etc/security/limits.conf    
	# Change the kernel parameters that need changing.
	RUN echo "net.core.rmem_max=4192608" > /u01/oracle/.sysctl.conf && \
	echo "net.core.wmem_max=4192608" >> /u01/oracle/.sysctl.conf && \ 
	sysctl -e -p /u01/oracle/.sysctl.conf
	
	# Adjust file permissions, go to /u01 as user 'oracle' to proceed with WLS installation
	RUN chown oracle:oracle -R /u01 #Build不采用权限参数时需加上这句
	WORKDIR /u01					#否则编译出现权限问题
	USER oracle
	
	# Installation of WebLogic 
	RUN java -jar $WLS_PKG -mode=silent -silent_xml=/u01/wls-silent.xml && \ 
		rm $WLS_PKG /u01/wls-silent.xml 
	
	WORKDIR /u01/oracle/
	
	ENV PATH $PATH:/u01/oracle/oracle_common/common/bin
	
	USER oracle 
	
	ENV JAVA_OPTION=$JAVA_OPTION -Dfile.encoding=UTF-8
	
	# Define default command to start bash. 
	CMD ["bash"]

生成基础镜像

docker build -t oracle/weblogic:10.3.6 .

4.2.2 Weblogic带域镜像

目录树如下

├── container-scripts			#容器脚本文件夹
│   ├── add-machine.py			#wlst-添加域计算机
│   ├── add-server.py			#wlst-添加域服务器
│   ├── commonfuncs.py			#wlst-创建域配置
│   ├── createMachine.sh			#创建域计算机
│   ├── createServer.sh			#创建域服务器
│   ├── create-wls-domain.py		#创建域
│   ├── waitForAdminServer.sh	#等待AdminServer启动成功脚本
│   └── wlst						#Weblogic wlst工具
└── Dockerfile

Dockerfile

FROM oracle/weblogic:10.3.6
    
    # Maintainer
    # ----------
    MAINTAINER Jason Zou <deerjoe@qq.com>
    # WLS Configuration 域参数 (editable during build time)
    # ------------------------------ 
    ARG ADMIN_PASSWORD
    ARG ADMIN_NAME
    ARG DOMAIN_NAME
    ARG ADMIN_PORT
    ARG CLUSTER_NAME
    ARG DEBUG_FLAG
    ARG PRODUCTION_MODE
    ARG USER_MEM_ARGS
    ARG EXTRA_JAVA_PROPERTIES
    
    # WLS Configuration (editable during runtime)
    # ---------------------------
    ENV ADMIN_HOST="wlsadmin" \
    NM_PORT="5556" \
    MS_PORT="7002" \
    DEBUG_PORT="8453" \
    CONFIG_JVM_ARGS="-Dweblogic.security.SSL.ignoreHostnameVerification=true"\
    ADMIN_PASSWORD="${ADMIN_PASSWORD:-welcome01}"\
    USER_MEM_ARGS="${USER_MEM_ARGS:--Xms256m -Xmx512m -XX:MaxPermSize=1024m}"
    ENV EXTRA_JAVA_PROPERTIES="$EXTRA_JAVA_PROPERTIES -Djava.security.egd=file:///dev/urandom"
    # WLS Configuration (editable during runtime)
    # ---------------------------
    # WLS Configuration (persisted. do not change during runtime)
    # -----------------------------------------------------------
    ENV DOMAIN_NAME="${DOMAIN_NAME:-base_domain}" \
    DOMAIN_HOME=/u01/oracle/user_projects/domains/${DOMAIN_NAME:-base_domain} \
    ADMIN_NAME="${ADMIN_NAME:-AdminServer}" \
    ADMIN_PORT="${ADMIN_PORT:-7001}" \
    CLUSTER_NAME="${CLUSTER_NAME:-DockerCluster}" \
    debugFlag="${DEBUG_FLAG:-false}" \
    PRODUCTION_MODE="${PRODUCTION_MODE:-prod}" \
    PATH=$PATH:/u01/oracle/wlserver_10.3/common/bin:/u01/oracle/wlserver/common/bin:/u01/oracle/user_projects/domains/${DOMAIN_NAME:-base_domain}/bin:/u01/oracle
    # -----------------------------------------------------------
    RUN echo "basic seting:"\
    echo "ADMIN_HOST:$ADMIN_HOST"\
    echo "NM_PORT:$NM_PORT"\
    echo "ADMIN_HOST:$ADMIN_HOST"\
    echo "DEBUG_PORT:$DEBUG_PORT"\
    echo "CONFIG_JVM_ARGS:$CONFIG_JVM_ARGS"\
    echo "ADMIN_PASSWORD:$ADMIN_PASSWORD"\
    echo "USER_MEM_ARGS:$USER_MEM_ARGS"\
    echo "DEBUG_FLAG:$DEBUG_FLAG"\
    echo "PRODUCTION_MODE:$PRODUCTION_MODE"
    #---------------------------------------------------------------------
    # Add files required to build this image
    USER oracle
    COPY container-scripts/* /u01/oracle/
    RUN chmod 777 /u01/oracle/wlst  #必须给wlst加上执行权限
    # Root commands
    USER root
    RUN echo ". /u01/oracle/user_projects/domains/$DOMAIN_NAME/bin/setDomainEnv.sh" >> /root/.bashrc && \
    echo "export PATH=$PATH:/u01/oracle/wlserver_10.3/common/bin:/u01/oracle/user_projects/domains/$DOMAIN_NAME/bin" >> /root/.bashrc
    
    # Configuration of WLS Domain
    USER oracle
    WORKDIR /u01/oracle
    RUN chmod 777 /u01/oracle/create-wls-domain.py
    RUN echo "$PRODUCTION_MODE"
    RUN /u01/oracle/wlst /u01/oracle/create-wls-domain.py
    
    RUN mkdir -p /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security && \
    echo "username=weblogic" > /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security/boot.properties && \ 
    echo "password=$ADMIN_PASSWORD" >> /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security/boot.properties && \
    echo ". /u01/oracle/user_projects/domains/$DOMAIN_NAME/bin/setDomainEnv.sh" >> /u01/oracle/.bashrc && \ 
    echo "export PATH=$PATH:/u01/oracle/wlserver_10.3/common/bin:/u01/oracle/user_projects/domains/base_domain/bin" >> /u01/oracle/.bashrc 
    
    # Expose Node Manager default port, and also default http/https ports for admin console
    EXPOSE $NM_PORT $ADMIN_PORT 
    
    # Final setup
    WORKDIR /u01/oracle
    
    ENV PATH $PATH:/u01/oracle/wlserver_10.3/common/bin:/u01/oracle/user_projects/domains/base_domain/bin:/u01/oracle
    
    # Define default command to start bash. 
    CMD ["startWebLogic.sh"]

编译镜像,根据需求增加域参数,不增加参数,则按照Dockerfile中默认域模板构建

docker build -t {镜像名} \
    #--build-arg ADMIN_PASSWORD={Weblogic密码:默认welcome01} \
    #--build-arg ADMIN_NAME={Weblogic用户名:默认weblogic} \
    #--build-arg DOMAIN_NAME={域名:默认base_domain} \
    #--build-arg ADMIN_PORT={管理端口:默认7001} \
    #--build-arg CLUSTER_NAME={集群名:默认DockerCluster} \
    #--build-arg DEBUG_FLAG={调试模式:默认false} \
    #--build-arg PRODUCTION_MODE={生产模式:默认prod} \
    #--build-arg USER_MEM_ARGS={JVM内存参数:默认-Xms256m -Xmx512m -XX:MaxPermSize=1024m}\
    #--build-arg EXTRA_JAVA_PROPERTIES{JVM参数:默认$EXTRA_JAVA_PROPERTIES -Djava.security.egd=file:///dev/urandom} \
     .

举例

docker build -t 1036-domain \
	--build-arg ADMIN_PASSWORD=welcome1 \
	--build-arg USER_MEM_ARGS="-Xms512m -Xmx2048m -XX:MaxPermSize=4096m" .

4.2.4 创建带域的Weblogic容器

创建带域的Weblogic,并与已运行的OracleDB容器关联。

docker run -d --name {容器名} \
	--link={已运行的Oracle数据库容器名}:{别名}\
	-v {宿主机部署文件目录}:/u01/app/maximo/\
	-p {宿主机暴露端口}:7001\
	-p {宿主机暴露端口}:13400\
	 {镜像名}

示例

docker run -d --name maximo \
--link OracleDB:db \
-v /home/deerjoe/deploy/maximo:/u01/app/maximo/ \
-p 7001:7001 \
-p 13400:13400 \
1036-domain

注意!!:由于docker的网络配置与臭名昭著的Oracle Net契合较为复杂,建议用–link参数链接数据库容器,JDBC以别名的方式进行访问。此外13400端口为RMI端(与maximo配置有关),必须暴露给宿主机。否则会出错,

4.3 Docker容器与镜像检查

至此我们已完成了weblogic基础镜像搭建、OracleDataBase镜像搭建、MaximoDB镜像搭建、带域名的weblogic镜像搭建。并成了OracleDB容器、maximo容器。他们之间的关系如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lXYATQlv-1599721681040)(http://i.imgur.com/jVtDa19.png)]

最后的检查步骤(完全按照本文命令执行的条件下)

  1. 使用docker ps应当能够列出名称为OracleDB,maximo的容器
  2. docker image 应该能够列出上图的四个镜像
  3. docker logs -f OracleDB 查看日志无错误
  4. docker logs -f maximo 查看日志无错误
  5. 访问http://宿主机ip:7001/console 能够进入Weblogic控制台
  6. PL/SQL,JDBC能够访问数据库(可以从Weblogic新建数据源测试)

5.Maximo实施部分

5.1 部署文件配置修改

修改MAXIMO.ear/maximouiweb.war/WEB-INF/web.xml
将文件中ipcsystem的Servlet以及Servlet-mapping注释掉。该Servlet用于WAS,与Weblogic冲突。

...
<!--
<servlet-mapping>
	<servlet-name>ipcsystem</servlet-name>
	  		<url-pattern>/servlet/ipcsystem</url-pattern>
</servlet-mapping>
-->
<!--
	<servlet>
		<servlet-name>ipcsystem</servlet-name>
		<servlet-class>psdi.webclient.servlet.IpcClientServlet</servlet-class>
	</servlet>
	-->

使用压缩软件打开MAXIMO.ear/properties.jar,将maximo.properties文件解压。修改maximo.properties,由于涉及到生产环境原来的配置,这里就不将整个文件贴出来了

#JDBC驱动名称
mxe.db.driver=oracle.jdbc.OracleDriver
#db为maximo容器--link的数据库容器的别名,注意端口对应宿主机暴露的端口
#数据库SID要与数据库容器对应
mxe.db.url=jdbc:oracle:thin:@db:1521:ORCL 
#数据库所有者、用户、密码,参见SetTABLESPASE.sql
mxe.db.schemaowner=maximo
mxe.db.user=maximo
mxe.db.password=maximo

使用压缩软件将maximo.properties覆盖回properties.jar中。

5.2 添加Maximo库文件

由于生产环境采用的Was自带了xml处理的包(猜的,因为原lib文件夹未找到相关的文件),然而Weblogic并没有,所以要将涉及到Xerces的包添加到MAXIMO.ear/lib当中。
  同时由于换了Oracle版本,为了避免出错,需要更改JDBC驱动,将原有的ojdbc4.jar包替换成对应的ojdbc6.jar。

#xml相关
xercesImpl.jar
xml-apis.jar
#JDBC相关
ojdbc6.jar

5.2 部署文件

  1. 进入Weblogic控制台>部署 将MAXIMO.ear与MAXIMOHELP.ear、doclinks部署至Weblogic。
  2. 其中MAXIMO.ear与MAXIMOHELP.ear一路下一步即可。
  3. 部署安装为应用程序
  4. 部署到AdminServer
  5. 保存

注意!!:注意doclinks的最后一步原可访问性与MAXIMO.ear、MAXIMOHELP.ear不同,应采用我要使部署能够通过下列位置进行访问选项。

doclinks文件应当属于持久化数据,该措施能够防止容器因Maximo文档库附件过大。减少部署的时间、此外后台替换文档也比较方便。

5.3 启动Maximo

通过Weblogic控制台中的部署>启动Maximo,此时使用docker logs -f 检查启动日志。

访问http://宿主机:7001/maximo,若成功且docker logs -f 无报错。证明Maximo已经基本搭建完毕

5.4 Maximo文档库配置

由于Windows文件路径与Linux的路径存在明显不一样,需要进入Maximo对参数进行修改,同时需要进入OracleDataBase将原有的文档库记录进行替换。

5.4.1 文档库配置

进入Maximo>系统配置>平台配置>系统属性 将原有涉及到doclinks的属性进行修改。

属性名

原值

修改值

mxe.doclink.doctypes.defpath

d

:\doclinks

/u01/maximo/doclinks/

mxe.doclink.doctypes.topLevelPaths

d

:\doclinks

/u01/maximo/doclinks/

mxe.doclink.path01

d<PATH>\doclinks=http://10.45.10.128:7003/doclinks

/u01/maximo/doclinks=http://{宿主ip}:7001/doclinks

勾选对应的属性,点击实时刷新按钮应用配置。

5.4.1 文档库记录修改

观察数据库中docinfo表和doctypes,Maximo当中原有上传的附件记录依然还是以D:/doclinks/ 的方式存储,需要在后台进行修改。

使用docker命令进入容器

docker exec -it /bin/bash
	[root@99e2fa43c5d4 /]# sudo -u oracle -i bash -c "sqlplus / AS SYSDBA"
	SQL> conn maximo/maximo
	Connected.
	SQL>

执行以下SQL命令 doclink.sql

/*
    将已有的附件路径从Windows路径改为Linux路径
    Author@邹政
    */
    UPDATE docinfo T
    SET T .URLNAME = REPLACE (
    	REPLACE (T .urlname, '\', '/'),
    	'D:/doclinks/',
    	'/u01/maximo/doclinks/') 
    /*
    将已有的默认保存附件路径从Windows路径改为Linux路径
    Author@邹政
    */
    
    UPDATE doctypes T
    SET T .defaultfilepath = REPLACE (
    	REPLACE (T .defaultfilepath, '\', '/'),
    	'D:/doclinks/',
    	'/u01/maximo/doclinks/'

大功告成,现在Maximo已能够正常访问

6. Docker迁移

具体仅了解原理,并未测试。等待Dockerfile编写完善后测试。

6.1 迁移前的工作

停止maximo、OracleDB容器

docker stop maximo
	docker stop OracleDB

使用docker export命令将OracleDB,maximo容器导出到tar文件

docker export maximo > /home/maximo.tar
	docker export OracleDB > /home/OracleDB.tar

将maximo.tar、OracleDB.tar,maximo数据卷文件夹{/deploy/maximo},OracleDB数据卷文件夹{/deploy/oradata}导入新的安装Linux当中。

6.2 从tar文件中导入镜像

cat maximo.tar | sudo docker import - maximo:1
	cat OracleDB.tar | sudo docker import - OracleDB:1

此时使用docker images查看新机器上已有maximo:1、OracleDB:1的镜像

6.3 从镜像创建容器

基本上和之前的步骤一样

数据库容器

docker run -d --name {容器名} \
    -v {宿主机dmp文件目录}:/u01/app/database-data/\
    -v {宿主机数据库持久化目录}:/u01/app/oracle/oradata/phmax/\
    -p {宿主机暴露端口}:1521
    -p {宿主机暴露端口}:1158
     {镜像名}

maximo容器

docker run -d --name {容器名} \
	--link={已运行的Oracle数据库容器名}:{别名}\
	-v {宿主机部署文件目录}:/u01/app/maximo/\
	-p {宿主机暴露端口}:7001\
	-p {宿主机暴露端口}:13400\
	 {镜像名}

数据库改动(采用容器卷)
创建数据卷容器

docker run -d --name OracleDB \
    -v /opt/maximo/deploy/Database/Database/database-data:/u01/app/database-data \
    -v /opt/maximo/dbdata:/u01/app/oracle/oradata/ \
    --volumes-from=oradata \
    -p 1521:1521 \
    -p 1158:1158 \
    oracle-11g:1.0.0

常用命令

以SYSDBA进入Oracle容器

docker exec -ti OracleDB sudo -u oracle -i bash -c "sqlplus / AS SYSDBA"