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

Mac M1 Docker DesktopでDb2を動かす

Last updated at Posted at 2023-09-24

Db2はmacOSをサポートしていないのだが、Dockerを使えばMac上でもDb2を動かすことができる。
M1 MacにDocker Desktopを導入し、Db2 Community Edition for Dockerを動かしてみたので、紹介する。

目次

はじめに
1. Docker Desktopの導入
2. Db2 for Dockerのダウンロードとコンテナ作成
3. Db2 for Dockerの使用
4. Docker Desktopの使用

はじめに

Db2にはDocker版があり、Db2 Community Edition for Docker (以下、Db2 for Docker) という。
Db2 for Dockerについては、以下に情報がある。
Db2 Community Edition for Docker
macOS上での導入手順はこちらに書かれている。
macOS システムへの Db2 Community Edition Docker イメージのインストール

まとめると、次の2ステップとなる。

  1. Docker Destopの導入
  2. Db2 for Dockerイメージのダウンロードとコンテナの作成

注意点は、Db2 for Dockerには、amd64, ppc64le (IBM Power System Little Endian Linux用), s390x (IBM Z, LinuxOne用)版しかないとことだ。
Mac M1/M2では、arm64用のDockerイメージが必要となるので、Db2 for Dockerを動かすことは出来なさそうだ。しかしこれは、docker pull, docker runコマンドで、--platformオプションをつけることにより解決できる。
以下に、M1 Mac上で、Docker Desktopを使用し、Db2 for Dockerを稼働させる手順をまとめる。

なお、この記事では以下の環境を使用している。
-Mac Book Pro 2020
チップ: Appl M1
メモリ: 8G
OS: macOS Ventura 13.5.1
-Db2 Community Edition for Docker
バージョン: 11.5.8 (記事執筆時点でのlatest)
アーキテクチャ: amd64

1. Docker Desktopの導入

以下の文書の手順に従い、Docker Desktopを導入する。
Docker Desktop の Mac へのインストール
image.png

(1). Rosetta 2のインストール
上記URLの「システム要件」で、「Apple siliconのMac」タブを確認すると、Rosetta 2の導入が推奨されているので、以下のようにRosetta 2をインストールする。

% softwareupdate --install-rosetta
I have read and agree to the terms of the software license agreement. A list of Apple SLAs may be found here: https://www.apple.com/legal/sla/
Type A and press return to agree: a
Install of Rosetta 2 finished successfully

(2). Docker Desktopのダウンロード
Docker DesktopのMacへのインストール画面より、「ApplチップのMac」を選んでダウンロード。

(3). Docker Desktopの導入
ダウンロード先のフォルダにあるDocker.dmgをクリック。
image.png
画面に従って、Dockerをアプリケーションにコピー。
スクリーンショット 2023-09-15 18.58.31.png
アプリケーションから、Dockerをダブルクリックして、起動。
「インターネットからダウンロードされたアプリケーションです。開いてもよろしいですか?」と聞かれるので、「開く」。
以下のDocker Subscription Service Terms(サブスクリプションサービス条件)画面が出るので、「Accept」。image.png
Docker Desktopアプリの構成について聞かれるので、どちらでもよいが、デフォルトのまま「Use recommended settings」を選択して、「Finish」を押す。
スクリーンショット 2023-09-15 19.13.36.png
Macのパスワードを聞かれるので、入れて進む。

以下のようにDockerへのサインインが求められるので、すでにDockerアカウントを持っていれば、サインインし、持っていなければ、登録する。
image.png

Docker Desktopが開始され、最初にチュートリアル画面などが出る。
image.png

(4). Dockerの稼働確認
ここで、導入されたDockerをターミナルから使用できることを確認する。
ターミナルを開き、Docker versionコマンドを実行してみる。

% docker version
Client:
 Cloud integration: v1.0.35+desktop.4
 Version:           24.0.6
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        ed223bc
 Built:             Mon Sep  4 12:28:49 2023
 OS/Arch:           darwin/arm64
 Context:           desktop-linux

Server: Docker Desktop 4.23.0 (120376)
 Engine:
  Version:          24.0.6
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.7
  Git commit:       1a79695
  Built:            Mon Sep  4 12:31:36 2023
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.6.22
  GitCommit:        8165feabfdfe38c65b599c4993d227328c231fca
 runc:
  Version:          1.1.8
  GitCommit:        v1.1.8-0-g82f18fe
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Docker Desktopが導入され、Dockerが使用できるようになった。

