同様の記事は他の方が既に書かれていますが、2019年の夏に公式リポジトリが引っ越ししていたので、情報アップデートしておきます。また、おまけのネタもいくつか試してみました。
Db2コンテナの起動
公式リポジトリに用意された手順に従ってやってみます。
docker pull
ibmcom/db2からDb2 Developer-Cのイメージをpullします。最新版はDb2 11.5.0.0a、サイズは約3GBでした。
alpine39:~$ docker pull ibmcom/db2
Using default tag: latest
latest: Pulling from ibmcom/db2
ac9208207ada: Pull complete
db3b974ae005: Pull complete
8b476cfca586: Pull complete
a033f87212a0: Pull complete
6062ba253339: Pull complete
53d54ba98754: Pull complete
8113895a570d: Pull complete
Digest: sha256:e7055e4ee436e3659fbaafdc8c7fe1088f79658ba851024da68ab4e181085f58
Status: Downloaded newer image for ibmcom/db2:latest
alpine39:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ibmcom/db2 latest 66a976f94954 3 months ago 2.96GB
docker run
alpine39:~$ docker run -itd --name mydb2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=$DB2_PASS -e DBNAME=testdb -v $HOME/db2:/database ibmcom/db2
起動確認
docker logs
で以下のメッセージを確認。
alpine39:~$ docker logs -f mydb2 | grep Setup
(*) Setup has completed.
Db2コンテナへのログイン
alpine39:~$ docker exec -ti mydb2 bash -c "su - db2inst1"
Last login: Tue Oct 15 20:24:11 UTC 2019
[db2inst1@083d58c4beb1 ~]$ db2 connect to testdb
Database Connection Information
Database server = DB2/LINUXX8664 11.5.0.0
SQL authorization ID = DB2INST1
Local database alias = TESTDB
非常に簡単にDb2環境が構築できました。導入が必要なパッケージがLinuxディストリビューション毎に異なったりするのを考えなくていいのもよいですね。
おまけ
非特権モードでの起動
Db2 Docker コンテナーを構築してデプロイする際の考慮事項によると、--privileged=true
で全ての特権を付与するのではなく、‑‑ipc=host ‑‑cap‑add=IPC_OWNER
のみで稼働することが可能とのことです。起動からSQLの実行まで出来ることは確認できました。
alpine39:~$ docker run -itd --name mydb2 ‑‑ipc=host ‑‑cap‑add=IPC_OWNER -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=$DB2_PASS -e DBNAME=testdb -v $HOME/db2:/database ibmcom/db2
カスタムイメージの作成
/var/customにシェルスクリプトを配置するとDb2セットアップ後に自動実行してくれるので、ibmcom/db2をベースにカスタムイメージを作成する際に便利です。
シェルスクリプトの作成
DIAGLEVEL変更のスクリプトを実行させてみます。スクリプトはコンテナ内でrootとして実行されるようです。以下のようにdoker runで設定した変数を渡すことが可能でした。
#!/bin/bash
. /database/config/db2inst1/sqllib/db2profile
db2 "attach to db2inst1 user db2inst1 using $DB2INST1_PASSWORD"
db2 "get dbm cfg" | grep -i diaglevel
db2 "update dbm cfg using diaglevel 4"
db2 "get dbm cfg" | grep -i diaglevel
db2 "detach"
Dockerfileの作成
FROM ibmcom/db2
RUN mkdir /var/custom
COPY dbmcfg.sh /var/custom
RUN chmod a+x /var/custom/dbmcfg.sh
カスタムイメージのビルド
alpine39:~$ docker build -t svc34/db2 .
Sending build context to Docker daemon 17.92kB
Step 1/4 : FROM ibmcom/db2
---> 66a976f94954
Step 2/4 : RUN mkdir /var/custom
---> Using cache
---> 3d657013dcb4
Step 3/4 : COPY dbmcfg.sh /var/custom
---> 085cacb0945c
Step 4/4 : RUN chmod a+x /var/custom/dbmcfg.sh
---> Running in 2273bc79988d
Removing intermediate container 2273bc79988d
---> 23d2cc871f34
Successfully built 23d2cc871f34
Successfully tagged svc34/db2:latest
カスタムイメージからの起動
docker run -itd --name svc34db2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=$DB2_PASS -v $HOME/db2:/database svc34/db2
スクリプト実行結果の確認
alpine39:~$ docker logs svc34db2
(*) Running dbmcfg.sh ...
Instance Attachment Information
Instance server = DB2/LINUXX8664 11.5.0.0
Authorization ID = DB2INST1
Local instance alias = DB2INST1
Diagnostic error capture level (DIAGLEVEL) = 3
DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed
successfully.
Diagnostic error capture level (DIAGLEVEL) = 4
DB20000I The DETACH command completed successfully.
セットアップ後の設定変更が実行されました。
ライセンスの変更
Db2のDockerイメージはCommunityライセンスで提供されますが、ライセンスファイルを適用することでStandardエディションやAdvancedエディションとして稼働させることも可能です。
Db2 11.5.0.0aからDockerイメージ内に90日間の試用版ライセンスファイルが同梱されているので、今回はそれを利用してみます。
変更前のライセンス
メモリ、コア数、表スペースサイズの制限が設定されています。
[db2inst1@083d58c4beb1 ~]$ db2licm -l
Product name: "IBM DB2 Developer-C Edition"
License type: "Community"
Expiry date: "Permanent"
Product identifier: "db2dec"
Version information: "11.5"
Max amount of memory (GB): "16"
Max number of cores: "4"
Max amount of table space (GB): "100"
ライセンスファイルの変更
同梱されている試用版ライセンスファイルを適用します。
alpine39:~$ docker exec -ti mydb2 bash -c "/opt/ibm/db2/V11.5/adm/db2licm -r db2dec && /opt/ibm/db2/V11.5/adm/db2licm -a /var/db2/db2trial.lic"
LIC1403I License removed successfully.
LIC1427I This product is now licensed for use as outlined in your License Agreement. USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT, LOCATED IN THE FOLLOWING DIRECTORY: "/opt/ibm/db2/V11.5/license/en_US.iso88591"
LIC1402I License added successfully.
LIC1426I This product is now licensed for use as outlined in your License Agreement. USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT, LOCATED IN THE FOLLOWING DIRECTORY: "/opt/ibm/db2/V11.5/license/en_US.iso88591"
変更後のライセンス
メモリ、コア数、表スペースサイズの制限がなくなっており、有効期限が設定されています。
[db2inst1@083d58c4beb1 ~]$ db2licm -l
Product name: "DB2 Advanced Enterprise Server Edition"
License type: "Trial"
Expiry date: "01/12/2020"
Product identifier: "db2aese"
Version information: "11.5"