オプション2: TimesTenコンテナ・イメージを作成する

次の例では、TimesTenディストリビューションからTimesTenコンテナ・イメージを作成すると仮定しています。かわりに、Oracle Container Registryにある公式のTimesTenコンテナ・イメージを使用する場合は、「オプション1: 公式のTimesTenコンテナ・イメージを使用する」を参照してください。

このDockerfile内で使用されるベース・イメージはcontainer-registry.oracle.com/os/oraclelinux:8です。Dockerfileは、TimesTenコンテナ・イメージの様々な属性をオーバーライドできる多数のARGをサポートしています。たとえば、デフォルトのtimestenユーザーおよびデフォルトのtimestenグループを使用するのではなく、カスタムのTimesTenユーザーおよびTimesTenユーザー・グループを指定してTimesTenを実行できます。また、TimesTenコンテナ・イメージに埋め込むTimesTenリリースを指定することもできます。サポートされているDockerfileのARGについては、DockerfileのARGを参照してください。

TimesTenディストリビューションおよびTimesTenオペレータ・ディストリビューションの解凍

TimesTenディストリビューションおよびTimesTenオペレータ・ディストリビューションを解凍するには、次のステップを実行します。

  1. 開発ホストで、任意のディレクトリから次のことを実行します。
    • TimesTenディストリビューションのサブディレクトリを1つ作成します。この例では、installation_dirサブディレクトリを作成します。

    • TimesTenオペレータ・ディストリビューションの2つ目のサブディレクトリを作成します。この例では、kube_filesサブディレクトリを作成します。

    mkdir -p installation_dir
    mkdir -p kube_files
  2. TimesTenディストリビューションのサブディレクトリに移動します。
    cd installation_dir
  3. 以前にダウンロードしたTimesTenディストリビューションをこのTimesTenディストリビューションのディレクトリにコピーします。
    cp download_location/timesten2211190.server.linux8664.zip .
  4. TimesTenディストリビューションを解凍します。
    unzip timesten2211190.server.linux8664.zip
    出力は、次のようになります。
    Archive:  timesten2211190.server.linux8664.zip
       creating: tt22.1.1.19.0/
       ...
       creating: tt22.1.1.19.0/kubernetes/
     extracting: tt22.1.1.19.0/kubernetes/operator.zip
       ...

    TimesTenオペレータ・ディストリビューションはinstallation_dir/tt22.1.1.19.0/kubernetes/operator.zipです。

    TimesTenディストリビューション(この例ではinstallation_dir/tt22.1.1.19.0)は削除しないでください。後で必要になります。
  5. 前のステップで作成したTimesTenオペレータのサブディレクトリに移動します。(この例では、kube_filesです。)
    cd kube_files
  6. TimesTenオペレータ・ディストリビューションを解凍します。
    unzip installation_dir/tt22.1.1.19.0/kubernetes/operator.zip
    出力は、次のようになります。
    Archive:  installation_dir/tt22.1.1.19.0/kubernetes/operator.zip
       creating: operator/
      ...
       creating: deploy/
      inflating: deploy/service_account.yaml
      inflating: deploy/crd.yaml
      inflating: deploy/operator.yaml
      inflating: README.md
       creating: helm/
       creating: helm/ttcrd/
      inflating: helm/ttcrd/Chart.yaml
       creating: helm/ttcrd/templates/
      inflating: helm/ttcrd/templates/NOTES.txt
      inflating: helm/ttcrd/templates/crd.yaml
      inflating: helm/ttcrd/templates/_helpers.tpl
      inflating: helm/ttcrd/.helmignore
       creating: helm/ttclassic/
      inflating: helm/ttclassic/Chart.yaml
      inflating: helm/ttclassic/values.yaml
       creating: helm/ttclassic/templates/
      inflating: helm/ttclassic/templates/dbconfigmap.yaml
      inflating: helm/ttclassic/templates/pdb.yaml
      inflating: helm/ttclassic/templates/NOTES.txt
      inflating: helm/ttclassic/templates/classic.yaml
      inflating: helm/ttclassic/templates/dbsecret.yaml
      inflating: helm/ttclassic/templates/customservice.yaml
       creating: helm/ttclassic/templates/tests/
      inflating: helm/ttclassic/templates/tests/verify.yaml
      inflating: helm/ttclassic/templates/_helpers.tpl
      inflating: helm/ttclassic/.helmignore
       creating: helm/ttoperator/
      inflating: helm/ttoperator/Chart.yaml
      inflating: helm/ttoperator/values.yaml
       creating: helm/ttoperator/templates/
      inflating: helm/ttoperator/templates/pdb.yaml
      inflating: helm/ttoperator/templates/service_account.yaml
      inflating: helm/ttoperator/templates/NOTES.txt
      inflating: helm/ttoperator/templates/operator.yaml
       creating: helm/ttoperator/templates/tests/
      inflating: helm/ttoperator/templates/tests/verify.yaml
      inflating: helm/ttoperator/templates/_helpers.tpl
      inflating: helm/ttoperator/.helmignore
       creating: image/
      inflating: image/Dockerfile
    ...
    TimesTenオペレータ・ディストリビューション形式には、次のディレクトリが含まれます。
    • helm: Helmチャートを使用してTimesTenカスタム・リソース定義(CRD)、TimesTenオペレータおよびTimesTenClassicオブジェクトをデプロイするために必要なディレクトリおよびファイルが含まれます。詳細は、「Helmを使用したTimesTen KubernetesオペレータおよびTimesTenClassicオブジェクトのデプロイ」を参照してください。

    • deploy: 必要なKubernetesサービス・アカウント、ロール、およびロールバインディング・オブジェクトとTimesTen CRDの作成に使用されるYAMLマニフェスト・ファイルが含まれます。deployディレクトリには、TimesTenオペレータをKubernetesクラスタにデプロイするために使用するYAMLマニフェスト・ファイルも含まれます。これらのファイルについては、「サービス・アカウントとTimesTenカスタム・リソース定義(CRD)の作成」および「TimesTenオペレータのカスタマイズ」を参照してください。

    • operator: timesten-operator TimesTenオペレータ・バイナリ、TimesTenエージェント、およびTimesTenエージェントが実行時に使用するサポート・ファイルが含まれます。このディレクトリ内のファイルを使用したり、変更する必要はありません。

    • image: TimesTenコンテナ・イメージの作成に使用されるDockerfileファイルが含まれます。TimesTenコンテナ・イメージを作成する場合は、このDockerfileを使用します。

    これらのディレクトリを書き留めます。この章の後半で、/deployディレクトリおよび/imageディレクトリのファイルを操作する必要があります。HelmおよびHelmチャートを使用している場合は、「Helmを使用したTimesTen KubernetesオペレータおよびTimesTenClassicオブジェクトのデプロイ」helmディレクトリのディレクトリおよびファイルを操作する必要があります。

