(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Db2】Dockerコンテナを利用したLinux版Db2環境の用意

スポンサーリンク

はじめに

Windows端末にてDb2のコマンドを試したい際に環境を用意した流れをメモしておきます。
Docker環境はDockerDesktopを利用しています。

環境情報
  • Windows 10
  • Docker version 19.03.5

db2コンテナを起動

以下にて公式のイメージをローカルに保存できます。

$ docker pull ibmcom/db2
Using default tag: latest
...
docker.io/ibmcom/db2:latest

イメージの詳細を見れば分かりますが

$ docker inspect image ibmcom/db2
[
 ...
            "ExposedPorts": {
                "22/tcp": {},
                "50000/tcp": {},
                "55000/tcp": {},
                "60006/tcp": {},
                "60007/tcp": {}
            },
...
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "STORAGE_DIR=/database",
                "HADR_SHARED_DIR=/hadr",
                "DBPORT=50000",
                "TSPORT=55000",
                "SETUPDIR=/var/db2_setup",
                "NOTVISIBLE=in users profile",
                "LICENSE_NAME=db2dec.lic"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "ENTRYPOINT [\"/var/db2_setup/lib/setup_db2_instance.sh\"]"
            ],
...

起動時にsetup_db2_instance.shが実行されていることが分かります。

以下コマンドにてコンテナを作成し

$ docker container create --name db2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=$DB2_PASS -e DBNAME=testdb ibmcom/db2:latest

コンテナを起動すれば

$ docker container start db2

db2コンテナが立ち上がったままになっています。

$ docker ps --no-trunc
CONTAINER ID                                                       IMAGE               COMMAND                                      CREATED             STATUS              PORTS                                                          NAMES
...   ibmcom/db2:latest   "/var/db2_setup/lib/setup_db2_instance.sh"   ..      22/tcp, 55000/tcp, 60006-60007/tcp, 0.0.0.0:50000->50000/tcp   db2

dbコンテナに接続

コンテナに以下コマンドで接続できます。

> docker exec -it db2 /bin/bash
[root@62959d1446c6 /]# 

rootユーザではdb2コマンドが通らないので

[root@62959d1446c6 /]# which db2
/usr/bin/which: no db2 in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)

インスタンス所有者であるdb2inst1にスイッチを行えばdb2コマンドが通ります。

[root@62959d1446c6 /]# su db2inst1
[db2inst1@62959d1446c6 /]$ which db2
~/sqllib/bin/db2

インスタス名は以下で

[db2inst1@62959d1446c6 /]$ db2ilist
db2inst1

立ち上がっているdb2のバージョンは以下にて確認できます。

[db2inst1@62959d1446c6 /]$ db2level
DB21085I  This instance or install (instance name, where applicable:
"db2inst1") uses "64" bits and DB2 code release "SQL11050" with level
identifier "0601010F".
Informational tokens are "DB2 v11.5.0.0", "s1906101300", "DYN1906101300AMD64",
and Fix Pack "0".
Product is installed at "/opt/ibm/db2/V11.5".

コマンドの試し打ち

今回はコンテナ作成時の引数でtestdbを作成しているので以下コマンドでデータベース構成を表示することができます。

[db2inst1@62959d1446c6 /]$ db2 connect to testdb

   Database Connection Information

 Database server        = DB2/LINUXX8664 11.5.0.0
 SQL authorization ID   = DB2INST1
 Local database alias   = TESTDB

db2コマンドで対話モードに入れば

[db2inst1@62959d1446c6 /]$ db2
(c) Copyright IBM Corporation 1993,2007
Command Line Processor for DB2 Client 11.5.0.0
...
db2 =>

対話モードでコマンドを打てます。以下はmydbという新しいデータベースを作成する流れです。

db2 => connect reset
DB20000I  The SQL command completed successfully.
db2 => create database mydb
DB20000I  The CREATE DATABASE command completed successfully.
db2 => connect to mydb

   Database Connection Information

 Database server        = DB2/LINUXX8664 11.5.0.0
 SQL authorization ID   = DB2INST1
 Local database alias   = MYDB

ちなみにdb2 resetをしないと以下エラーとなります。

db2 => connect reset
DB20000I  The SQL command completed successfully.
db2 => create database mydb
DB20000I  The CREATE DATABASE command completed successfully.

終わりに

Linuxベースのdb2ですが、db2はプラットフォームで考え方やコマンドが変わらないため、PC環境に自分が占有できるデータベースを用意できるのはテスト環境としても役立ちます。

以上、ご参考になれば幸いです。