1
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 1 year has passed since last update.

DB2 on Docker

Last updated at Posted at 2019-06-04

Docker上で DB2 を使うべく、色々試した結果です。
オフィシャルのイメージは使わず、自分で構築してみます。

応答ファイル

db2setupコマンドに渡す応答ファイルは以下としました。

db2expcJP.rsp
PROD                      = EXPRESS_C
LIC_AGREEMENT             = accept
FILE                      = /opt/ibm/db2/V11.1
LANG                      = JP
INSTANCE                  = DB2_INST
DB2_INST.NAME             = db2inst1
DB2_INST.PASSWORD         = db2inst1
DB2_INST.UID              = 501
DB2_INST.GID              = 501
DB2_INST.GROUP_NAME       = db2grp1
DB2_INST.HOME_DIRECTORY   = /home/db2inst1
DB2_INST.SVCENAME         = db2c_db2inst1
DB2_INST.PORT_NUMBER      = 50000
DB2_INST.FCM_PORT_NUMBER  = 60000
DB2_INST.MAX_LOGICAL_NODES = 4
DB2_INST.FENCED_USERNAME  = db2fenc1
DB2_INST.FENCED_PASSWORD  = db2fenc1
DB2_INST.FENCED_UID       = 601
DB2_INST.FENCED_GID       = 601
DB2_INST.FENCED_GROUP_NAME = db2fenc1
DB2_INST.FENCED_HOME_DIRECTORY = /home/db2fenc1
DB2_INST.CONFIGURE_TEXT_SEARCH = NO

Dockerfile

応答ファイル(db2expcJP.rsp)とインストールモジュール(v11.1_linuxx64_expc.tar.gz)を用いて、DB2 Express-CをインストールするDockerfileを作成した。
手動でdb2setupでセットアップを実行したとき、エラーになったんだけど、RUNコマンドでやったらうまくいってる。なぜ?

Dockerfile
FROM ubuntu:20.04

