2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Db2 Developer-Cのコンテナを動かす

Last updated at Posted at 2019-03-26

はじめに

Db2 Developer-C エディションとは、開発者向けにDb2のすべてのコア機能を無料で提供するエディションです。正確な情報は以下の資料などを確認してください。
Db2 データベース製品のエディションおよび Db2 オファリング

Docker Hub上で公開されたイメージがあり、これを利用することが可能です。
Db2 Developer-C Edition@docker hub

仕事で検証する必要がでてきたため、ささっと確認した内容をメモがてら共有します。

事前準備

イメージを利用するにはDocker Hubにログインして、使用条件に同意する必要があります。

  1. Docker Hubにログインし、Db2 Developer-C Edition@docker hubを開きます。
  2. [Proceed to Checkout]のボタンをクリックします。
  3. [Contact Information]を記入します。(FirstName, LastName, Company, Title, Email, Phone Numberなど)
  4. 利用条件について確認し、同意できればチェックを入れ、[Get Content]をクリックします。
  5. [Copy and paste to pull this image]に表示されたコマンドをコピーします。

イメージのpull

  1. インターネットに接続可能であり、Dockerコマンドが実行可能な端末上で、先ほどコピーしたpullコマンドを実行します
  2. ネットワークの接続状況や端末のスペックに依存する可能性がありますが、pullには感覚的に15分から20分ほどかかりました(計測したわけではないので不正確です)

コンテナ起動の準備手順

envファイルの用意

下記の項目が設定可能です。(最新情報は製品情報などを確認してください。)

.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=

起動

$ 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で切り替える等もできないようでした。)

.env_list(抜粋)
# 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して確認した。(イメージのバージョンが上がると変わる可能性あり。)
Dockerfile
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
setupdb.sh
#!/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

db2.sql
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で余計な処理も有効にしてしまっていたのかもしれない。
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?