以前「M1 Mac上でcolimaを使ってDb2 Community Edition Docker イメージを動かす」という記事を投稿しましたが、最近MacではなくRHEL9.4で動かすことが多くなったので、その手順です。最後の方は以前のMac版とほぼ同じです。お手軽にDb2 Client代わりにしています(ただしrootで動かしてしまってます)。
参考:
Installing the Db2 Community Edition Docker image on Linux systems
1. Docker (podman)のセットアップ
既にセットアップ済みの場合は次の手順「2. ICR(IBM Cloud Registry) から Db2 Dockerイメージをpull」に進んでください。
参考: https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html-single/building_running_and_managing_containers/index#proc_getting-container-tools_assembly_starting-with-containers
以下rootで実施するか、sudo
をコマンドの最初につけて実施してください。
1.1 container-tools メタパッケージをインストール
podman
、buildah
、skopeo
が導入されるようです。
dnf install -y container-tools
ただDb2 Community Edition Docker イメージを動かすだけなら、podman
のみでもいいので、podman
のみ導入したい方は以下のコマンドで導入してください.
dnf install -y podman
1.2 podman-docker パッケージをインストール
podman-docker パッケージは、Docker コマンドラインインターフェイスと docker-api を、同等の Podman コマンドに置き換えます。 Db2ドキュメントはdockerコマンドで書かれているので、こちらも導入しておきます。この記事でもこの先はdockerコマンドで記載しています。
dnf install -y podman-docker
2. ICR(IBM Cloud Registry) から Db2 Dockerイメージをpull
最新版のDb2 Dockerイメージをpullする場合は、以下のコマンドを実行します。
以下rootで実施するか、sudo
をコマンドの最初につけて実施してください。
docker pull icr.io/db2_community/db2
2025年3月20日現在の最新版(latest)は12.1.1.0でした。
最新版ではなく特定のバージョンをpullする場合は、「IBM Cloud Container Registryで提供されているDb2関連のコンテナイメージの一覧とタグ(version)を確認する」の方法で取得可能なバージョンを確認し、バージョンを指定して、pullします。
2025年3月20日現在の取得可能なバージョンを以下でした:
$ ibmcloud cr image-list --restrict db2_community/db2
イメージをリストしています...
リポジトリー タグ ダイジェスト 名前空間 作成日 サイズ セキュリティー状況
icr.io/db2_community/db2 11.5.5.1 5a15bb3886be db2_community - 1.1 kB -
icr.io/db2_community/db2 11.5.8.0 9002c04b6c0f db2_community - 1.1 kB -
icr.io/db2_community/db2 11.5.9.0 77095d4e04cf db2_community - 1.1 kB -
icr.io/db2_community/db2 12.1.0.0 feaf79431bed db2_community - 1.1 kB -
icr.io/db2_community/db2 12.1.1.0 03654bfdf2f5 db2_community - 1.1 kB -
icr.io/db2_community/db2 latest 03654bfdf2f5 db2_community - 1.1 kB -
OK
例えば11.5.9.0 を取得したい場合は以下のコマンドで取得します:
docker pull icr.io/db2_community/db2:11.5.9.0
3. Db2 Dockerイメージの起動
以下rootで実施するか、sudo
をコマンドの最初につけて実施してください。
ドキュメントのプロシージャーのStep5では環境変数ファイルを作成していますが、ここでは最低限起動するレベルの環境変数を指定します。
環境変数の詳細はドキュメントのプロシージャーのStep5を参照してみてください。
最初にインスタンスのパスワードを決めてください。
ここでは Passw0rd
としました。
以下のコマンドを実行します。
docker run -itd -h db2server --name db2server \
--privileged=true -p 50000:50000 \
-e LICENSE=accept -e DB2INST1_PASSWORD=Passw0rd icr.io/db2_community/db2
icr.io/db2_community/db2
がイメージ名で何も指定していない場合は、最新版(latest)のイメージが起動します。
特定のバージョンを使用したい場合
特定のバージョンを使用したい場合は、タグ(=バージョン)をつけてください。
pull済みのイメージのタグは以下のコマンドで表示できます:
docker images
表示例:
# docker images
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY TAG IMAGE ID CREATED SIZE
icr.io/db2_community/db2 latest ad58f98bc527 6 weeks ago 4.04 GB
icr.io/db2_community/db2 11.5.9.0 dee45baf523a 16 months ago 3.2 GB
11.5.9.0を使いたい場合はDokerイメージの起動は以下のコマンドになります:
docker run -itd -h db2server --name db2server \
--privileged=true -p 50000:50000 \
-e LICENSE=accept -e DB2INST1_PASSWORD=Passw0rd icr.io/db2_community/db2:11.5.9.0
起動後の確認
事前にpullしてあれば、あっさり瞬時に起動します。
が、内部でTaskが走っているので、以下のコマンドでログに(*) Setup has completed.
が表示されるまで待ちます:
docker logs -f db2server
出力例:
# docker logs -f db2server
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
(*) Previous setup has not been detected. Creating the users...
(*) Creating users ...
(*) Creating instance ...
DBI1446I The db2icrt command is running.
DB2 installation is being initialized.
Total number of tasks to be performed: 4
Total estimated time for all tasks to be performed: 309 second(s)
Task #1 start
Description: Setting default global profile registry variables
Estimated time 1 second(s)
Task #1 end
Task #2 start
Description: Initializing instance list
Estimated time 5 second(s)
Task #2 end
Task #3 start
Description: Configuring DB2 instances
Estimated time 300 second(s)
Task #3 end
Task #4 start
Description: Updating global profile registry
Estimated time 3 second(s)
Task #4 end
The execution completed successfully.
For more information see the DB2 installation log at "/tmp/db2icrt.log.100".
DBI1070I Program db2icrt completed successfully.
(*) Fixing /etc/services file for DB2 ...
03/21/2025 09:02:06 0 0 SQL1032N No start database manager command was issued.
SQL1032N No start database manager command was issued. SQLSTATE=57019
(*) Cataloging existing databases
ls: cannot access '/database/data/db2inst1/NODE0000': No such file or directory
(*) Applying Db2 license ...
LIC1407N You are trying to register an invalid license certificate file, "/var/db2_setup/include/db2dec.lic".
(!) There was a failure while applying the Db2 license ...
(*) Updating DBM CFG parameters ...
DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed
successfully.
DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed
successfully.
DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed
successfully.
No Cgroup memory limit detected, instance memory will follow automatic tuning
(*) Remounting /database with suid...
DB2 State : Operable
DB2 has not been started
Starting DB2...
03/21/2025 09:02:15 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
(*) All databases are now active.
(*) Setup has completed.
false
2025-03-21-09.02.15.568756+000 I50408E390 LEVEL: Warning
PID : 13798 TID : 139946957854208 PROC : db2start
INSTANCE: db2inst1 NODE : 000
HOSTNAME: db2server
FUNCTION: DB2 UDB, base sys utilities, sqleReleaseStStLockFile, probe:16126
MESSAGE : Released lock on the file:
DATA #1 : String, 50 bytes
/database/config/db2inst1/sqllib/ctrl/db2strst.lck
ログに(*) Setup has completed.
が表示されたら、Ctrl+Cで抜けます。
下の方の以下の部分に(*) Setup has completed.
があります:
03/21/2025 09:02:15 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
(*) All databases are now active.
(*) Setup has completed.
2025/03/21現在、v12.1ではZRC=0x870F0042=-2029060030=SQLO_QUE_NOT_EXIST "Queue does not exist"
というエラーメッセージが出てしまうようですが、Known Issuesで無視していいそうです。
[volume マウントについて]
ちなみにドキュメントのプロシージャーのStep8では
-v /Docker:/database
のように
-vでローカルのディレクトリを/databaseにマウントしています。
しかし、これは不要です。
なにもつけなくても、docker上にvolumeを作成してくれます(/database用と/hadr用)。これによりdocker stopをして再度startした場合も、データの保持はされています。
(ここは検証結果です)
docker run後、2つvolumeが作成されています:
docker volume ls
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
DRIVER VOLUME NAME
local a8ea302fcccf04bc8d412f8eb2bf97fdd22100c7a633c1843dd84a4dbb30b481
local b07a41b11f09ed525ba07adc6a03c18e92dc179212332d8d59e0e29b57ddc224
これらのvolumeはコンテナ内の/databaseと/hadrにマウントされていました。
# docker inspect db2server
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
[
{
"Id": "15f6fbc9a319ea7c141756f23272f4b96c824532797a07ecf59043a568f25d56",
"Created": "2025-03-21T09:01:42.555480499Z",
"Path": "/var/db2_setup/lib/setup_db2_instance.sh",
"Args": [
"/var/db2_setup/lib/setup_db2_instance.sh"
],
"State": {
(中略)
"Mounts": [
{
"Type": "volume",
"Name": "a8ea302fcccf04bc8d412f8eb2bf97fdd22100c7a633c1843dd84a4dbb30b481",
"Source": "/var/lib/containers/storage/volumes/a8ea302fcccf04bc8d412f8eb2bf97fdd22100c7a633c1843dd84a4dbb30b481/_data",
"Destination": "/database",
"Driver": "local",
"Mode": "",
"Options": [
"nodev",
"exec",
"nosuid",
"rbind"
],
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "volume",
"Name": "b07a41b11f09ed525ba07adc6a03c18e92dc179212332d8d59e0e29b57ddc224",
"Source": "/var/lib/containers/storage/volumes/b07a41b11f09ed525ba07adc6a03c18e92dc179212332d8d59e0e29b57ddc224/_data",
"Destination": "/hadr",
"Driver": "local",
"Mode": "",
"Options": [
"nodev",
"exec",
"nosuid",
"rbind"
],
"RW": true,
"Propagation": "rprivate"
}
],
(以下省略)
4. 稼働確認
以下rootで実施するか、sudo
をコマンドの最初につけて実施してください。
4-1. 起動しているコンテナにログインします。
docker exec -ti db2server bash -c "su - db2inst1"
出力例:
# docker exec -ti db2server bash -c "su - db2inst1"
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Last login: Fri Mar 21 09:08:23 UTC 2025
[db2inst1@db2server ~]$
4-2. サンプルデータベースを作成してみます
db2sampl -force -sql
出力例:
[[db2inst1@db2server ~]$ db2sampl -force -sql
Creating database "SAMPLE"...
Connecting to database "SAMPLE"...
Creating tables and data in schema "DB2INST1"...
'db2sampl' processing complete.
[db2inst1@db2server ~]$
4-3. DBに接続します
db2 connect to sample
出力例
[db2inst1@db2server ~]$ db2 connect to sample
Database Connection Information
Database server = DB2/LINUXX8664 12.1.1.0
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
[db2inst1@db2server ~]$
4-4. SELECTしてみます
db2 "select * from department"
出力例
[db2inst1@db2server ~]$ db2 "select * from department"
DEPTNO DEPTNAME MGRNO ADMRDEPT LOCATION
------ ------------------------------------ ------ -------- ----------------
A00 SPIFFY COMPUTER SERVICE DIV. 000010 A00 -
B01 PLANNING 000020 A00 -
C01 INFORMATION CENTER 000030 A00 -
D01 DEVELOPMENT CENTER - A00 -
D11 MANUFACTURING SYSTEMS 000060 D01 -
D21 ADMINISTRATION SYSTEMS 000070 D01 -
E01 SUPPORT SERVICES 000050 A00 -
E11 OPERATIONS 000090 E01 -
E21 SOFTWARE SUPPORT 000100 E01 -
F22 BRANCH OFFICE F2 - E01 -
G22 BRANCH OFFICE G2 - E01 -
H22 BRANCH OFFICE H2 - E01 -
I22 BRANCH OFFICE I2 - E01 -
J22 BRANCH OFFICE J2 - E01 -
14 record(s) selected.
[db2inst1@db2server ~]$
4-5. DB接続を切断します
db2 connect reset
出力例
[db2inst1@db2server ~]$ db2 connect reset
DB20000I The SQL command completed successfully.
[db2inst1@db2server ~]$
4-6. コンテナから抜けます
exit
出力例
[db2inst1@db2server ~]$ exit
logout
#
(オプション)コンテナの停止、開始
以下rootで実施するか、sudo
をコマンドの最初につけて実施してください。
コンテナの停止は以下のコマンドになります(db2特有ではないです。普通のdockerコマンドです):
docker stop db2server
停止したコンテナの開始は以下のコマンドになります(db2特有ではないです。普通のdockerコマンドです):
docker start db2server
すぐ開始するのですが、起動時と同様に内部でTaskが走っているので、以下のコマンドでログに(*) Setup has completed.
が表示されるまで待ちます:
docker logs -f db2server
ログに(*) Setup has completed.
が表示されたら、Ctrl+Cで抜けます。
(オプション)コンテナの削除
コンテナを削除したい場合は、停止後、削除します。volumeは削除されないので、削除したい場合はコマンドで削除します。
1: コンテナの停止
docker stop db2server
2: コンテナの削除
docker rm db2server
3: volumeの削除
以下は使用していないvolumeを全て削除するコマンドです。
削除したくない使用していないvolumeがある場合は個別にdocker rm <volume名>
で削除してください。
docker volume prune
以上です。