見出し画像

Db2のフル機能が動く環境を無償で組む方法があります!


はじめに


皆さん、こんにちは。株式会社SHIFTのアプリケーションサービスGの佐々木英和です。主にアプリケーションや業務システムのマイグレーションを担当しています。

今回ご紹介する情報は、IBM社製品のデータベースDb2の無償のフル機能版をPCで利用する方法です。 以下の表に記載しているIBM CloudサービスとRancher Desktop、IBM Cloud CLI、Db2 Community Edition for Dockerの3つのソフトウェアを利用することによりPCにてDb2のフル機能を無償で動かすことができますのでご紹介いたします。

出展:IBM社 Web https://www.ibm.com/docs/ja/db2/11.5?topic=deployments-db2-community-edition-docker
https://www.ibm.com/docs/ja/db2/11.5?topic=editions-db2-database-product-offerings#c0058536__db2_community

IBM Cloud アカウント登録


出展:IBM社 Web https://www.ibm.com/blogs/solutions/jp-ja/account-update/

  • IBM Clouudアカウントを登録
    IBM Cloudの従量課金アカウントを登録します。登録時にクレジットカードの情報を登録する必要があります。しかし、新規アカウントの登録時に課金されることはありません。またフリーのメールアドレスではなく商用のメールアドレスを登録することをお奨めします。

  • IBM ClouudにログインしてAPIキーを作成
    IBM CloudのURL: https://cloud.ibm.com/login
    IBM Clouudにブラウザからログイン後、ダッシュボードの左メニューのAPIキーを開いてAPIキーを作成してファイルをダウンロードします。

ダウンロードしたjsonファイルのapikeyの値を"ApiKeyValue.txt"のような名前のテキストファイルに保存します。理由はPCのWSLからIBM ClouudやDockerへのログイン時にapikeyの値がログに記録されないように標準入力からapikeyの値を受け渡すためです。

  • IBM Clouudのアクセス権を設定

    ダッシュボードの左メニューのユーザーを開いて表示された自身のユーザー名をクリックしてユーザーの管理を表示してアクセスタブを開いてアクセス・ポリシー段落の「アクセス権限の割り当て」ボタンをクリックします。


  • 表示されたポリシーの作成画面にて以下の通り選択して「追加」ボタンを押下してコンテナへのアクセス権を設定します。


  • サービス:Container Registry
    リソース:特定のリソース
    Resource Type  string equals  namespace
    Resource Name  string equals  icr.io
    Geography    ストリング   グローバル
    役割とアクション:
    サービス・アクセス:リーダー
    プラットフォーム・アクセス:ビューワー

Rancher Desktop インストール


出展:作成者名 @moritalous Qiita Web「まるでDocker Desktop!!Rancher Desktopの登場です」

  • インストール

    1. ダウンロードしたファイルをダブルクリック

    2. Container Runtimeはdockerd(moby)を選択します。

  • Rancher Desktopの実行:

    1. WindowsデスクトップのRancher Desktopアイコンをダブルクリックします。

Windowsのコマンドプロンプトを開いて「rancher-desktop」の実行を確認した後、Linuxの端末に切り替えてさらに管理者モードに切り替えてdockerコマンドの動作確認を行います。


C:\Users\hidekazu.sasaki.26>wsl -l -v
  NAME                    STATE           VERSION
* rancher-desktop-data    Stopped         2
  rancher-desktop         Running         2

C:\Users\hidekazu.sasaki.26>
C:\Users\hidekazu.sasaki.26>wsl --distribution rancher-desktop
/mnt/c/Users/hidekazu.sasaki.26 # sudo -i
~ #
~ # docker version
Client:
 Version:           25.0.5
 API version:       1.44
 Go version:        go1.21.10
 Git commit:        d260a54c81efcc3f00fe67dee78c94b16c2f8692
 Built:             Sun May 12 07:25:43 2024
 OS/Arch:           linux/amd64
 Context:           default

Server:
 Engine:
  Version:          25.0.5
  API version:      1.44 (minimum version 1.24)
  Go version:       go1.21.10
  Git commit:       e63daec8672d77ac0b2b5c262ef525c7cf17fd20
  Built:            Sun May 12 07:25:43 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.7.10
  GitCommit:        4e1fe7492b9df85914c389d1f15a3ceedbb280ac
 runc:
  Version:          1.1.12
  GitCommit:        51d5e94601ceffbbd85688df1c928ecccbfa4685
 docker-init:
  Version:          0.19.0
  GitCommit:
~ #