RUN dpkg --add-architecture i386 \
    && apt-get update \
    && apt-get install -y \
       aria2 \
       libaio1 \
       binutils \
       file \
       libx32stdc++6 \
       numactl \
       libpam0g:i386 \
       language-pack-ja tzdata \
    && update-locale LANG=ja_JP.UTF-8 \
    && rm -rf /var/lib/apt/lists/* \
    && echo "${TZ}" > /etc/timezone \
    && rm -f /etc/localtime \
    && ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
    && dpkg-reconfigure -f noninteractive tzdata \
    && groupadd --gid 501 db2grp1 \
    && useradd --gid db2grp1 --uid 501 --shell /bin/bash -m db2inst1 \
    && groupadd --gid 601 db2fenc1 \
    && useradd --gid db2fenc1 --uid 601 --shell /bin/bash -m db2fenc1
ADD v11.1_linuxx64_expc.tar.gz /tmp
COPY db2expcJP.rsp /tmp/expc
ENV LANG=ja_JP.utf8
RUN /tmp/expc/db2setup -r /tmp/expc/db2expcJP.rsp && rm -rf /tmp/*
EXPOSE 50000

動かしてみる。

C:\kazu_DB2\build>docker run -it --rm --privileged=true kazu_db2:11.1.4.4 bash
root@8ae39f020d64:/# su - db2inst1
db2inst1@8ae39f020d64:~$ db2start
SQL1063N  DB2START の処理が正常に終了しました。
db2inst1@8ae39f020d64:~$ db2 create database test
DB20000I  CREATE DATABASE コマンドが正常に完了しました。
db2inst1@8ae39f020d64:~$ db2 connect to test

   データベース接続情報

 データベース・サーバー = DB2/LINUXX8664 11.1.4.4
 SQL 許可 ID            = DB2INST1
 ローカル・データベース別名 = TEST

db2inst1@8ae39f020d64:~$ db2
(c) Copyright IBM Corporation 1993,2007
DB2 クライアント 11.1.4.4 コマンド行プロセッサー

コマンド・プロンプトからデータベース・マネージャーのコ
マンド、 および SQL ステートメントを呼び出せます。 例:
    db2 => connect to sample
    db2 => bind sample.bnd

一般ヘルプには ? をタイプしてください。
コマンドのヘルプには ? command をタイプしてください。
command には、データベース・マネージャー・コマンドの
最初のいくつかのキーワードを入力します。 例:
 ? CATALOG DATABASE は CATALOG DATABASE コマンドのヘルプです。
 ? CATALOG          は全 CATALOG コマンドのヘルプです。

db2 対話モードを抜けるには、コマンド・プロンプトで QUIT
とタイプしてください。
対話モード以外では、すべてのコマンドに接頭語 'db2'
を付ける必要があります。
現在のコマンド・オプションの設定をリストするには、
LIST COMMAND OPTIONS とタイプしてください。

詳細は、「オンライン・リファレンス」を参照してください
。

db2 => create table abc (f1 varchar(10))
DB20000I  SQL コマンドが正常に完了しました。
db2 => insert into abc values('ABC')
DB20000I  SQL コマンドが正常に完了しました。
db2 => insert into abc values('XYZ')
DB20000I  SQL コマンドが正常に完了しました。
db2 => select * from abc

F1
----------
ABC
XYZ

  2 レコードが選択されました。

db2 => terminate
DB20000I  TERMINATE コマンドが正常に完了しました。
db2inst1@8ae39f020d64:~$ db2stop
SQL1064N  DB2STOP の処理が正常に終了しました。
db2inst1@8ae39f020d64:~$

Dockerfileと応答ファイル(db2expcJP.rsp)をgithubで公開しました。

11.5.X.X

久しぶりにDB2をいじっています。11.5.8.0をまっさらな環境にインストールしようとしているが、どうも動かない。仕方がないのでオフィシャルイメージをベースに環境構築を試みています。

Dockerfile
FROM ibmcom/db2 as intermediate

FROM centos:7
# from intermediate image copy installation and db2 registry leaving out the installation image
  COPY --from=intermediate /opt /opt
  RUN mkdir -p  /var/db2
  COPY --from=intermediate /var/db2 /var/db2

# update system and install DB2 dependencies again
  RUN yum -y update ; yum -y install file libaio numactl libstdc++.so.6 pam-devel ksh pam-devel.i686 'compat-libstdc++-33-3.2.3-72.*'
  RUN rm /etc/localtime; ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
  RUN localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
  ENV LANG="ja_JP.UTF-8" \
    LANGUAGE="ja_JP:ja" \
    LC_ALL="ja_JP.UTF-8"
  RUN useradd db2inst1; groupadd db2iadm1; gpasswd -a db2inst1 db2iadm1
  RUN groupadd db2fadm1; useradd -u 1003 -g db2fadm1 -m -d /home/db2fenc1 db2fenc1
  RUN /opt/ibm/db2/V11.5/instance/db2icrt -u db2fenc1 db2inst1

これで作ったイメージでdb2startする前にノード構成ファイル ($INST_HOME/sqllib/db2nodes.cfg)を修正します。2番目のホスト名がdocker build用のホスト名(buildkitsandbox)になっているのでコンテナのホスト名に修正します。

[db2inst1@95c01e588ba8 sqllib]$ db2start
01/12/2022 16:50:55     0   0   SQL1063N  DB2START processing was successful.
SQL1063N  DB2START processing was successful.
[db2inst1@95c01e588ba8 sqllib]$

ノード構成ファイル ($INST_HOME/sqllib/db2nodes.cfg)を変更しなくて済む手段を考えました。
・Dockerfileでノード構成ファイルのホスト名を変更する。

RUN echo '0 db2 0' > /home/db2inst1/sqllib/db2nodes.cfg

Dockerでrunするときに-hオプションでホスト名を指定する。

docker run -it -h db2 --privileged=true --name="db2inst1" -p 50000:50000 kazu_db2

##変更履歴
(2019/6/4)db2setupの実行を1回とするよう修正。
(2019/6/4)ベースのOS Versionを18.04に修正。
(2019/6/5)ベースのOS Versionを19.10に修正。
(2019/6/5)追加ユーザのログインシェルに/bin/bashを指定。
(2019/6/5)インストール後不要ファイルの削除を追加。
(2019/7/21)githubにファイルを登録しました。
(2020/5/23)ベースのOS Versionを20.04に変更。
(2022/1/12)DB2で11.5.7.0を試した結果を追加。ノード構成ファイル のホスト名更新の記述を追加。
(2022/12/23)DB2を11.5.8.0にバージョンアップ。

1
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
1
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?