はじめに
Db2 Developer-C エディションとは、開発者向けにDb2のすべてのコア機能を無料で提供するエディションです。正確な情報は以下の資料などを確認してください。
Db2 データベース製品のエディションおよび Db2 オファリング
Docker Hub上で公開されたイメージがあり、これを利用することが可能です。
Db2 Developer-C Edition@docker hub
仕事で検証する必要がでてきたため、ささっと確認した内容をメモがてら共有します。
事前準備
イメージを利用するにはDocker Hubにログインして、使用条件に同意する必要があります。
- Docker Hubにログインし、Db2 Developer-C Edition@docker hubを開きます。
- [Proceed to Checkout]のボタンをクリックします。
- [Contact Information]を記入します。(FirstName, LastName, Company, Title, Email, Phone Numberなど)
- 利用条件について確認し、同意できればチェックを入れ、[Get Content]をクリックします。
- [Copy and paste to pull this image]に表示されたコマンドをコピーします。
イメージのpull
- インターネットに接続可能であり、Dockerコマンドが実行可能な端末上で、先ほどコピーしたpullコマンドを実行します
- ネットワークの接続状況や端末のスペックに依存する可能性がありますが、pullには感覚的に15分から20分ほどかかりました(計測したわけではないので不正確です)
コンテナ起動の準備手順
envファイルの用意
下記の項目が設定可能です。(最新情報は製品情報などを確認してください。)
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=
起動
$ docker run --name db2server --restart=always --detach --privileged=true -p 50000 --env-file ./db2.env store/ibmcorp/db2_developer_c:{Tag}
a41146e4187493ccf2835889fb5d75051e6fc627e663a2f2f042a5d76ce14fcb
$
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a41146e41874 store/ibmcorp/db2_developer_c:{Tag} "/var/db2_setup/lib/…" 3 seconds ago Up 2 seconds 22/tcp, 55000/tcp, 60006-60007/tcp, 0.0.0.0:32777->50000/tcp db2server
$
データベースとテーブルの初期セットアップ
ガイドの内容も参照しながら試行錯誤した手順を紹介します。
初期データベースの作成
CREATE DATABASEしたい場合は、.envに定義しDocker runのタイミングで読み込ませると作成できました。(CREATE DATABASEをシェルで実行する処理に組み込むと、USER ROOTにはその権限はありません、というエラー。DockerfileのUSERで切り替える等もできないようでした。)
# create an initial database with the name provided or leave empty
DBNAME=testdb
初期データの投入処理
- Docker run時に初期設定したい処理がある場合は、scriptを用意し、/var/customにshell scriptをCOPYする
- shellで読み込ませる処理はCONNECT TO {database}以降の処理
- shellでDB2コマンドを実行させるために「db2profile」を実行したかったがpathがわからなかった。execで入ってfindして確認した。(イメージのバージョンが上がると変わる可能性あり。)
FROM store/ibmcorp/db2_developer_c:XX.X.X.X-x86_64
RUN mkdir /var/custom && mkdir /var/mysql
COPY setupdb.sh /var/custom/
COPY db2.sql /var/mysql
RUN chmod a+x /var/custom/setupdb.sh && chmod a+x /var/mysql/db2.sql
#!/bin/bash
set -e
. /database/config/db2inst1/sqllib/db2profile
db2 -stvf /var/mysql/db2.sql
※db2profileはbashかKorn shell前提
https://www.ibm.com/support/knowledgecenter/en/SS4Q96_6.1.1/com.ibm.help.scc.install.doc/SCC_Create_DB2_DB_From_Scripts.html
CONNECT TO testdb;
CREATE TABLE access_event
(
timestmp BIGINT NOT NULL,
requestURI VARCHAR(254),
requestURL VARCHAR(254),
remoteHost VARCHAR(254),
remoteUser VARCHAR(254),
remoteAddr VARCHAR(254),
protocol VARCHAR(254),
method VARCHAR(254),
serverName VARCHAR(254),
postContent VARCHAR(254),
event_id INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1)
);
CREATE TABLE access_event_header
(
event_id INTEGER NOT NULL,
header_key VARCHAR(254) NOT NULL,
header_value VARCHAR(1024),
PRIMARY KEY(event_id, header_key)
);
CONNECT RESET;
コンテナ起動
今回は簡易検証だっため、永続化などは特にせずです。
$ docker run --name ${container_name} --env-file db2.env --restart=always --detach --privileged=true -p 50000 ${image_name}:${tag}
上記のようにコマンドを実行するとコンテナが起動する。
docker logsコマンドでtableの作成などが正常に完了したか確認する。
今後の課題
- チュー二ニング方法は要調査。
- Docker runで完全にDBが起動するまで、docker logsコマンドで確認すると数分かかってしまっていた。
.envで余計な処理も有効にしてしまっていたのかもしれない。
- Docker runで完全にDBが起動するまで、docker logsコマンドで確認すると数分かかってしまっていた。