Docker企业版2.0上运行Oracle WebLogic和Oracle Database 应用

[TOC]

概述

这篇文章描述了如何使用Docker EE来部署使用Oracle数据库运行在Oracle WebLogic Server上的MedRec实例应用.

Oracle WebLogic 概述

架构

下图是运行在Docker EE上的Oracle WebLogic, Oracle Database 和 MedRec(这个是Oracle WebLogic官方的sample应用)应用的架构图:

《Docker企业版2.0上运行Oracle WebLogic和Oracle Database 应用》 Oracle-WebLogic-Database-MedRec.png

测试环境和组件

你需要以下组件来实现向导中的架构:

安装和配置

  1. 安装Git套件. 在终端窗口, 跳转到你将要存放仓库的位置(或者新建一个), 运行如下命令:

    $ git clone https://github.com/docker/docker-for-oracle-weblogic

  2. 下载Oracle WebLogic Server 12.2.1.2 Supplemental Quick Installer(fmw_12.2.1.2.0_wls_supplemental_quick_Disk1_1of1.zip), 把这个zip文件(不用解压)放到当前目录.

  3. 下载 Oracle SQL Developer command-line (SQLcl) tool (sqlcl-17.4.0.354.2224-no-jre.zip), 把该zip文件(不用解压)放到当前目录.

  4. 使用WebLogic和Database镜像的Dockerfile来自Docker Store. 无需进行修改.

  5. (可选)如果DB 用户名/密码有更改, 编辑 docker-for-oracle-weblogic/container-scripts/oradatasource.properties文件,设置要连接的Oracle Database容器对应的Oracle Thin XA驱动, 数据库URL, 用户名, 密码, DB name.

    domainname=medrec
    domainhome=/u01/oracle/wlserver/samples/domains/medrec
    admin_name=MedRecServer
    dsname=MedRecGlobalDataSourceXA
    dsdbname=ORCLCDB
    dsjndiname=jdbc/MedRecGlobalDataSourceXA
    dsdriver=oracle.jdbc.xa.client.OracleXADataSource
    dsurl=jdbc:oracle:thin:@orcldb:1521:ORCLCDB
    dsusername=sys as sysdba
    dspassword=Oradoc_db1
    dstestquery=SELECT * FROM DUAL
    dsmaxcapacity=1
    

创建MedRec Docker Image

  1. 打开浏览器, 登陆Docker Store.

  2. 通过点击Proceed to Checkout来购买Oracle WebLogic Server (就是个官方镜像) and Oracle Database Enterprise Edition (就是个官方镜像)的订阅.

  3. 回到命令行, 确保你已经登陆了Docker Store/Hub:

    $ docker login

  4. 构建 MedRec 镜像(扩展WebLogic镜像):

    ./build.sh

  5. 打标签

    $ docker tag 1221-oradb-medrec:latest 1221-oradb-medrec:1.0

build.sh内容:

#!/bin/sh
docker build -t 1221-oradb-medrec .

Swarm上验证该部署

如果使用Kubernetes, 请看下一章节内容.

要使用Swarm orchestrator部署, 执行:

$ docker compose up -d
  Creating docker-for-oracle-weblogic_orcldb_1 ... done
  Creating docker-for-oracle-weblogic_wls_1    ... done

启动进程可以通过查看日志来监控. 应用要准备好(可用于测试)会花费5到6分钟:disappointed:(取决于CPU/内存的配置).

$ docker ps
CONTAINER ID   IMAGE                                       COMMAND                  CREATED             STATUS
1b934b0f140c   1221-oradb-medrec:1.0                       "startSample.sh"         2 minutes ago       Up 2 minutes
dc9a4f123bcf   store/oracle/database-enterprise:12.2.0.1   "/bin/sh -c '/bin/ba…"   2 minutes ago       Up 2 minutes (healthy)

Kubernetes上验证该部署

如果Kubernetes没启用, 先启用.

例如, 在Docker for Mac中, 访问Docker for Mac的top menu bar, 点击Preferences. 点击Kubernetes, 确保Enable Kubernetes checkbox被选中. 点击Apply. Docker for Mac然后会重启, Kubernetes会启用.

要使用Kubernetes orchestrator 来部署, 执行:

kubectl create -f weblogic-oracledb-kubernetes.yaml
service "wls" created
deployment "wls" created
service "orcldb" created
deployment "orcldb" created

会启动2个叫做medrecorcldb的services和2个deployments. 使用kubectl get命令来验证Kubernetes部署. 输出类似这样:

kubectl get pods
NAME                      READY     STATUS    RESTARTS   AGE
orcldb-575b6d95d9-n5f4r   1/1       Running   0          42s
wls-fdddbfcb8-997fg       1/1       Running   0          42s
kubectl get deployments
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
orcldb    1         1         1            1           11m
wls       1         1         1            1           11m
kubectl get services
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP             7d
orcldb       ClusterIP      10.97.195.134    <none>        1521/TCP,5500/TCP   10m
wls          LoadBalancer   10.111.246.133   localhost     7011:30035/TCP      10m

weblogic-oracledb-kubernetes.yaml内容如下:

apiVersion: v1
kind: Service
metadata:
  name: wls
spec:
  type: LoadBalancer
  ports:
  - port: 7011
  selector:
    app: wls
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: wls
spec:
  selector:
    matchLabels:
      app: wls
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wls
    spec:
      containers:
      - image: 1221-oradb-medrec:1.0
        name: wls
        ports:
        - containerPort: 7011
          name: wls
