Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


18.4.1 DockerfileによるDockerイメージの生成

HADB用の各コンテナのDockerイメージを生成する手順を説明します。なお,以降で説明する手順はHADB用の各コンテナを起動するKubernetesワーカーノード(ホストOS)上で実施してください。

〈この項の構成〉

(1) データベース初期化コンテナのDockerイメージ生成する

データベース初期化コンテナのDockerイメージ生成してください。なお,初期化済みのDBエリアファイルが存在する場合は,このDockerイメージ生成する必要はありません。

手順

  1. コンテナの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フラグを使用することを推奨します。

  2. 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サーバのバージョンとリリース番号です。

  3. 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イメージ生成してください。

手順

  1. コンテナの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コマンドによるインストールの設定を組み込んでください。

  2. 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
    
    重要

    任意のユーザが実行できるように,このシェルスクリプトには必ず実行権限を付与してください。

  3. 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/dbDockerfile内の$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サーバのバージョンとリリース番号です。

  4. 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イメージ生成してください。

手順

  1. コンテナの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コマンドによるインストールの設定を組み込んでください。

  2. 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クライアントのバージョンとリリース番号です。

  3. 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列に表示される値は実行環境によって異なります。