TimesTenディストリビューションおよびTimesTenオペレータ・ディストリビューションが正常に解凍されました。

TimesTenディストリビューションのコピー

TimesTenコンテナ・イメージの作成に必要なファイルは、解凍されたTimesTenオペレータ・ディストリビューションで提供されます。この例では、解凍したTimesTenオペレータ・ディストリビューションが含まれているディレクトリはkube_filesです。「TimesTenディストリビューションおよびTimesTenオペレータ・ディストリビューションの解凍」を参照してください。

TimesTenコンテナ・イメージを作成するには、次の手順に従います:

  1. 開発ホストで、解凍したTimesTenオペレータ・ディストリビューションのimageディレクトリ(この例ではkube_files/image)に移動します。
    cd kube_files/image
  2. TimesTenディストリビューションをディレクトリにコピーします。前の例では、installation_dirディレクトリを作成しました。このディレクトリには、TimesTenディストリビューションが含まれています。
    cp installation_dir/timesten2211190.server.linux8664.zip .

    installation_dirの詳細は、「TimesTenディストリビューションおよびTimesTenオペレータ・ディストリビューションの解凍」を参照してください。

  3. container-registry.oracle.comのイメージ・プル・シークレットを作成します。
    kubectl create secret generic sekret \
    --from-file=.dockerconfigjson=$HOME/.docker/config.json \
    --type=kubernetes.io/dockerconfigjson

    イメージ・プル・シークレットの名前を保存します。これは、後でTimesTenClassicオブジェクトまたはTimesTenScaleoutオブジェクトをデプロイするときに必要です。「TimesTenClassicオブジェクトの定義および作成」および「TimesTenScaleoutオブジェクトの定義およびデプロイ」を参照してください。

    Kubernetes Secretの作成の詳細は、デプロイ中のレジストリからのイメージのプルを参照してください。

