[TOC]
概述
这篇文章描述了如何使用Docker EE来部署使用Oracle数据库运行在Oracle WebLogic Server上的MedRec实例应用.
Oracle WebLogic 概述
略
架构
下图是运行在Docker EE上的Oracle WebLogic, Oracle Database 和 MedRec(这个是Oracle WebLogic官方的sample应用)应用的架构图:
测试环境和组件
你需要以下组件来实现向导中的架构:
Docker Enterprise Edition 2.0, UCP 3.0.1, DTR 2.5.1 for Ubuntu
Oracle
Oracle WebLogic Server 12.2.1.2 Supplemental Quick Installer
安装和配置
-
安装Git套件. 在终端窗口, 跳转到你将要存放仓库的位置(或者新建一个), 运行如下命令:
$ git clone https://github.com/docker/docker-for-oracle-weblogic
下载Oracle WebLogic Server 12.2.1.2 Supplemental Quick Installer(
fmw_12.2.1.2.0_wls_supplemental_quick_Disk1_1of1.zip
), 把这个zip文件(不用解压)放到当前目录.下载 Oracle SQL Developer command-line (SQLcl) tool (
sqlcl-17.4.0.354.2224-no-jre.zip
), 把该zip文件(不用解压)放到当前目录.使用WebLogic和Database镜像的Dockerfile来自Docker Store. 无需进行修改.
-
(可选)如果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
打开浏览器, 登陆Docker Store.
通过点击Proceed to Checkout来购买Oracle WebLogic Server (就是个官方镜像) and Oracle Database Enterprise Edition (就是个官方镜像)的订阅.
-
回到命令行, 确保你已经登陆了Docker Store/Hub:
$ docker login
-
构建 MedRec 镜像(扩展WebLogic镜像):
./build.sh
-
打标签
$ 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个叫做medrec
和orcldb
的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
使用账号密码登陆: weblogic/welcome1
测试MedRec 应用
访问MedRec应用:
http://localhost:7011/medrec
停止应用
使用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 配置
略
定义 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 Name | Service | Container Mount point |
---|---|---|
db-oracle | orcldb | /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)
访问UCP管理节点的URL并用
admin
登陆;在UCP上, 点击出现在左手边侧边栏的Stacks 选项
点击Create Stack. 为该Stack输入个名称(如:
demo
)和模式(选择Swarm Services)从剪贴板粘贴编辑好的
docker-compose-EE.yml
-
最后, 点击
Create
按钮来部署该stack. -
要验证容器是否成功运行, 点击在UCP主页左侧边栏的Services. 这2个服务
demo_wls
,demo_orcldb
应该显示绿色的状态并且没有错误. -
要启动该应用, 点击左手边侧边栏的Swarm部分的
Services
. 选择load balances中的demo_wls
. 点击地址Published Endpoints来跳转到Oracle WebLogic 和 Medrec 界面. 添加"/console/"来跳转到WebLogic界面, 添加"/medrec/"来跳转到MedRec应用.
通过客户端套件来验证该部署(Docker EE)
略
通过UCP UI Kubernetes 来验证部署(Docker EE)
略
使用Swarm停止Docker EE上的应用
略
使用Kubernetes停止Docker EE上的应用
略
Troubleshooting
略