18.4.1 DockerfileによるDockerイメージの生成
HADB用の各コンテナのDockerイメージを生成する手順を説明します。なお,以降で説明する手順はHADB用の各コンテナを起動するKubernetesワーカーノード(ホストOS)上で実施してください。
- 〈この項の構成〉
(1) データベース初期化コンテナのDockerイメージを生成する
データベース初期化コンテナのDockerイメージを生成してください。なお,初期化済みのDBエリアファイルが存在する場合は,このDockerイメージを生成する必要はありません。
手順
-
コンテナのDockerイメージを生成するDockerfileを準備する
Dockerイメージを生成するためのDockerfileを準備してください。Dockerfileは,データベース初期化コンテナを起動するKubernetesワーカーノード上に保存してください。保存先を次に示します。
■Dockerfileの保存先
/home/docker/hadb_init/Dockerfile
Dockerfileの例を次に示します。
■Dockerfileの例
FROM registry.access.redhat.com/rhel7:latest MAINTAINER Hitachi, Ltd. ARG HADB_VERSION RUN set -ex; \ yum -y install \ file \ gdb \ hostname \ iproute \ libaio \ lvm2 \ sysstat \ && rm -rf /var/cache/yum/* \ && yum clean all \ && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \ && localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 \ && groupadd --gid=990 adbgroup && useradd --uid=990 -g adbgroup -m adbmanager \ && mkdir -p /HADB/db && chown -R adbmanager:adbgroup /HADB COPY ./hitachi_advanced_data_binder_server-${HADB_VERSION}.tar.gz \ ./adbinstall \ ./adbinit.opt \ /home/adbmanager/install/ RUN chown -R adbmanager:adbgroup /home/adbmanager/install \ && chmod 500 /home/adbmanager/install/adbinstall USER adbmanager ENV ADBDIR=/HADB/server \ ADBLANG=UTF8 \ LANG=ja_JP.UTF-8 ENV DBDIR=/HADB/db \ ADBCLTDIR=$ADBDIR \ ADBCLTLANG=$ADBLANG \ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ADBDIR/lib:$ADBDIR/client/lib \ PATH=$PATH:$ADBDIR/bin:$ADBDIR/client/bin RUN set -eux; \ /home/adbmanager/install/adbinstall -s $ADBDIR \ && cp -rf $ADBDIR/sample/conf $ADBDIR \ && cp -f /home/adbmanager/install/adbinit.opt $ADBDIR/conf/ \ && rm -rf /home/adbmanager/install USER root VOLUME ["$DBDIR", "$ADBDIR/spool"] ENTRYPOINT chown -R adbmanager:adbgroup "$DBDIR" "$ADBDIR"/spool \ && runuser adbmanager -c '"$ADBDIR"/bin/adbinit -u "$HADB_ADMIN_NAME" -p "$HADB_ADMIN_PASSWORD" "$ADBDIR"/conf/adbinit.opt "$DBDIR"'
[説明]
上記のDockerfileの例は,次のすべての設定が完了していることを前提としています。
-
コンテナ内のインターネット接続
-
プロキシ設定
-
リポジトリ設定
上記の設定が完了している場合は,コンテナ内でyumコマンドによるパッケージのインストールが可能です。上記の設定が完了していない場合は,先に設定を完了してください。または,Dockerfileを編集して,yumコマンドによるインストールの設定を組み込んでください。
- メモ
-
上記のDockerfileの例では,コンテナ起動時(docker runコマンド実行時)に--envオプションを使用して,HADBのデータベース作成時に登録するユーザの認可識別子やパスワードなどの秘密情報を受け渡します。新しいバージョンのDocker(18.09以降)を使用する場合は,BuildKitが提供しているdocker buildの--secretフラグを使用することを推奨します。
-
-
HADBサーバのインストールに必要なファイルおよび初期設定オプションファイルを準備する
手順1.のDockerfileを格納したディレクトリに,次のファイルを格納してください。
-
HADBサーバのインストールに必要な次のファイル
-
HADBサーバのプログラムの圧縮ファイル(hitachi_advanced_data_binder_server-$VER.tar.gz)
-
adbinstallコマンドの実行形式ファイル(adbinstall)
-
-
adbinitコマンドの初期設定オプションファイル(adbinit.opt)
$VERは,HADBサーバのバージョンとリリース番号です。
- メモ
-
-
各定義ファイルやオプションファイルのひな形は,$ADBDIR/sample/conf/ディレクトリに格納されています。
-
HADBサーバのインストール時に必要なファイルを格納する際,権限の付与や,コピーしたファイルの確認作業などが必要になります。詳細な方法については,「8.2.2 インストール手順」を参照してください。その際,次の点に注意してください。
-
インストールデータを格納するディレクトリは,Dockerfileを格納したディレクトリ(/home/docker/hadb_init)と読み替えてください。
-
!8A9_HADBファイルのコピーは必要ありません。HADBサーバのプログラムの圧縮ファイルとadbinstallコマンドの実行形式ファイルをコピーしてください。
-
-
初期設定オプションファイルの作成方法については,マニュアルHADB コマンドリファレンスのadbinit(データベースの初期設定)のadbinitコマンドの指定形式の初期設定オプションの形式を参照してください。
-
次のコマンドを実行すると,すべてのファイルがそろっているかどうかを確認できます。
■コマンドの実行例
ls /home/docker/hadb_init
すべてのファイルがそろっている場合,次のような実行結果が表示されます。
■コマンドの実行結果の例
Dockerfile adbinstall adbinit.opt hitachi_advanced_data_binder_server-$VER.tar.gz
$VERは,HADBサーバのバージョンとリリース番号です。
-
-
Dockerイメージを生成する
次のコマンドを実行し,Dockerイメージを生成してください。
■コマンドの実行例
cd /home/docker/hadb_init docker build -f ./Dockerfile -t hadb-init:$VER \ --build-arg HADB_VERSION=$VER \ .
$VERは,HADBサーバのバージョンとリリース番号です。
上記のコマンドが正常終了したら,次のコマンドを実行してください。次のコマンドを実行すると,Dockerイメージが正しく生成されているかどうかを確認できます。
■コマンドの実行例
docker images hadb-init:$VER
$VERは,HADBサーバのバージョンとリリース番号です。
Dockerイメージが正しく生成されている場合,次のような結果が表示されます。
■コマンドの実行結果の例
REPOSITORY TAG IMAGE ID CREATED SIZE hadb-init $VER 6210a7de50ea 3 seconds ago 204 MB
$VERは,HADBサーバのバージョンとリリース番号です。
なお,IMAGE ID列やCREATED列,SIZE列に表示される値は実行環境によって異なります。
(2) HADBサーバ起動コンテナのDockerイメージを生成する
HADBサーバ起動コンテナのDockerイメージを生成してください。
手順
-
コンテナのDockerイメージを生成するDockerfileを準備する
Dockerイメージを生成するためのDockerfileを準備してください。Dockerfileは,HADBサーバ起動コンテナを起動するKubernetesワーカーノード上に保存してください。保存先を次に示します。
■Dockerfileの保存先
/home/docker/hadb_server/Dockerfile
Dockerfileの例を次に示します。
■Dockerfileの例
FROM registry.access.redhat.com/rhel7:latest MAINTAINER Hitachi, Ltd. ARG HADB_VERSION RUN set -ex; \ yum -y install \ file \ gdb \ hostname \ iproute \ libaio \ lvm2 \ sysstat \ && rm -rf /var/cache/yum/* \ && yum clean all \ && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \ && localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 \ && groupadd --gid=990 adbgroup && useradd --uid=990 -g adbgroup -m adbmanager \ && mkdir -p /HADB/db && chown -R adbmanager:adbgroup /HADB COPY ./hitachi_advanced_data_binder_server-${HADB_VERSION}.tar.gz \ ./adbinstall \ ./server.def \ /home/adbmanager/install/ RUN chown -R adbmanager:adbgroup /home/adbmanager/install \ && chmod 500 /home/adbmanager/install/adbinstall USER adbmanager ENV ADBDIR=/HADB/server \ ADBLANG=UTF8 \ LANG=ja_JP.UTF-8 ENV DBDIR=/HADB/db \ ADBCLTDIR=$ADBDIR \ ADBCLTLANG=$ADBLANG \ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ADBDIR/lib:$ADBDIR/client/lib \ PATH=$PATH:$ADBDIR/bin:$ADBDIR/client/bin RUN set -eux; \ /home/adbmanager/install/adbinstall -s $ADBDIR \ && cp -rf $ADBDIR/sample/conf $ADBDIR \ && cp -f /home/adbmanager/install/server.def $ADBDIR/conf/ \ && rm -rf /home/adbmanager/install # Change the execution user back to the root user. # This is needed to create /dev/HADB/pth by executing the shell script specified in the ENTRYPOINT instruction. USER root VOLUME ["$DBDIR", "$ADBDIR/spool"] EXPOSE 23650 COPY ./docker-entrypoint.sh /usr/local/bin/ ENTRYPOINT ["docker-entrypoint.sh"]
[説明]
上記のDockerfileの例は,次のすべての設定が完了していることを前提としています。
-
コンテナ内のインターネット接続
-
プロキシ設定
-
リポジトリ設定
上記の設定が完了している場合は,コンテナ内でyumコマンドによるパッケージのインストールが可能です。上記の設定が完了していない場合は,先に設定を完了してください。または,Dockerfileを編集して,yumコマンドによるインストールの設定を組み込んでください。
-
-
HADBサーバ起動用のシェルスクリプトを準備する
手順1.のDockerfileと同じ場所に,HADBサーバ起動用のシェルスクリプトを準備してください。
HADBサーバ起動コンテナのDockerイメージを生成するDockerfile内では,HADBサーバを起動し,HADBサーバが起動している間待機するシェルスクリプトをENTRYPOINTで呼び出しています。そのため,HADBサーバ起動用のシェルスクリプトが必要になります。シェルスクリプト(docker-entrypoint.sh)の例を次に示します。
■シェルスクリプトの例
#!/bin/bash # Create directories for storing communication-information files. mkdir -p -m 777 /dev/HADB/pth # Start the HADB server as an HADB administrator. runuser adbmanager -c "yes | adbstart" # When the container stops, terminate HADB normally by using the adbstop command with the --cancel option. trap 'runuser adbmanager -c "adbstop --cancel"' SIGTERM # Check whether adbsrvd exists. while [ $? -eq 0 ]; do # The wait interval is 1 second. sleep 1 ps -C adbsrvd -o command= | grep -E "^${ADBDIR}/bin/adbsrvd\$" 1>/dev/null 2>&1 done exit
- 重要
-
任意のユーザが実行できるように,このシェルスクリプトには必ず実行権限を付与してください。
-
HADBサーバのインストールに必要なファイルおよびサーバ定義ファイルを準備する
手順1.のDockerfileを格納したディレクトリに,次のファイルを格納してください。
-
HADBサーバのインストールに必要な次のファイル
-
HADBサーバのプログラムの圧縮ファイル(hitachi_advanced_data_binder_server-$VER.tar.gz)
-
adbinstallコマンドの実行形式ファイル(adbinstall)
-
-
サーバ定義ファイル(server.def)
$VERは,HADBサーバのバージョンとリリース番号です。
- メモ
-
-
各定義ファイルやオプションファイルのひな形は,$ADBDIR/sample/conf/ディレクトリに格納されています。
-
HADBサーバのインストール時に必要なファイルを格納する際,権限の付与や,コピーしたファイルの確認作業などが必要になります。詳細な方法については,「8.2.2 インストール手順」を参照してください。その際,次の点に注意してください。
-
インストールデータを格納するディレクトリは,Dockerfileを格納したディレクトリ(/home/docker/hadb_server)と読み替えてください。
-
!8A9_HADBファイルのコピーは必要ありません。HADBサーバのプログラムの圧縮ファイルとadbinstallコマンドの実行形式ファイルをコピーしてください。
-
-
サーバ定義ファイルの作成方法については,「8.5.1 サーバ定義の作成方法および格納先」を参照してください。
-
サーバ定義ファイルを作成する際,DBディレクトリのパスを指定するadb_db_pathオペランドには,「/HADB/db(Dockerfile内の$DBDIRの値)」を指定してください。その際,「18.2.5 ストレージ構成」も参照してください。
-
次のコマンドを実行すると,すべてのファイルがそろっているかどうかを確認できます。
■コマンドの実行例
ls /home/docker/hadb_server
すべてのファイルがそろっている場合,次のような実行結果が表示されます。
■コマンドの実行結果の例
Dockerfile docker-entrypoint.sh server.def adbinstall hitachi_advanced_data_binder_server-$VER.tar.gz
$VERは,HADBサーバのバージョンとリリース番号です。
-
-
Dockerイメージを生成する
次のコマンドを実行し,Dockerイメージを生成してください。
■コマンドの実行例
cd /home/docker/hadb_server docker build -f ./Dockerfile -t hadb-server:$VER \ --build-arg HADB_VERSION=$VER \ .
$VERは,HADBサーバのバージョンとリリース番号です。
上記のコマンドが正常終了したら,次のコマンドを実行してください。次のコマンドを実行すると,Dockerイメージが正しく生成されているかどうかを確認できます。
■コマンドの実行例
docker images hadb-server:$VER
$VERは,HADBサーバのバージョンとリリース番号です。
Dockerイメージが正しく生成されている場合,次のような結果が表示されます。
■コマンドの実行結果の例
REPOSITORY TAG IMAGE ID CREATED SIZE hadb-server $VER 2eeb8964de7a 3 seconds ago 204 MB
$VERは,HADBサーバのバージョンとリリース番号です。
なお,IMAGE ID列やCREATED列,SIZE列に表示される値は実行環境によって異なります。
(3) HADBクライアント利用コンテナのDockerイメージを生成する
HADBクライアント利用コンテナのDockerイメージを生成してください。
手順
-
コンテナのDockerイメージを生成するDockerfileを準備する
Dockerイメージを生成するためのDockerfileを準備してください。Dockerfileは,HADBクライアント利用コンテナを起動するKubernetesワーカーノード上に保存してください。保存先を次に示します。
■Dockerfileの保存先
/home/docker/hadb_client/Dockerfile
Dockerfileの例を次に示します。
■Dockerfileの例
FROM registry.access.redhat.com/rhel7:latest MAINTAINER Hitachi, Ltd. ARG HADB_VERSION RUN set -ex; \ yum -y install \ libaio \ && rm -rf /var/cache/yum/* \ && yum clean all \ && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \ && localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 \ && useradd -m adbuser COPY ./hitachi_advanced_data_binder_client-${HADB_VERSION}.tar.gz \ ./adbinstall \ ./client.def \ /home/adbuser/install/ RUN chown -R adbuser:adbuser /home/adbuser/install \ && chmod 555 /home/adbuser/install/adbinstall USER adbuser ENV ADBCLTDIR=/home/adbuser/client \ ADBCLTLANG=UTF8 \ LANG=ja_JP.UTF-8 ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ADBCLTDIR/client/lib \ PATH=$PATH:$ADBCLTDIR/client/bin RUN set -eux; \ /home/adbuser/install/adbinstall -c $ADBCLTDIR \ && cp -rf $ADBCLTDIR/sample/conf $ADBCLTDIR \ && cp -f /home/adbuser/install/client.def $ADBCLTDIR/conf/ \ && rm -rf /home/adbuser/install # Keep the container running. CMD ["tail","-f","/dev/null"]
[説明]
上記のDockerfileの例は,次のすべての設定が完了していることを前提としています。
-
コンテナ内のインターネット接続
-
プロキシ設定
-
リポジトリ設定
上記の設定が完了している場合は,コンテナ内でyumコマンドによるパッケージのインストールが可能です。上記の設定が完了していない場合は,先に設定を完了してください。または,Dockerfileを編集して,yumコマンドによるインストールの設定を組み込んでください。
-
-
HADBクライアントのインストールに必要なファイルおよびクライアント定義ファイルの準備をする
手順1.のDockerfileを格納したディレクトリに,次のファイルを格納してください。
-
HADBクライアントのインストールに必要な次のファイル
-
HADBクライアントのプログラムの圧縮ファイル(hitachi_advanced_data_binder_client-$VER.tar.gz)
-
adbinstallコマンドの実行形式ファイル(adbinstall)
-
-
クライアント定義ファイル(client.def)
$VERは,HADBクライアントのバージョンとリリース番号です。
- メモ
-
-
各定義ファイルやオプションファイルのひな形は,$ADBDIR/sample/conf/ディレクトリに格納されています。
-
ファイルの格納方法については,マニュアルHADB AP開発ガイドのHADBクライアントのインストールおよびアンインストールのLinux版のHADBクライアントの場合のHADBクライアントのインストールを参照してください。その際,インストールデータを格納するディレクトリは,Dockerfileを格納したディレクトリ(/home/docker/hadb_client)と読み替えてください。
-
クライアント定義ファイルの作成方法については,マニュアルHADB AP開発ガイドのHADBクライアントの環境設定(ODBCドライバおよびCLI関数を使用する場合)のクライアント定義の作成を参照してください。
-
クライアント定義ファイルを作成する際,HADBサーバのホスト名を指定するadb_clt_rpc_srv_hostオペランドには,後述するKubernetesのServiceオブジェクトの名前である「hadb-svc」を指定してください。「hadb-svc」は,「図18‒1 DockerおよびKubernetesを使用したシステム構成例」の図中に示しているServiceオブジェクトです。
-
次のコマンドを実行すると,すべてのファイルがそろっているかどうかを確認できます。
■コマンドの実行例
ls /home/docker/hadb_client
すべてのファイルがそろっている場合,次のような実行結果が表示されます。
■コマンドの実行結果の例
Dockerfile client.def adbinstall hitachi_advanced_data_binder_client-$VER.tar.gz
$VERは,HADBクライアントのバージョンとリリース番号です。
-
-
Dockerイメージを生成する
次のコマンドを実行し,Dockerイメージを生成してください。
■コマンドの実行例
cd /home/docker/hadb_client docker build -f ./Dockerfile -t hadb-client:$VER \ --build-arg HADB_VERSION=$VER \ .
$VERは,HADBクライアントのバージョンとリリース番号です。
上記のコマンドが正常終了したら,次のコマンドを実行してください。次のコマンドを実行すると,Dockerイメージが正しく生成されているかどうかを確認できます。
■コマンドの実行例
docker images hadb-client:$VER
$VERは,HADBクライアントのバージョンとリリース番号です。
Dockerイメージが正しく生成されている場合,次のような結果が表示されます。
■コマンドの実行結果の例
REPOSITORY TAG IMAGE ID CREATED SIZE hadb-client $VER 9f266d35e02c 3 seconds ago 204 MB
$VERは,HADBクライアントのバージョンとリリース番号です。
なお,IMAGE ID列やCREATED列,SIZE列に表示される値は実行環境によって異なります。