これで、kube_files/imageディレクトリへのTimesTenディストリビューションのコピーと、イメージ・プル・シークレットの作成が完了しました。

作成方法の選択

DockerfileのARGで指定されたデフォルトを使用してTimesTenイメージを作成するか、DockerfileのARGで指定されたデフォルトをオーバーライドしてTimesTenコンテナ・イメージをカスタマイズするかを選択できます。

オプション2a: デフォルトを使用して作成する

次の例では、DockerfileのARGで指定されたデフォルトを使用してTimesTenコンテナ・イメージを作成することを前提としています。

  1. 開発ホストで、kube_files/imageディレクトリに移動します(このディレクトリに移動していない場合)。
  2. docker buildコマンドを使用して、TimesTenイメージを作成します。コマンドラインで次のDockerfileのARGを指定する必要があります。
    • TT_DISTRO: TimesTenディストリビューションが含まれているファイルの名前(この例ではtimesten2211190.server.linux8664.zip)。

    • TT_RELEASE: ドット付き形式のTimesTenリリースの名前(この例では22.1.1.19.0)。
    docker build -t tt2211190image:1 \
    --build-arg TT_DISTRO=timesten2211190.server.linux8664.zip \
    --build-arg TT_RELEASE=22.1.1.19.0 .
    出力は、次のようになります。
    Sending build context to Docker daemon  461.6MB
    Step 1/35 : ARG TT_BASE=container-registry.oracle.com/os/oraclelinux:8
    Step 2/35 : ARG UNZIP_BASE=container-registry.oracle.com/os/oraclelinux:8
    Step 3/35 : FROM $UNZIP_BASE as unzipper
    ...
    Successfully built a0d9e74ad31f
    Successfully tagged tt2211190image:1
  3. TimesTenコンテナ・イメージにタグを付けます。次のように置換します。
    • tt2211190image:1を、前の手順で選択した名前に置き換えます。

    • phx.ocir.io/youraccountを、イメージ・レジストリの場所に置き換えます。

    docker tag tt2211190image:1 phx.ocir.io/youraccount/tt2211190image:1
  4. TimesTenコンテナ・イメージをレジストリにプッシュします。次のように置換します。
    • phx.ocir.io/youraccountを、イメージ・レジストリの場所に置き換えます。

    • tt2211190image:1を、前に選択した名前に置き換えます。

    docker push phx.ocir.io/youraccount/tt2211190image:1
    出力は、次のようになります。
    The push refers to repository [phx.ocir.io/youraccount/tt2211190image]
    5f494d8654f2: Pushed
    cf1cdb416e24: Pushed
    511cc991c8e6: Pushed
    a9abe4002691: Pushed
    8894990e5ffe: Pushed
    c94f317a0997: Pushed
    7774e1cbdcf4: Pushed
    d8c569c85182: Pushed
    1: digest: sha256:8d280bd65059f089a9ca0f2131c9f2928f71f79b0708ed6920fd4df1ea7cfd68 size: 2007

ノート:

最終的なTimesTenコンテナ・イメージのサイズを減らすために、Dockerfileではマルチステージ・ビルドを使用します。これにより、ダングリング・イメージが残されたままになります。ダングリング・イメージを見つけるには、dockerコマンドと、dangling=trueの値を指定した-fフィルタ・フラグを使用します。ダングリング・イメージを見つけたら、docker image pruneコマンドを使用して削除できます。たとえば、次のようになります。
docker images -f dangling=true
docker image prune

TimesTenコンテナ・イメージを正常に作成しました。イメージ・レジストリにプッシュされます。「TimesTen演算子のデプロイについて」に進み、TimesTenオペレータをデプロイしてください。

オプション2b: カスタマイズを使用して作成する

次の例では、DockerfileのARGで指定されたデフォルトをオーバーライドして、TimesTenコンテナ・イメージをカスタマイズすることを前提としています。そうではなく、これらのデフォルトを使用する場合は、「オプション2a: デフォルトを使用して作成する」を参照してください。

