始める前に: 前提条件のステップを実行します。
イメージビルドプロセスでは、WebLogic Image Toolを使用してDomain on PV domain creation image
を作成します。 このイメージには次のものが含まれます:
/auxiliary/weblogic-deploy
ディレクトリで想定されます。/auxiliary/models
にあります。次のセクションのステップを使用して、ドメイン作成イメージをビルドします。
このサンプルには、イメージのアーカイブZIPファイルの作成に使用する事前定義済アーカイブ・ディレクトリが/tmp/sample/wdt-artifacts/archives/archive-v1
に含まれています。
wlsdeploy
という名前のアーカイブ・トップ・ディレクトリには、applications
という名前のディレクトリが含まれています。このディレクトリには、myapp-v1
というディレクトリに展開されたサンプルJSP webアプリケーションが含まれています。 WDTアーカイブについて覚えておく必要がある3つの重要な点は次のとおりです:
wlsdeploy
です。<%-- Copyright (c) 2019, 2023, Oracle and/or its affiliates. --%>
<%-- Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. --%>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.management.*" %>
<%@ page import="java.io.*" %>
<%
InitialContext ic = null;
try {
ic = new InitialContext();
String srName=System.getProperty("weblogic.Name");
String domainUID=System.getenv("DOMAIN_UID");
String domainName=System.getenv("CUSTOM_DOMAIN_NAME");
out.println("<html><body><pre>");
out.println("*****************************************************************");
out.println();
out.println("Hello World! This is version 'v1' of the mii-sample JSP web-app.");
out.println();
out.println("Welcome to WebLogic Server '" + srName + "'!");
out.println();
out.println(" domain UID = '" + domainUID +"'");
out.println(" domain name = '" + domainName +"'");
out.println();
MBeanServer mbs = (MBeanServer)ic.lookup("java:comp/env/jmx/runtime");
// display the current server's cluster name
Set<ObjectInstance> clusterRuntimes = mbs.queryMBeans(new ObjectName("*:Type=ClusterRuntime,*"), null);
out.println("Found " + clusterRuntimes.size() + " local cluster runtime" + (String)((clusterRuntimes.size()!=1)?"s":"") + ":");
for (ObjectInstance clusterRuntime : clusterRuntimes) {
String cName = (String)mbs.getAttribute(clusterRuntime.getObjectName(), "Name");
out.println(" Cluster '" + cName + "'");
}
out.println();
// display the Work Manager configuration created by the sample
Set<ObjectInstance> minTCRuntimes = mbs.queryMBeans(new ObjectName("*:Type=MinThreadsConstraintRuntime,Name=SampleMinThreads,*"), null);
for (ObjectInstance minTCRuntime : minTCRuntimes) {
String cName = (String)mbs.getAttribute(minTCRuntime.getObjectName(), "Name");
int count = (int)mbs.getAttribute(minTCRuntime.getObjectName(), "ConfiguredCount");
out.println("Found min threads constraint runtime named '" + cName + "' with configured count: " + count);
}
out.println();
Set<ObjectInstance> maxTCRuntimes = mbs.queryMBeans(new ObjectName("*:Type=MaxThreadsConstraintRuntime,Name=SampleMaxThreads,*"), null);
for (ObjectInstance maxTCRuntime : maxTCRuntimes) {
String cName = (String)mbs.getAttribute(maxTCRuntime.getObjectName(), "Name");
int count = (int)mbs.getAttribute(maxTCRuntime.getObjectName(), "ConfiguredCount");
out.println("Found max threads constraint runtime named '" + cName + "' with configured count: " + count);
}
out.println();
// display local data sources
// - note that data source tests are expected to fail until the sample Update 4 use case updates the data source's secret
ObjectName jdbcRuntime = new ObjectName("com.bea:ServerRuntime=" + srName + ",Name=" + srName + ",Type=JDBCServiceRuntime");
ObjectName[] dataSources = (ObjectName[])mbs.getAttribute(jdbcRuntime, "JDBCDataSourceRuntimeMBeans");
out.println("Found " + dataSources.length + " local data source" + (String)((dataSources.length!=1)?"s":"") + ":");
for (ObjectName dataSource : dataSources) {
String dsName = (String)mbs.getAttribute(dataSource, "Name");
String dsState = (String)mbs.getAttribute(dataSource, "State");
String dsTest = (String)mbs.invoke(dataSource, "testPool", new Object[] {}, new String[] {});
out.println(
" Datasource '" + dsName + "': "
+ " State='" + dsState + "',"
+ " testPool='" + (String)(dsTest==null ? "Passed" : "Failed") + "'"
);
if (dsTest != null) {
out.println(
" ---TestPool Failure Reason---\n"
+ " NOTE: Ignore 'mynewdatasource' failures until the MII sample's Update 4 use case.\n"
+ " ---\n"
+ " " + dsTest.replaceAll("\n","\n ").replaceAll("\n *\n","\n") + "\n"
+ " -----------------------------");
}
}
out.println();
out.println("*****************************************************************");
} catch (Throwable t) {
t.printStackTrace(new PrintStream(response.getOutputStream()));
} finally {
out.println("</pre></body></html>");
if (ic != null) ic.close();
}
%>
実行中のWebLogic Serverインスタンスに関する重要な詳細が表示されます: つまり、そのドメイン名、クラスタ名、サーバー名、およびサーバーにターゲット指定されているデータ・ソースの名前です。 また、アプリケーション出力がバージョンv1
であることがレポートされます。
イメージを作成するときは、ステージング・ディレクトリ/tmp/sample/wdt-artifacts/wdt-model-files/WLS-v1
内のファイルを使用します。 準備として、WDTアプリケーション・アーカイブZIPファイルを含める必要があります。
次のコマンドを実行して、アプリケーション・アーカイブZIPファイルを作成し、必要なディレクトリに配置します:
# Delete existing archive.zip in case we have an old leftover version
$ rm -f /tmp/sample/wdt-artifacts/wdt-model-files/WLS-v1/archive.zip
# Move to the directory which contains the source files for our archive
$ cd /tmp/sample/wdt-artifacts/archives/archive-v1
「WDTアーカイブ・ヘルパー・ツール」を使用して、後でWebLogic Image Toolを実行するときに使用するロケーションにアーカイブを作成します。
$ /tmp/sample/wdt-artifacts/weblogic-deploy/bin/archiveHelper.sh add application -archive_file=/tmp/sample/wdt-artifacts/wdt-model-files/WLS-v1/archive.zip -source=wlsdeploy/applications/myapp-v1
このステップでは、ステージング済WDTモデルYAMLファイルおよび/tmp/sample/wdt-artifacts/wdt-model-files/WLS-v1
ディレクトリのプロパティを確認します。 このディレクトリのモデルは、アーカイブ内のwebアプリケーションを参照し、WebLogic管理サーバーを構成し、WebLogicクラスタを構成します。 これは、単一のプロパティを持つファイルmodel.10.properties
と、model.10.yaml
という2つのファイルのみで構成され、WebLogic構成model.10.yaml
を持つモデルYAMLファイルです。
CLUSTER_SIZE=5
WLS model.10.yaml
を次に示します:
domainInfo:
AdminUserName: '@@SECRET:__weblogic-credentials__:username@@'
AdminPassword: '@@SECRET:__weblogic-credentials__:password@@'
ServerStartMode: 'prod'
topology:
Name: '@@ENV:CUSTOM_DOMAIN_NAME@@'
AdminServerName: 'admin-server'
Cluster:
'cluster-1':
DynamicServers:
ServerTemplate: 'cluster-1-template'
ServerNamePrefix: 'managed-server'
DynamicClusterSize: '@@PROP:CLUSTER_SIZE@@'
MaxDynamicClusterSize: '@@PROP:CLUSTER_SIZE@@'
MinDynamicClusterSize: '0'
CalculatedListenPorts: false
Server:
'admin-server':
ListenPort: 7001
ServerTemplate:
'cluster-1-template':
Cluster: 'cluster-1'
ListenPort: 8001
appDeployments:
Application:
myapp:
SourcePath: 'wlsdeploy/applications/myapp-v1'
ModuleType: ear
Target: 'cluster-1'
resources:
SelfTuning:
MinThreadsConstraint:
SampleMinThreads:
Target: 'cluster-1'
Count: 1
MaxThreadsConstraint:
SampleMaxThreads:
Target: 'cluster-1'
Count: 10
WorkManager:
SampleWM:
Target: 'cluster-1'
MinThreadsConstraint: 'SampleMinThreads'
MaxThreadsConstraint: 'SampleMaxThreads'
domainInfo:
AdminUserName: '@@SECRET:__weblogic-credentials__:username@@'
AdminPassword: '@@SECRET:__weblogic-credentials__:password@@'
ServerStartMode: 'prod'
RCUDbInfo:
rcu_prefix: '@@SECRET:@@ENV:DOMAIN_UID@@-rcu-access:rcu_prefix@@'
rcu_schema_password: '@@SECRET:@@ENV:DOMAIN_UID@@-rcu-access:rcu_schema_password@@'
rcu_db_conn_string: '@@SECRET:@@ENV:DOMAIN_UID@@-rcu-access:rcu_db_conn_string@@'
topology:
AdminServerName: 'admin-server'
Name: '@@ENV:CUSTOM_DOMAIN_NAME@@'
Cluster:
'cluster-1':
Server:
'admin-server':
ListenPort: 7001
'managed-server1-c1-':
Cluster: 'cluster-1'
ListenPort: 8001
'managed-server2-c1-':
Cluster: 'cluster-1'
ListenPort: 8001
'managed-server3-c1-':
Cluster: 'cluster-1'
ListenPort: 8001
'managed-server4-c1-':
Cluster: 'cluster-1'
ListenPort: 8001
appDeployments:
Application:
myapp:
SourcePath: 'wlsdeploy/applications/myapp-v1'
ModuleType: ear
Target: 'cluster-1'
resources:
SelfTuning:
MinThreadsConstraint:
SampleMinThreads:
Target: 'cluster-1'
Count: 1
MaxThreadsConstraint:
SampleMaxThreads:
Target: 'cluster-1'
Count: 10
WorkManager:
SampleWM:
Target: 'cluster-1'
MinThreadsConstraint: 'SampleMinThreads'
MaxThreadsConstraint: 'SampleMaxThreads'
モデル・ファイルの特徴は次のとおりです:
次を使用してWebLogicドメインを定義します:
cluster-1
admin-server
wlsdeploy/applications/myapp-v1
のWDTアーカイブZIPファイルにある、cluster-1
のターゲットとして指定されたear
アプリケーションSampleMinThreads
および最大スレッド制約SampleMaxThreads
で構成されたワーク・マネージャSampleWM
マクロを使用して外部値をインジェクトします:
CLUSTER_SIZE
プロパティは、PROPマクロを使用してモデルYAMLファイルのDynamicClusterSize
およびMaxDynamicClusterSize
フィールドで参照されます。CUSTOM_DOMAIN_NAME
という名前のカスタム環境変数を使用してインジェクトされます。
env
フィールドを使用して設定します。weblogic-credentials
シークレット・マクロ参照を使用して設定されます。
webLogicCredentialsSecret
フィールドを使用して参照されます。weblogic-credentials
は、所有ドメインの実際のWebLogic資格証明のシークレット名を常に間接参照する予約名です。イメージには、複数のプロパティ・ファイル、アーカイブZIPファイルおよびモデルYAMLファイルを含めることができますが、この例ではそれぞれ1つのみを使用します。 WDTモデル・ファイルの命名規則、ファイル・ロード順序およびマクロ構文の詳細は、ユーザー・ドキュメントの「モデル・ファイル」を参照してください。
ノート: このサンプルでJRFを使用している場合は、次のimagetool
コマンドラインでWLS
が発生するたびにJRF
を置換します。
この時点で、イメージwdt-domain-image:WLS-v1
に必要なすべてのファイルがステージングされ、次のファイルが含まれます:
/tmp/sample/wdt-artifacts/wdt-model-files/WLS-v1/model.10.yaml
/tmp/sample/wdt-artifacts/wdt-model-files/WLS-v1/model.10.properties
/tmp/sample/wdt-artifacts/wdt-model-files/WLS-v1/archive.zip
ここで、イメージ・ツールを使用して、wdt-domain-image:WLS-v1
という名前のイメージを作成します。 このツールは、前提条件ステップですでに設定されています。
次のコマンドを実行してイメージを作成し、動作していることを確認します:
$ cd /tmp/sample/wdt-artifacts/wdt-model-files/WLS-v1
$ /tmp/sample/wdt-artifacts/imagetool/bin/imagetool.sh createAuxImage \
--tag wdt-domain-image:WLS-v1 \
--wdtModel ./model.10.yaml \
--wdtVariables ./model.10.properties \
--wdtArchive ./archive.zip
imagetool
ディレクトリが表示されない場合は、「前提条件」でステップが欠落しています。
このコマンドは、WebLogic Image Toolを実行してドメイン作成イメージを作成し、次のことを実行します:
busybox
ベース・イメージのレイヤーとしてビルドします。latest
を使用してWITにWDTをキャッシュしたことに注意してください。-wdtVersion
フラグを渡す必要がなくなります。/auxiliary/models
にコピーします。コマンドが成功すると、次のような出力で終了します:
[INFO ] Build successful. Build time=36s. Image tag=wdt-domain-image:WLS-v1
また、docker images
コマンドを実行すると、wdt-domain-image:WLS-v1
という名前のイメージが表示されます。
イメージの作成後、WDT実行可能ファイルは/auxiliary/weblogic-deploy
にあり、WDTモデル、プロパティおよびアーカイブ・ファイルは/auxiliary/models
にあります。 Dockerイメージでls
を実行して、次のことを確認できます:
$ docker run -it --rm wdt-domain-image:WLS-v1 ls -l /auxiliary
total 8
drwxr-xr-x 1 oracle root 4096 Jun 1 21:53 models
drwxr-xr-x 1 oracle root 4096 May 26 22:29 weblogic-deploy
$ docker run -it --rm wdt-domain-image:WLS-v1 ls -l /auxiliary/models
total 16
-rw-rw-r-- 1 oracle root 5112 Jun 1 21:52 archive.zip
-rw-rw-r-- 1 oracle root 173 Jun 1 21:59 model.10.properties
-rw-rw-r-- 1 oracle root 1515 Jun 1 21:59 model.10.yaml
$ docker run -it --rm wdt-domain-image:WLS-v1 ls -l /auxiliary/weblogic-deploy
total 28
-rw-r----- 1 oracle root 4673 Oct 22 2019 LICENSE.txt
-rw-r----- 1 oracle root 30 May 25 11:40 VERSION.txt
drwxr-x--- 1 oracle root 4096 May 26 22:29 bin
drwxr-x--- 1 oracle root 4096 May 25 11:40 etc
drwxr-x--- 1 oracle root 4096 May 25 11:40 lib
drwxr-x--- 1 oracle root 4096 Jan 22 2019 samples
ノート: ローカル・マシンにリモートのKubernetesクラスタ・ワーカー・ノードがある場合は、これらのノードがアクセスできるロケーションにイメージを配置する必要があります。 「Kubernetesクラスタがイメージにアクセスできることの確認」を参照してください。