DB2DBA:尝试在Docker上运行Db2


其他人已经写过一篇类似的文章,但是自从官方存储库于2019年夏天转移以来,我将更新信息。我还尝试了一些额外的材料。

启动Db2容器

遵循官方存储库中提供的步骤。

码头工人pull

ibmcom / db2中拉出Db2 Developer-C映像。最新版本为Db2 11.5.0.0a,大小约为3GB。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
alpine39:~$ docker pull ibmcom/db2
Using default tag: latest
latest: Pulling from ibmcom/db2
ac9208207ada: Pull complete
db3b974ae005: Pull complete
8b476cfca586: Pull complete
a033f87212a0: Pull complete
6062ba253339: Pull complete
53d54ba98754: Pull complete
8113895a570d: Pull complete
Digest: sha256:e7055e4ee436e3659fbaafdc8c7fe1088f79658ba851024da68ab4e181085f58
Status: Downloaded newer image for ibmcom/db2:latest
alpine39:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ibmcom/db2          latest              66a976f94954        3 months ago        2.96GB

docker run

1
alpine39:~$ docker run -itd --name mydb2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=$DB2_PASS -e DBNAME=testdb -v $HOME/db2:/database ibmcom/db2

开始确认

docker logs检查以下消息。

1
2
alpine39:~$ docker logs -f mydb2 | grep Setup
(*) Setup has completed.

登录到Db2容器

1
2
3
4
5
6
7
8
9
alpine39:~$ docker exec -ti mydb2 bash -c "su - db2inst1"
Last login: Tue Oct 15 20:24:11 UTC 2019
[db2inst1@083d58c4beb1 ~]$ db2 connect to testdb

   Database Connection Information

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

我能够非常轻松地构建Db2环境。您不必担心每个Linux发行版都需要安装不同的软件包。

奖金

以非特权模式启动

根据构建和部署Db2 Docker容器时的注意事项,可以仅在??ipc=host ??cap?add=IPC_OWNER上运行,而不是授予--privileged=true的所有特权。我能够确认可以从启动执行SQL。

1
alpine39:~$ docker run -itd --name mydb2 ??ipc=host ??cap?add=IPC_OWNER -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=$DB2_PASS -e DBNAME=testdb -v $HOME/db2:/database ibmcom/db2

创建自定义图像

在Db2设置之后,将shell脚本放在

/ var / custom中将自动执行它,这在基于ibmcom / db2创建定制映像时非常有用。

创建一个shell脚本

让我们运行DIAGLEVEL更改脚本。该脚本似乎以root用户身份在容器内运行。可以按以下方式传递docker run设置的变量。

1
2
3
4
5
6
7
8
#!/bin/bash
. /database/config/db2inst1/sqllib/db2profile

db2 "attach to db2inst1 user db2inst1 using $DB2INST1_PASSWORD"
db2 "get dbm cfg" | grep -i diaglevel
db2 "update dbm cfg using diaglevel 4"
db2 "get dbm cfg" | grep -i diaglevel
db2 "detach"

创建一个Dockerfile

1
2
3
4
5
FROM ibmcom/db2

RUN mkdir /var/custom
COPY dbmcfg.sh /var/custom
RUN chmod a+x /var/custom/dbmcfg.sh

建立自订图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
alpine39:~$ docker build -t svc34/db2 .
Sending build context to Docker daemon  17.92kB
Step 1/4 : FROM ibmcom/db2
 ---> 66a976f94954
Step 2/4 : RUN mkdir /var/custom
 ---> Using cache
 ---> 3d657013dcb4
Step 3/4 : COPY dbmcfg.sh /var/custom
 ---> 085cacb0945c
Step 4/4 : RUN chmod a+x /var/custom/dbmcfg.sh
 ---> Running in 2273bc79988d
Removing intermediate container 2273bc79988d
 ---> 23d2cc871f34
Successfully built 23d2cc871f34
Successfully tagged svc34/db2:latest

从自定义映像启动

1
docker run -itd --name svc34db2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=$DB2_PASS -v $HOME/db2:/database svc34/db2

检查脚本执行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
alpine39:~$ docker logs svc34db2

(*) Running dbmcfg.sh ...

   Instance Attachment Information

 Instance server        = DB2/LINUXX8664 11.5.0.0
 Authorization ID       = DB2INST1
 Local instance alias   = DB2INST1

 Diagnostic error capture level              (DIAGLEVEL) = 3
DB20000I  The UPDATE DATABASE MANAGER CONFIGURATION command completed
successfully.
 Diagnostic error capture level              (DIAGLEVEL) = 4
DB20000I  The DETACH command completed successfully.

设置在设置后已更改。

许可证变更

Db2 Docker映像是在社区许可证下提供的,但也可以通过应用许可证文件以标准版或高级版运行。

Db2 11.5.0.0a开始,Docker映像中包含一个90天的试用许可证文件,因此让我们这次使用它。

更改前许可

设置了内存,内核数和表空间大小限制。

1
2
3
4
5
6
7
8
9
[db2inst1@083d58c4beb1 ~]$ db2licm -l
Product name:                     "IBM DB2 Developer-C Edition"
License type:                     "Community"
Expiry date:                      "Permanent"
Product identifier:               "db2dec"
Version information:              "11.5"
Max amount of memory (GB):        "16"
Max number of cores:              "4"
Max amount of table space (GB):   "100"

许可证文件更改

应用随附的试用许可证文件。

1
2
3
4
5
6
7
8
9
10
11
alpine39:~$ docker exec -ti mydb2 bash -c "/opt/ibm/db2/V11.5/adm/db2licm -r db2dec && /opt/ibm/db2/V11.5/adm/db2licm -a /var/db2/db2trial.lic"

LIC1403I  License removed successfully.


LIC1427I  This product is now licensed for use as outlined in your License Agreement.  USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT, LOCATED IN THE FOLLOWING DIRECTORY: "/opt/ibm/db2/V11.5/license/en_US.iso88591"

LIC1402I  License added successfully.


LIC1426I  This product is now licensed for use as outlined in your License Agreement.  USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT, LOCATED IN THE FOLLOWING DIRECTORY: "/opt/ibm/db2/V11.5/license/en_US.iso88591"

修改后的许可证

对内存,内核数或表空间大小没有限制,并且设置了到期日期。

1
2
3
4
5
6
[db2inst1@083d58c4beb1 ~]$ db2licm -l
Product name:                     "DB2 Advanced Enterprise Server Edition"
License type:                     "Trial"
Expiry date:                      "01/12/2020"
Product identifier:               "db2aese"
Version information:              "11.5"

参考资料

  • ibmcom / db2
  • 构建和部署Db2 Docker容器时要考虑的事项