この例では、TimesTenコンテナ内のTimesTenを実行するカスタムTimesTenユーザーおよびカスタムTimesTenユーザー・グループを作成します。

  1. 開発ホストで、kube_files/imageディレクトリに移動します(このディレクトリに移動していない場合)。
  2. docker buildコマンドを使用して、TimesTenイメージを作成します。カスタム・ユーザーおよびカスタムのTimesTenユーザー・グループを使用してイメージをカスタマイズするには、コマンドラインで次のDockerfileのARGを指定します。
    • TT_USER: コンテナ・イメージで作成されたLinuxオペレーティング・システム・ユーザーの名前。これは、TimesTenを実行するユーザーです。この例では、ユーザーの名前はcustomuserです。

    • TT_UID: $TT_USERの数値UID。この例では、UIDは9876です。

    • TT_GROUP: コンテナ・イメージで作成されたLinuxグループの名前。これは、TimesTenユーザー・グループの名前です。この例では、グループの名前はcustomgroupです。

    • TT_GID: $TT_GROUPの数値GID。この例では、GIDは9876です。

    さらに、次の必須のDockerfileのARGを指定します。

    • TT_DISTRO: TimesTenディストリビューションを含むファイルの名前(この例ではtimesten2211210.server.linux8664.zip)。

    • TT_RELEASE: ドット付き形式のTimesTenリリースの名前(この例では22.1.1.21.0)。
    docker build -t tt2211190customimage:1 \
    --build-arg TT_USER=customuser --build-arg TT_UID=9876 \
    --build-arg TT_GROUP=customgroup --build-arg TT_GID=9876 \
    --build-arg TT_DISTRO=timesten2211190.server.linux8664.zip \
    --build-arg TT_RELEASE=22.1.1.19.0 .
    出力は、次のようになります。
    Sending build context to Docker daemon  461.6MB
    Step 1/35 : ARG TT_BASE=container-registry.oracle.com/os/oraclelinux:8
    Step 2/35 : ARG UNZIP_BASE=container-registry.oracle.com/os/oraclelinux:8
    Step 3/35 : FROM $UNZIP_BASE as unzipper
    ...
    Successfully built 49101e32b5d5
    Successfully tagged tt2211190customimage:1
  3. TimesTenコンテナ・イメージにタグを付けます。次のように置換します。
    • tt2211190customimage:1を、前の手順で選択した名前に置き換えます。

    • phx.ocir.io/youraccountを、イメージ・レジストリの場所に置き換えます。

    docker tag tt2211190customimage:1 phx.ocir.io/youraccount/tt2211190customimage:1
  4. TimesTenコンテナ・イメージをレジストリにプッシュします。次のように置換します。
    • phx.ocir.io/youraccountを、イメージ・レジストリの場所に置き換えます。

    • tt2211190customimage:1を、前に選択した名前に置き換えます。

    docker push phx.ocir.io/youraccount/tt2211190customimage:1
    出力は、次のようになります。
    The push refers to repository [phx.ocir.io/youraccount/tt2211190customimage]
    3b5c7ba355aa: Pushed
    30047b487811: Pushed
    aa10ef33fac5: Pushed
    7290609fca00: Pushed
    676cb8be497d: Pushed
    57a50dacb378: Pushed
    d59ca9ca76e7: Pushed
    d8c569c85182: Layer already exists
    1: digest: sha256:616cbbb94f1a8b003a45865b51d401bc5f2b48d4f99bbe7584bcbb6304d6b75b size: 2007

ノート:

最終的なTimesTenコンテナ・イメージのサイズを減らすために、Dockerfileではマルチステージ・ビルドを使用します。これにより、ダングリング・イメージが残されたままになります。ダングリング・イメージを見つけるには、dockerコマンドと、dangling=trueの値を指定した-fフィルタ・フラグを使用します。ダングリング・イメージを見つけたら、docker image pruneコマンドを使用して削除できます。たとえば、次のようになります。
docker images -f dangling=true
docker image prune

TimesTenコンテナ・イメージを正常に作成しました。イメージ・レジストリにプッシュされます。「TimesTen演算子のデプロイについて」に進み、TimesTenオペレータをデプロイしてください。