バージョン指定してDb2コンテナをdocker pull

Db2にはDockerコンテナ版があり無償利用可能です。(Podmanでも利用可)
最新版でないバージョンのDb2のコンテナイメージを入手することもできます。
過去では`docker pull ibmcom/db2`コマンドで入手可能でしたが今ではURLが変わっているので備忘録として手順を残します。

### (1)最新版をpullする場合
```
docker pull icr.io/db2_community/db2
```

実行例：
```
~$ docker pull icr.io/db2_community/db2
Using default tag: latest
latest: Pulling from db2_community/db2
9c4f55ebff6d: Already exists
2435af937a0d: Already exists
8697d6582b9c: Already exists
9149d81330ab: Already exists
421b5af4d1b6: Already exists
356f11f48023: Already exists
089a8c45e13a: Pull complete
e0e481c05719: Pull complete
fad2358d438e: Pull complete
878b49191f19: Pull complete
fa7080e24ca1: Pull complete
c497507a1e29: Pull complete
3f771ca58ecd: Pull complete
Digest: sha256:03654bfdf2f539aba9f6fd3dacff0b5f89f78a630a9475c600162247167476be
Status: Downloaded newer image for icr.io/db2_community/db2:latest
icr.io/db2_community/db2:latest
```

### (2)特定バージョンのDb2コンテナイメージをpullしたい時

Db2コンテナのバージョン番号は、`VV.RR.MM.FF`のフォーマットとなっています。
2025年3月現在最新版のDb2 V12.1.1.0 の場合のバージョンストリングの内訳は以下のようになります。

| バージョン番号内訳 | V12.1.1の場合の例 |
|:-|:-|
|Version   | 12  |
|Release   | 1  |
|Modification Pack   |1   |
|Fix Pack   |0   |

このフォーマット通り指定すれば、古いバージョンのコンテナイメージも入手可能です。
※とはいえ時限があるかもしれないので、欲しいバージョンがある場合は早めにダウンロードしておいたほうが無難そうではあります

```
docker pull icr.io/db2_community/db2:11.5.9.0
```

実行例：
```
$ docker pull icr.io/db2_community/db2:11.5.9.0
11.5.9.0: 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:77095d4e04cf4448c0257086afcb2c166193d718dc33441da3b949f97e21efd5
Status: Downloaded newer image for icr.io/db2_community/db2:11.5.9.0
icr.io/db2_community/db2:11.5.9.0
```


### docker pull後のコンテナイメージ利用手順

このあとは[マニュアル](https://www.ibm.com/docs/ja/db2/11.5?topic=system-linux)通りにセットアップします

#### step1.環境変数ファイルの作成
docker(podman)コマンドを実行するカレントディレクトリに環境変数ファイルを配置。
※2025年3月現在比べた限り、V11.5もV12.1も同じファイルで構成できそうです
```
vi .env_list
```

```text:.env_list
LICENSE=accept
DB2INSTANCE=db2inst1
DB2INST1_PASSWORD=password
DBNAME=testdb
BLU=false
ENABLE_ORACLE_COMPATIBILITY=false
UPDATEAVAIL=NO
TO_CREATE_SAMPLEDB=false
REPODB=false
IS_OSXFS=false
PERSISTENT_HOME=true
HADR_ENABLED=false
ETCD_ENDPOINT=
ETCD_USERNAME=
ETCD_PASSWORD=
```

#### step2.Dockerコンテナからmountするディレクトリ作成
```
mkdir ~/v11.5.9
```

#### step3.コンテナ作成
docker runでV11.5.9コンテナを作成
```
$ docker run -h db2server --name db2server --restart=always --detach --privileged=true -p 50900:50000 --env-file .env_list -v /home/kanako/v11.5.9:/database icr.io/db2_community/db2:11.5.9.0
e389656a8200a6688155904a3271e01c2c3d76b9ecc4f6bd69b649e534c8954e
```

db2serverという名前でコンテナが作成されました。
```
$ docker ps -a | grep -i db2server
e389656a8200   icr.io/db2_community/db2:11.5.9.0                             "/var/db2_setup/lib/…"   About a minute ago   Up About a minute            22/tcp, 55000/tcp, 60006-60007/tcp, 0.0.0.0:50900->50000/tcp, [::]:50900->50000/tcp   db2server
```

#### step4.停止/起動
以後は、`docker stop/start`コマンドで停止・起動可能
```text:起動
$ docker stop db2server
db2server
```
```text:停止
$ docker start db2server
db2server
```


#### step5.コンテナにログイン
起動したら、`docker exec -it <container> bash`　でログイン可能
.env_listに指定したインスタンス名(今回はデフォルトのdb2inst1)にsuすると、既に作成済のデータベースを利用可能な状態となっています。DB名も、.env_listで命名した名前となります。デフォルトではTESTDBです
```
$ docker exec -it db2server bash
[root@db2server /]# su - db2inst1
Last login: Wed Mar 19 03:59:32 UTC 2025
[db2inst1@db2server ~]$ db2 list db directory

 System Database Directory

 Number of entries in the directory = 1

Database 1 entry:

 Database alias                       = TESTDB
 Database name                        = TESTDB
 Local database directory             = /database/data
 Database release level               = 15.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

[db2inst1@db2server ~]$
```