欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Maximo 容器化改造试验

程序员文章站 2022-07-14 10:28:32
...

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
	[[email protected] /]#  sh $ORACLE_BASE/container-scripts/initDB.sh
	[[email protected] /]#  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 <[email protected]>
    # 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
	[[email protected] /]# sudo -u oracle -i bash -c "sqlplus / AS SYSDBA"
	SQL> conn maximo/maximo
	Connected.
	SQL>

执行以下SQL命令 doclink.sql

    /*
    将已有的附件路径从Windows路径改为Linux路径
    [email protected]邹政
    */
    UPDATE docinfo T
    SET T .URLNAME = REPLACE (
    	REPLACE (T .urlname, '\', '/'),
    	'D:/doclinks/',
    	'/u01/maximo/doclinks/') 
    /*
    将已有的默认保存附件路径从Windows路径改为Linux路径
    [email protected]邹政
    */
    
    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"
相关标签: 容器化