IBM Cloud CLI インストール


  • WSLへファイルをコピー、展開、シンボリックリンク
    Rancher Desktopを起動後にエクスプローラーを利用し、マウントされたLinuxディレクトリ配下のフォルダーへダウンロードしたファイル(IBM CloudのCLIのtarファイルおよびAPIキーのファイル)をコピーします。

  • WindowsのコマンドプロンプトのLinux端末の管理者モードでtarファイルを展開し、ibmcloudコマンドのシンボリックリンクを設定します。

  /opt/ibm # tar xvzf IBM_Cloud_CLI_2.13.0_amd64.tar.gz
  Bluemix_CLI/
  Bluemix_CLI/bin/
  Bluemix_CLI/bin/ibmcloud
  Bluemix_CLI/bin/ibmcloud.sig
  Bluemix_CLI/bin/NOTICE
  Bluemix_CLI/bin/LICENSE
  Bluemix_CLI/bin/CF_CLI_Notices.txt
  Bluemix_CLI/bin/CF_CLI_SLC_Notices.txt
  Bluemix_CLI/autocomplete/
  Bluemix_CLI/autocomplete/bash_autocomplete
  Bluemix_CLI/autocomplete/zsh_autocomplete
  Bluemix_CLI/install
  Bluemix_CLI/uninstall
  Bluemix_CLI/install_bluemix_cli
  /opt/ibm #

  /opt/ibm/Bluemix_CLI/bin #
  /usr/bin # ln -s /opt/ibm/Bluemix_CLI/bin/ibmcloud
  • デフォルトのリソースグループをターゲットに設定

    デフォルトのリソースグループのIDを表示し、引数にIDを指定します。

/opt/ibm # ibmcloud resource groups
Retrieving all resource groups under account xxxx as xxxx
OK
Name     ID                              Default Group  State
Default  63fdd8e1aefc4b748bc32788c6b7f493  true  ACTIVE
/opt/ibm # 
/opt/ibm # ibmcloud target -g 63fdd8e1aefc4b748bc32788c6b7f493
Targeted resource group Default

API endpoint:      https://cloud.ibm.com
Region:
User:              
Account:           
Resource group:    Default
CF API endpoint:
Org:
Space:
/opt/ibm # 
  • コンテナを利用するためのコマンドプラグインをインストールします

/opt/ibm # ibmcloud plugin install container-registry
  Looking up 'container-registry' from repository 'IBM Cloud'...
  Plug-in 'container-registry[cr] 1.3.7' found in repository 'IBM Cloud'
  Attempting to download the binary file...
   11.66 MiB / 11.66 MiB [====================================================================================] 100.00% 3s
  12230656 bytes downloaded
  Installing binary...
  OK
  Plug-in 'container-registry 1.3.7' was successfully installed into /root/.bluemix/plugins/container-registry. Use 'ibmcloud plugin show container-registry' to show its details.
  /opt/ibm #
  • コンテナレジストリのリージョンがグローバルであることを確認します。

  /opt/ibm # ibmcloud cr region
  You are targeting region 'global', the registry is 'icr.io'.

  OK
  /opt/ibm #

Db2 Community Edition ダウンロード


出展:IBM社 Web https://www.ibm.com/docs/ja/db2/11.5?topic=system-linux

  • 無償のソフトウェア:Db2 Community Edition

https://www.ibm.com/docs/ja/db2/11.5?topic=editions-db2-database-product-offerings#c0058536__db2_community

  • IBM CloudのAPIキーを利用したDockerログインの認証
    IBM Cloudのapikeyの値を保存したテキストファイルを標準入力し、パスワードとして受け渡してDockerにログインします。

 /opt/ibm # cat ApiKeyValue.txt | docker login -u iamapikey --password-stdin icr.io
  Login Succeeded
  /opt/ibm #
  • DockerコンテナイメージをDb2 Communityのレジストリからダウンロード

    Db2 Community EditionのDockerコンテナイメージをicr.io配下のフォルダーからpullします。


  /opt/ibm/db2 # docker pull icr.io/db2_community/db2
  Using default tag: latest
  latest: Pulling from db2_community/db2
  38731a27f396: Pull complete
  1c3d5840504e: Pull complete
  09d197930b8e: Pull complete
  423ae7a678d9: Pull complete
  6d87d020b169: Pull complete
  3b50ae8a11ab: Pull complete
  a968e85cf1fe: Pull complete
  f19530d61992: Pull complete
  570da5554904: Pull complete
  1d2565c05bac: Pull complete
  61beb89ef8dd: Pull complete
  92a8ed66916b: Pull complete
  Digest: sha256:
  Status: Downloaded newer image for icr.io/db2_community/db2:latest
  icr.io/db2_community/db2:latest
  /opt/ibm/db2 #
  • Db2の環境設定

    .env_listという名前のテキストファイルを作成してDb2の動作環境を設定します。


  /opt/ibm/db2 # touch .env_list
  /opt/ibm/db2 # vi .env_list

  LICENSE=accept
  DB2INSTANCE=db2inst1
  DB2INST1_PASSWORD=xxxxxxxxxxxx
  DBNAME=SFTDB
  BLU=false
  ENABLE_ORACLE_COMPATIBILITY=false
  UPDATEAVAIL=NO
  TO_CREATE_SAMPLEDB=true
  REPODB=true
  IS_OSXFS=false
  PERSISTENT_HOME=false
  HADR_ENABLED=false
  ETCD_ENDPOINT=
  ETCD_USERNAME=
  ETCD_PASSWORD=
  • Db2のコンテナを実行