2. Db2 for Dockerのダウンロードとコンテナ作成

上述のマニュアルページ
macOS システムへの Db2 Community Edition Docker イメージのインストール
を参考にして進める。

(1). docker pull

docker pullコマンドを使用して、Db2 for Dockerイメージをダウンロードする。

docker pull platformオプションあり
% docker pull --platform=linux/amd64 icr.io/db2_community/db2 
Using default tag: latest
latest: Pulling from db2_community/db2
20270d11ada0: Pull complete 
c5eac4706f98: Pull complete 
6a61e43fbbe8: Pull complete 
1b76a59db2b7: Pull complete 
21e0bc77e537: Pull complete 
f0519f8d2d69: Pull complete 
2a8bfb7e103b: Pull complete 
7d9f144c10a5: Pull complete 
b9e3cafdc1f2: Pull complete 
bb7800c71111: Pull complete 
572de593c4f0: Pull complete 
b217e986c2dc: Pull complete 
Digest: sha256:9002c04b6c0f11e72531b6bb72f33119aaf25f965afb29d8951cfb4a2f5d715c
Status: Downloaded newer image for icr.io/db2_community/db2:latest
icr.io/db2_community/db2:latest

ポイントは、はじめに で述べたとおり、--platform=linux/amd64を付けること。
これをつけないと、arm64版をpullしようとするので、以下のようにエラーになる。

docker pull エラー
% docker pull --platform=linux/amd64 icr.io/db2_community/db2
Using default tag: latest
latest: Pulling from db2_community/db2
no matching manifest for linux/arm64/v8 in the manifest list entries

(2). docker run

先にdocker pullで入手したイメージを使い、docker runによってコンテナを作成して起動する。

(a). 環境変数の準備

docker run実行用の環境変数リストを作る。作らなくても、docker runのコマンドラインで必要な変数を渡してやれば起動できる。しかし、環境変数が多い場合は、作っておくほうが間違いが少ない。
viで環境変数ファイルを編集する。

% vi .env_list

以下の内容を記入する。

LICENSE=accept
DB2INSTANCE=db2i115
DB2INST1_PASSWORD=db2i115Pwd
DBNAME=
BLU=false
ENABLE_ORACLE_COMPATIBILITY=false
UPDATEAVAIL=NO
TO_CREATE_SAMPLEDB=false
REPODB=false
IS_OSXFS=true
PERSISTENT_HOME=true
HADR_ENABLED=false
ETCD_ENDPOINT=
ETCD_USERNAME=
ETCD_PASSWORD=

ここでは、必須または主要な変数のみ解説する。
LICENSE=accept(必須):ライセンスを受諾する。この通り書く。書かないと起動しない。
DB2INSTANCE=インスタンス名:コンテナ内に作成されるDb2のインスタンス名。デフォルトはdb2inst1
DB2INST1_PASSWORD=任意の文字列(必須):DB2INSTANCEで指定したインスタンス名のユーザー(つまり、インスタンスオーナー)のパスワードになる。インスタンス名が、db2inst1ではない場合も、環境変数名は、DB2INST1_PASSWORDを使う。
DBNAME=データベース名(任意):データベースを作成したい場合、そのDB名。指定しなければ、DBが作成されない。
TO_CREATE_SAMPLEDB=false:サンプルDBを作成するかどうか。
IS_OSXFS=true:macOSではtrue.
PERSISTENT_HOME=true:ホームディレクトリを永続ストレージとするか。
HADR_ENABLED=false:HADR高可用性構成をとるか。HADRを使用しない場合、ETCD_xxxの変数は設定不要。

この環境変数リストでは、起動時にデータベースを作らない設定としている。(DBNAME指定なし, TO_CREATE_SAMPLEDB=false)
Db2 dockerコンテナを初めて起動すると、まず、Db2インスタンスを作成し、データベースを作成しようとする。初期設定時間を短くして、さっと起動してもらいたいので、この時点でDBは作成しない。
DBはコンテナが起動したら、コンテナに入って後でDBを作成できる。

(b). ボリュームの準備

マニュアルでは、データベース等のコンテナデータを置く場所としてフォルダを作成し、docker run -vオプションで、これをコンテナ内の/databaseのマウントポイントとしている。しかし、あらかじめボリュームを作っておいたほうが、後で見てわかりやすいので、ここではボリュームを作る。
名前は任意だが、コンテナ名をdb2sererとする予定なので、ボリューム名をv_db2serverとしている。