---
apiVersion: v1
kind: Service
metadata:
  name: orcldb
spec:
  ports:
  - port: 1521
    name: sqlnet
  - port: 5500
    name: oraclexml
  selector:
    app: orcldb
---

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: orcldb
spec:
  selector:
    matchLabels:
      app: orcldb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: orcldb
    spec:
      containers:
      - image: store/oracle/database-enterprise:12.2.0.1
        name: orcldb
        ports:
        - containerPort: 1521
          name: sqlnet
        - containerPort: 5500
          name: oraclexml

验证应用

访问WebLogic控制台:

http://localhost:7011/console

《Docker企业版2.0上运行Oracle WebLogic和Oracle Database 应用》 Oracle-Weblogic-Console-Login.png

使用账号密码登陆: weblogic/welcome1

《Docker企业版2.0上运行Oracle WebLogic和Oracle Database 应用》 Oracle-Weblogic-Console.png

测试MedRec 应用

访问MedRec应用:

http://localhost:7011/medrec

《Docker企业版2.0上运行Oracle WebLogic和Oracle Database 应用》 MedRecSplash.png

停止应用

使用Swarm 停止应用

要停止应用容器, 执行:

$ docker-compose down
Stopping wls-medrec ... done
Stopping orcldb     ... done
Removing wls-medrec ... done
Removing orcldb     ... odone

接下来请查看在Docker EE上配置和部署章节.

使用Kubernetes 停止应用

要停止应用, 执行:

kubectl delete svc orcldb wls
service "orcldb" deleted
service "wls" deleted
kubectl delete deployments
deployment "orcldb" deleted
deployment "wls" deleted

Docker EE相关内容

可以看看怎么配置PV, 其他都可以忽略.

Docker EE上的配置和部署

要在Docker EE 2.0上跟着这篇应用向导部署Oracle WebLogic和Oracle Database, 首先要分配几个合适配置的节点做高可用. 在本例中, 分配了4个实例: 1个UCP管理节点和3个worker容器. UCP可以管理Kubernetes和Swarm编排.

Docker Trusted Registry(DTR) 也安装在其中一个worker容器中. 这篇向导假设UCP和DTR已经安装和配置好, 可以使用”admin” 账号和密码来访问.

Docker EE Swarm 配置

MedRec applications on Weblogic with Oracle Database.

docker-compose-EE.yml

定义 PV(持久化卷)

要在本地卷上部署WebLogic和Oracle Database, 点击Verifying the Install. 如果出现service被移除或失败, 本地卷不能持久化.

要安装PV, 从store.docker.com上订阅一个合适的经过Docker认证过的卷插件. 本例中使用EMC’s Rex-Ray for AWS EBS.

要使用AWS EBS, 请按照docs.aws.amazon.com这篇文章来从AWS IAM服务上获取一个访问id和密钥.

使用下列命令安装该插件, EBS_ACCESSKEY就是刚刚获取的:

docker plugin install rexray/ebs EBS_ACCESSKEY=<mykey> EBS_SECRETKEY=<mysecretkey>

下表列出了需要定义的PV:

Volume NameServiceContainer Mount point
db-oracleorcldb/ORCL

在UCP上, 点击在左手边栏上的Volumes 选项. 点击Create Volumes, 并输入上表的信息:

Name: db-oracle
Driver: rexray/ebs

把以下内容加到docker-compose-EE.yml中:

    volumes:
      - db-oracle:/ORCL

volumes:
  db-oracle:
    driver: rexray/ebs

修改{dtr-registry-address} 为真实的DTR或Docker Hub地址.

复制完整内容到剪贴板. 确保缩进格式没问题.

通过UCP UI Swarm验证部署(Docker EE)

  1. 访问UCP管理节点的URL并用admin登陆;

  2. 在UCP上, 点击出现在左手边侧边栏的Stacks 选项

  3. 点击Create Stack. 为该Stack输入个名称(如: demo)和模式(选择Swarm Services)

  4. 从剪贴板粘贴编辑好的docker-compose-EE.yml

  5. 最后, 点击Create 按钮来部署该stack.

    《Docker企业版2.0上运行Oracle WebLogic和Oracle Database 应用》 UCP-Swarm-deploy.png

  6. 要验证容器是否成功运行, 点击在UCP主页左侧边栏的Services. 这2个服务demo_wls, demo_orcldb应该显示绿色的状态并且没有错误.

    《Docker企业版2.0上运行Oracle WebLogic和Oracle Database 应用》 UCP-Swarm-Services.png

  7. 要启动该应用, 点击左手边侧边栏的Swarm部分的Services. 选择load balances中的demo_wls. 点击地址Published Endpoints来跳转到Oracle WebLogic 和 Medrec 界面. 添加”/console/”来跳转到WebLogic界面, 添加”/medrec/”来跳转到MedRec应用.

    《Docker企业版2.0上运行Oracle WebLogic和Oracle Database 应用》 UCP-SwarmVerify.png

通过客户端套件来验证该部署(Docker EE)

通过UCP UI Kubernetes 来验证部署(Docker EE)

使用Swarm停止Docker EE上的应用

使用Kubernetes停止Docker EE上的应用

Troubleshooting

Further Reading

    原文作者:东风微鸣
    原文地址: https://www.jianshu.com/p/58bbd3b8ae4c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