/opt/ibm/db2 # docker run -h db2server --name db2server --restart=always --detach --privileged=true -p 50000:50000 --env-file .env_list -v /Docker:/database icr.io/db2_community/db2 
  • Db2のコンテナ内のDb2のインスタンスにアクセス

    .env_listのDB2INSTANCEパラメータに設定したDb2のインスタンスを使用します。

  /opt/ibm/db2 # docker exec -ti db2server bash -c "su - db2inst1"
  Last login: Fri Mar 29 08:54:58 UTC 2024
  [db2inst1@db2server ~]$ 
  • Db2の動作確認

    コマンドインターフェイスを使用してDb2の動作確認を行います。

    .env_listのDBNAMEパラメータに設定したDb2のデータベースに接続します。

  [db2inst1@db2server ~]$ db2 connect to SFTDB

   Database Connection Information

   Database server        = DB2/LINUXX8664 11.5.9.0
   SQL authorization ID   = DB2INST1
   Local database alias   = SFTDB

  [db2inst1@db2server ~]$ 

  [db2inst1@db2server ~]$ db2 +c "create table SFT1 (cust_no int, cust_name varchar(20))"
  DB20000I  The SQL command completed successfully.
  [db2inst1@db2server ~]$ db2 list tables

  Table/View                      Schema          Type  Creation time
  ------------------------------- --------------- ----- --------------------------
  SFT1                            DB2INST1        T     2024-03-29-09.06.58.333866

    1 record(s) selected.

  [db2inst1@db2server ~]$ db2 +c "insert into sft1 values (1, 'First')"
  DB20000I  The SQL command completed successfully.
  [db2inst1@db2server ~]$ db2 "select * from sft1"

  ID          COL1
  ----------- ----------------------------------------------------------------------------------------------------
            1 First
    1 record(s) selected.

  [db2inst1@db2server ~]$
  [db2inst1@db2server ~]$ db2 disconnect SFTDB
  DB20000I  The SQL DISCONNECT command completed successfully.
  [db2inst1@db2server ~]$ db2 deactivate db SFTDB
  DB20000I  The DEACTIVATE DATABASE command completed successfully.
  [db2inst1@db2server ~]$ db2stop
  05/07/2024 10:02:57     0   0   SQL1064N  DB2STOP processing was successful.
  SQL1064N  DB2STOP processing was successful.
  [db2inst1@db2server ~]$ db2 terminate
  DB20000I  The TERMINATE command completed successfully.
  [db2inst1@db2server ~]$ exit
  logout
  /opt/IBM/db2 #

まとめ


久しぶりにDb2を使用するプロジェクトへの参加がきっかけになり、自身のリハビリを兼ねて個人的にDb2を操作したいと思いました。

Googleで情報を検索していたところDockerイメージで提供されている無償のCommunity Editionを知り、またDockerコンテナを容易に扱えるRancher Desktopというソフトウェアを発見しました。

この2つのソフトウェアがとてもマッチングしていると思いまして早速、PC上に検証環境を作る作業に取り掛かりました。

しかしIBM Cloudは未経験でしたのでDockerイメージをプルするのにトライ&エラーを繰り返しましたため、知り得た手順をテクメモにまとめて共有したいと思いました。

クラウドサービスやサーバーソフトウェアを個人的に操作できる環境を組んでみたいと思われている方にヒントになるようなことがありましたら大変嬉しく思います。


執筆者プロフィール:佐々木 英和
メインフレームから始まりUNIX、WindowsそれからAWSへと様々なプラットフォームでIT業務の豊富な経験があります。アプリケーションの企画・設計・開発やマイグレーションの調査・要件定義・設計・移行などでプロジェクトの目標を達成すると素直に嬉しいと思います。

心がけていることは新しく修得した知識や技術を自身が持つ経験や技能に紐づけて記憶・活用することで仕事に対する自信が持てるようになることです。こうすることで同じ仕事を長く続けることができたのかなと思っています。

プライベートでは健康を第一にランニング、サイクリング、ゴルフ、スキーなどを楽しんでいます。また美しい品物や音楽に囲まれて美味しいものを頂くようにしています。

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/

PHOTO:UnsplashFlorian Olivo