% docker volume create v_db2server

作成したボリューム v_db2server の情報を確認する。

% docker volume inspect v_db2server
[
    {
        "CreatedAt": "2023-09-19T01:59:07Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/v_db2server/_data",
        "Name": "v_db2server",
        "Options": null,
        "Scope": "local"
    }
]

v_db2serverが/var/lib/docker/volumesの下に作成されている。

(c). docker runの実行

% docker run -itd -h db2server --name db2server --restart=always \
--privileged=true -p 50000:50000 --env-file .env_list \
-v v_db2server:/database --platform=linux/amd64 \
icr.io/db2_community/db2
dbd8738c4d29dc90a2ea5f10ea0e707c16f68c6a9d737d984c5153e5c6334d12
%

コンテナ名db2serverのコンテナを作成し、バックグラウンド(-d), 特権モード(--privileged=true)で実行させる。
-pはアサインするポートの番号を指定。
(a).環境変数の準備で作成した環境変数ファイル.env_listを、--env-fileオプションで与えている。
-vオプションで、(b).ボリュームの準備で作成したv_db2serverボリュームに、コンテナ内の/databaseディレクトリをマウントするよう指定している。
--platform=linux/amd64 を指定して、amd64版のイメージを起動させる。
バックグラウンドモードなので、docker runコマンドはすぐに終了するが、コンテナ内では、Db2インスタンスの作成が行われている。これにはしばらくかかるので、以下のコマンドを実行し、インスタンス作成終了を待つ。

docker logs -f db2server
(*) Previous setup has not been detected. Creating the users... 
(*) Creating users ...
(*) Creating instance ... 
DBI1446I  The db2icrt command is running.


DB2 installation is being initialized.

 Total number of tasks to be performed: 4 
Total estimated time for all tasks to be performed: 309 second(s) 

Task #1 start
Description: Setting default global profile registry variables 
Estimated time 1 second(s) 
Task #1 end 

Task #2 start
Description: Initializing instance list 
Estimated time 5 second(s) 
Task #2 end 

    :
    中略
    :

The execution completed successfully.

For more information see the DB2 installation log at "/tmp/db2icrt.log.237".
DBI1070I  Program db2icrt completed successfully.


(*) Fixing /etc/services file for DB2 ... 
09/19/2023 05:51:07     0   0   SQL1032N  No start database manager command was issued.
SQL1032N  No start database manager command was issued.  SQLSTATE=57019
(*) Cataloging existing databases
ls: cannot access '/database/data/db2i115/NODE0000': No such file or directory
(*) Applying Db2 license ...

LIC1402I  License added successfully.

    :
      中略
    :

DB2 State : Operable
DB2 has not been started
Starting DB2...

09/19/2023 05:52:18     0   0   SQL1063N  DB2START processing was successful.
SQL1063N  DB2START processing was successful.
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519 
(*) All databases are now active. 
(*) Setup has completed.

以下のメッセージが出ていれば、終了。

09/19/2023 05:52:18 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
() All databases are now active.
(
) Setup has completed.

3. Db2 for Dockerの使用

(1). Db2コンテナに入る

以下のコマンドで、Db2コンテナに入り、インスタンスオーナーにスイッチする。
ここでは、コンテナ名はdb2server、インスタンスオーナー名はdb2i115である。

% docker exec -it db2server /bin/bash
[root@db2server /]# su - db2i115
Last login: Tue Sep 19 07:19:18 UTC 2023
[db2i115@db2server ~]$ 

初期設定で、データベースを作らなかったので、Db2インスタンスは作成済み/起動済みで、DBは存在しない状態になっているはずである。状況を確認する。

[db2i115@db2server ~]$ db2start
09/19/2023 07:23:33     0   0   SQL1026N  The database manager is already active.
SQL1026N  The database manager is already active.
[db2i115@db2server ~]$ db2 list db directory
SQL1031N  The database directory cannot be found on the indicated file system. 
SQLSTATE=58031
[db2i115@db2server ~]$ 

db2startは、インスタンスを起動するコマンド。これに対して、"already active"起動中というメッセージが返される。
また、db2 list db directoryは、作成済みDBの一覧を表示するコマンドだが、現在はDBが無い。

(2). データベースの作成と操作

データベースが無いので、作成する。

