Vagrant+AtomicHost上のDockerにWeblogicServerを構築します。
前回「予告」として下記を掲げましたが、せっかくなので連載的に進めていきたいなと思います。
改めて、やること。
- 単体でのWeblogicコンテナ構築
- 1ホスト上に複数のWeblogicコンテナを構築
- Kubernetesから複数ホスト上のWeblogicコンテナを配置(出来ればLBも)
- コンテナやホストの監視(参考)
- Weblogicコンテナ全台のログを収集
- 障害時の自動復旧
- Private registoryを構築&利用する
- CI導入
- ZDT(ゼロダウンタイム)でデプロイ
- 性能検証など
単体でのWeblogicコンテナ構築 その1
さて、まずはOracleから提供されているこちらを参考にDocker上にWeblogicを立ち上げます。
基本的にはこちらで紹介されている通りに進めれば、特に問題もなくコンテナの作成、起動、Weblogic立ち上げまでは出来るかと思います。
では、順番に進めていきます。
必要なファイルを準備
Oracleから提供されているDockerfile、各種スクリプトはこちらから入手出来ます。
https://github.com/oracle/docker
ここにはWeblogicだけではなく、CoherenceのDockerfileも一緒に配布されています。
この連載(?)の中で、余裕があればCoherenceもDockerで構築してWeblogicと連携などさせてみたいですね。
まずはGitでCloneしましょう。
$ git clone https://github.com/oracle/docker.git
Cloning into 'docker'...
remote: Counting objects: 802, done.
remote: Total 802 (delta 0), reused 0 (delta 0), pack-reused 802
Receiving objects: 100% (802/802), 202.81 MiB | 351.00 KiB/s, done.
Resolving deltas: 100% (311/311), done.
Checking connectivity... done.
$ ls docker
MySQL OracleCoherence OracleWebLogic README.md
次にWeblogicSeverのInstaller、JDKなど必要なファイルをOracleのサイトから取ってきます。
必要なファイルは、
docker/OracleWebLogic/dockerfiles/12.1.3
以下の*.downloadと書かれている以下のファイルです。
それぞれのファイルの取得先は*.downloadファイルに記載されていますが、一応リンク貼っときます。
fmw_12.1.3.0.0_wls.jar
Acceptをチェックして、
Installers with Oracle WebLogic Server and Oracle Coherence:
Generic (881 MB)
をダウンロード。
※ログインしていない場合はログイン画面に遷移します。
jdk-7u79-linux-x64.rpm
ちょっと下の方にjdk-7u79-linux-x64.rpmがあります。
バージョンが上がっていることがあるかと思いますが、スクリプトの中でChecksum をチェックしているので、Cloneした*.downloadファイルの指示にしたがって、同じファイルをダウンロードします。
wls1213_dev_update3.zip
「Accept License Agreement 」をチェックして、
「Free Oracle WebLogic Server 12c (12.1.3) Zip Distribution and Installers for Developers」をダウンロードします。
fmw_12.1.3.0.0_wls.jar
jdk-7u79-linux-x64.rpm
wls1213_dev_update3.zip
取得したこれらのファイルは、*.downloadと同じ場所に配置して下さい。
docker/OracleWebLogic/dockerfiles/12.1.3/
さて、これで準備完了です。
ビルド
あとは、ビルド用のスクリプト「buildDockerImage.sh」を実行するだけです。
っとその前に、vagrantでAtomicHostを起動します。
$ vagrant up node01
Vagrantfileは以前の投稿で作成したように複数のAtomicHostを起動するようになっていますので、今回のように1つだけを起動したい場合は、引数に名前を指定します。
如何にVagrantfileの一部を抜粋します。
Vagrant.configure(2) do |config|
config.vm.box = "atomic-centos"
# 2台目 コンテナホスト(マシン名:node01)
config.vm.define "node01" do |atomic|
atomic.vm.hostname = "node01.atomichost"
atomic.vm.synced_folder ".", "/vagrant", disabled: true
atomic.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2223
atomic.vm.network "private_network", ip: "192.168.33.101", virtualbox__intnet: "intra"
end
end
Vagrantfileで指定しているようにPort2223でnode01のAtomicHostにSSHでログインします。
ログイン後、
docker/OracleWebLogic/dockerfiles/12.1.3/
[vagrant@node01 12.1.3]$ ls
Checksum.developer fmw_12.1.3.0.0_wls.jar jdk-7u79-linux-x64.rpm.download
Checksum.generic fmw_12.1.3.0.0_wls.jar.download oraInst.loc
Dockerfile.developer install.file wls1213_dev_update3.zip
Dockerfile.generic jdk-7u79-linux-x64.rpm wls1213_dev_update3.zip.download
に移動し、ビルド用のスクリプトを起動。
$ cd ../
$ sh sudo buildDockerImage.sh -d
引数は、
-d: creates image based on 'developer' distribution
-g: creates image based on 'generic' distribution
-dは開発モード、-gは本番モード。
ご存じの方はご存知かと思いますが、ざっくり言うと開発モードはオンデマンドデプロイが有効になっていて、他にもデバック用の設定が各種施された状態です。
初めてなので、今回は開発モードでビルドします。
(最終的には本番モードに移行するつもり)
ちなみに、標準のAtomicHostではbuildDockerImage.shは失敗します。
容量が不足していて、rootが直ぐに100%になってしまいますので、こちらの投稿を参考に、rootのサイズを拡張しておいて下さい。
$ sudo ./buildDockerImage.sh -d
Checking if required packages are present and valid...
wls1213_dev_update3.zip: OK
jdk-7u79-linux-x64.rpm: OK
=====================
Building image 'oracle/weblogic:12.1.3-dev' based on 'developer' distribution...
Sending build context to Docker daemon 557.1 kBSending build context to Docker daemon 1.114 MBSending build context to Docker daemon 1.671 MBSending build context to
-- 略 --
[==================================================>] 32 B/32 B8a2b759d9dd8: Pull complete docker.io/oraclelinux:7: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:ea26af4951ebef439db79e7388e8a023b29b1574e1b6a7a876ce8563d249130e
Status: Downloaded newer image for docker.io/oraclelinux:7
---> 8a2b759d9dd8
Step 1 : MAINTAINER Bruno Borges <bruno.borges@oracle.com>
---> Running in 88865e376c1a
---> 3f3125c7bb2a
ここで分かる通り、WeblogicServerのDockerはベースにoraclelinux7を使用します。
この辺りからは、Dockerfile内の処理になっています。
※Step 1 などの行
-- 続き --
Step 19 : CMD bash
---> Running in 54776bbf7922
---> 10969b1d78c8
Removing intermediate container 54776bbf7922
Successfully built 10969b1d78c8
WebLogic Docker Image for 'developer' 12.1.3 is ready to be extended: oracle/weblogic:12.1.3-dev
Step 19までがDockerfileの処理です。
Successfully built 10969b1d78c8
で、イメージID:10969b1d78c8のDockerイメージが生成されました。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
oracle/weblogic 12.1.3-dev 10969b1d78c8 2 minutes ago 2.026 GB
docker.io/oraclelinux 7 a8fd27de55f5 2 days ago 189.6 MB
次の場所に移動し、
docker-master/OracleWebLogic/samples/12c-domain
ビルド
$sudo docker build -t samplewls:12.1.3 .
-- 略 --
Step 16 : CMD startWebLogic.sh
---> Running in b8de9045f001
---> 5636d10979e5
Removing intermediate container b8de9045f001
Successfully built 5636d10979e5
[vagrant@node01 12c-domain]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
samplewls 12.1.3 5636d10979e5 13 seconds ago 2.027 GB
oracle/weblogic 12.1.3-dev 10969b1d78c8 22 minutes ago 2.026 GB
docker.io/oraclelinux 7 a8fd27de55f5 2 days ago 189.6 MB
oraclelinux 7.0 5f1be1559ccf 10 months ago 265.2 MB
やっと「samplewls:12.1.3」と言うコンテナイメージが出来ました。
これを起動
$ sudo docker run -d -p 8001:8001 --name=wlsadmin samplewls:12.1.3
f454686e3fc78ac61001ebb70e5427838c43e0a425872ec4551918121e12ec16
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f454686e3fc7 samplewls:12.1.3 "startWebLogic.sh" 5 seconds ago Up 3 seconds 5556/tcp, 7001/tcp, 0.0.0.0:8001->8001/tcp wlsadmin
コンテナのIPアドレスを確認
$ sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' wlsadmin
172.17.0.11
起動
Vagrantのホスト機(MAC)からWeblogicServerの管理コンソールにアクセスするために、一旦AtomicHostからログアウトしてVagrant側にPortforwardを追加します。
WeblogicServerの管理コンソールはデフォルトで8001を開けているので、
docker run でも8001を開け、更にVagrant側もそのままスルーするように、
atomic.vm.network :forwarded_port, guest: 8001, host: 8001
vagrantを再起動(reload)
一度AtomicHostを停止したので、コンテナを再起動
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f454686e3fc7 samplewls:12.1.3 "startWebLogic.sh" 3 minutes ago Exited (0) 58 seconds ago wlsadmin
$ sudo docker start f454686e3fc7
f454686e3fc7
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f454686e3fc7 samplewls:12.1.3 "startWebLogic.sh" 4 minutes ago Up 5 seconds 5556/tcp, 7001/tcp, 0.0.0.0:8001->8001/tcp wlsadmin
vagrantを再起動(reload)したら、クライアント(MAC)から以下にアクセスしてみます。
デフォルトのアカウントは
ユーザー名:weblogic
パスワード:welcome1
ここまで来るのに思いの外手間取りました。。。。
次回はWeblogicのドメイン周りの設定をスクリプトを利用して実施してみます。
その後、実際に本番環境での利用が出来るようにスクリプトなどを読み解き、独自設定を施していきたいと思います。