[db2i115@db2server ~]$ db2 create db testdb
DB20000I  The CREATE DATABASE command completed successfully.

データベースに接続する。

[db2i115@db2server ~]$ db2 connect to testdb

   Database Connection Information

 Database server        = DB2/LINUXX8664 11.5.8.0
 SQL authorization ID   = DB2I115
 Local database alias   = TESTDB

[db2i115@db2server ~]$ 

表を作って、適当にデータを入れて、selectしてみる。

[db2i115@db2server ~]$ db2 "create table testtbl (id int not null, txt varchar(256))"
DB20000I  The SQL command completed successfully.
[db2i115@db2server ~]$ db2 "insert into testtbl values(1, 'コンテナ動いてます。')"
DB20000I  The SQL command completed successfully.
[db2i115@db2server ~]$ db2 "select * from testtbl"

ID          TXT             
----------- ----------------------------------------------------------
          1 コンテナ動いてます。                                                                            
  1 record(s) selected.

[db2i115@db2server ~]$ 

Db2の操作に不慣れな方は、以下のQuiita記事を参考にしてほしい。
はじめて使うDb2 - コマンドの実行、基本操作

(3). コンテナの再起動とデータの確認

先ほど投入したデータが永続しているか確認する。
まずは、コンテナから抜ける。

[db2i115@db2server ~]$ exit
logout
[root@db2server /]# exit
exit
% 

コンテナを停止する。

% docker stop db2server
db2server

コンテナを起動する。

% docker start db2server
db2server

コンテナに入る。

% docker exec -it db2server /bin/bash -c "su - db2i115"
Last login: Tue Sep 19 07:44:08 UTC 2023 on pts/0

(c). docker runの実行でコンテナを作成した際は、コンテナが立ち上がった時にはDb2インスタンスが起動された状態だった。docker startによるコンテナ起動時には、デフォルトではインスタンスが起動されていない状態で、コンテナが立ち上がる。
したがって、まずはインスタンスを起動する。

[db2i115@db2server ~]$ db2start
09/19/2023 07:44:52     0   0   SQL1063N  DB2START processing was successful.
SQL1063N  DB2START processing was successful.

(2).データベースの作成と操作で作成した表をselectし、データを確認する。

[db2i115@db2server ~]$ db2 connect to testdb

   Database Connection Information

 Database server        = DB2/LINUXX8664 11.5.8.0
 SQL authorization ID   = DB2I115
 Local database alias   = TESTDB

[db2i115@db2server ~]$ db2 "select * from testtbl"

ID          TXT                                       
----------- ----------------------------------------------------------
          1 コンテナ動いてます。                                                                        

  1 record(s) selected.

コンテナを停止/再起動してもデータは永続している。

4. Docker Desktopの使用

Dockerの操作はコマンドでできるが、せっかくDocker Desktopを導入したので、GUIでの操作をまとめておく。
Macのアプリケーション、または、Dockから、Docker Desktopを起動する。Dockerダッシュボードの画面が表示されるので、ここからコンテナ、イメージ、ボリュームの状況確認や簡単な操作を行うことができる。

(1). イメージの確認

イメージ画面から、docker pullで入手したdockerイメージを確認できる。
スクリーンショット 2023-09-19 17.01.46.png
ここでは、db2のdockerイメージがリストされている。amd64版であることを示す赤い表示がある。

(2). コンテナの確認と操作

コンテナ画面では、コンテナの稼働状況が表示され、コンテナの操作も可能である。
image.png
コンテナ名の行のActions列のボタンは、起動中は四角ボタン、停止中は三角になっているが、このボタンによりコンテナの起動<->停止ができる。
右端のゴミ箱ボタンを押すことにより、コンテナを削除できる。
コンテナ名をクリックすると、コンテナの詳細情報が表示される。
以下の画面は、Logs画面であるが、docker logsコマンドと同様にコンテナのログ情報を参照できる。
image.png
また、Exec画面では、docker execでコンテナに入るのと同じように、コンテナ内のコマンド実行が可能である。

(3). ボリュームの確認と操作

Volumes画面では、ボリュームの作成、削除、情報の表示ができる。
以下では、v_db2serverボリュームが表示されている。
image.png
ボリューム名をクリックすると、以下の様にボリューム内のディレクトリやファイル内容を参照することができる。
image.png

ここまで、Mac上で、Docker Desktopを使用し、Db2 for Dockerを起動する方法をご紹介した。

以上

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