1. 获取镜像

  1. # 查看可用的稳定版本
  2. docker search db2
  3. docker pull ibmcom/db2express-c
  4. docker pull zongqiang/db2v10.5expc
  5. docker image ls |grep db2

2. 启动容器

  1. # 持久化
  2. mkdir -p /tmp/db2
  3. rm -rf /tmp/db2/*
  4. # 构建并启动容器
  5. docker run -d --name db2 -it -p 50000:50000 -e DB2INST1_PASSWORD=db2inst1psss -e LICENSE=accept -v /tmp/db2:/db2data ibmcom/db2express-c bash
  6. # 启动容器
  7. docker start db2
  8. # 停止容器
  9. docker stop db2
  10. # 删除容器
  11. docker rm db2
  12. # 查看容器状态
  13. docker ps | grep db2
  14. # 查看db2端口
  15. netstat -an | grep 50000
  16. # 进入db2客户端
  17. docker exec -it db2 bash

3. 容器操作

1. 常用操作

  • 切换实例用户

    1. su - db2inst1
  • 启动实例

    1. db2start
  • 关闭实例

    1. db2stop
  • 查看运行状态

    1. db2pd -
  • 查看数据库列表

    1. db2 list db directory
  • 查看数据库信息(补丁版本)

    1. db2level
  • 查看挂载

    1. df -h

    2. 创建数据库

  • 设置目录权限

    1. # 容器root用户下执行
    2. chmod 777 /db2data
  • 创建相关目录

    1. su - db2inst1
    2. cd /db2data
    3. mkdir dbpath log data
  • 查看缺省的dbpath

    1. db2 get dbm cfg| grep -i dbpath
  • 创建用户数据库

    1. db2start
    2. db2 "create db deskdb on /db2data/data dbpath on /db2data/dbpath using codeset utf-8 territory cn"

    注意:数据库名称不能超过8位!!!

  • 修改日志路径

    1. db2 update db cfg for deskdb using newlogpath /db2data/log
  • 激活数据库

    1. db2 activate db deskdb
  • 确认日志生效

    1. cd /db2data/log
    2. ls /db2data/log/NODE*/LOGSTREAM*
    3. db2 get db cfg for deskdb | grep -i primary
  • catalog

由于容器是静态的,所以每次重启容器之后都需要做catalog,否则无法访问数据库。

  1. db2 catalog db deskdb as deskdb on /db2data/dbpath
  2. db2 connect to deskdb

3. 设置数据库密码

  • 创建数据库用户

    1. # 容器root用户
    2. groupadd -g 994 db2odesk
  • 分配权限

    1. useradd -g db2odesk -u 894 -d /home/db2odesk -m -s /bin/sh db2odesk
  • 设置密码(db2odesk/531.Desk

    1. passwd db2odesk
  • 数据库用户权限赋值

    1. su - db2inst1
    2. db2 connect to deskdb
    3. db2start
    4. db2 grant dbadm on database to group db2odesk
  • root权限赋值

    1. # 切换到容器root用户
    2. vi /etc/group
    3. db2iadm1:x:1000:db2inst1,root
    4. db2inst1:x:1001:root
    5. db2odesk:x:994:root

    4. 表空间管理

  • 查看表空间

    1. su - db2inst1
    2. db2 connect to deskdb
    3. db2start
    4. db2 list tablespaces show detail
  • 创建表空间

    1. # 创建表空间(默认)
    2. db2 create tablespace TBS_OTH_DAT managed by automatic storage
    3. db2 create tablespace TBS_OTH_IDX managed by automatic storage
    4. # 删除表空间
    5. db2 drop tablespace TBS_OTH_DAT
    6. db2 drop tablespace TBS_OTH_IDX
  • 扩展页大小

    1. db2 create bufferpool bp16k size 1000 pagesize 16k
    2. # 先删除之前创建的表空间
    3. db2 "create tablespace TBS_OTH_DAT pagesize 16k managed by database using(file '/home/db2inst1/TBS_OTH_DAT' 10000) bufferpool bp16k"
    4. db2 "create tablespace TBS_OTH_IDX pagesize 16k managed by database using(file '/home/db2inst1/TBS_OTH_IDX' 10000) bufferpool bp16k"
    5. db2 "create TEMPORARY tablespace TBS_TEMP pagesize 16k managed by database using(file '/home/db2inst1/TBS_TEMP' 10000) bufferpool bp16k"

    5. 删除数据库

    1. su - db2inst1
    2. # 断开所有连接
    3. db2 connect reset
    4. # 删除数据库
    5. db2 drop database deskdb

    6. 保存镜像

    1. docker commit db2 ibmcom/db2express-c-my
    2. docker images | grep db2
    3. # 保存catalog db的信息,以便每次重启容器后可以直接访问数据库
    4. docker save ibmcom/db2express-c-my > /share/ibm-db2express-c-my.tar

    保存为新的镜像之后,即可使用新的镜像创建容器,或者上传至镜像仓库供他人使用。

    1. docker stop db2
    2. docker rm db2
    3. docker run -d --name db2 -it --network=host -p 50000:50000 -e DB2INST1_PASSWORD=db2inst1psss -e LICENSE=accept -v /tmp/db2:/db2data ibmcom/db2express-c-my:latest db2start

    4. 编目

    1. # DB2编目也可以使用db2控制中心配置(db2ca,本地需安装DB2客户端并开启服务)
    2. db2 catalog tcpip node mydeskdb remote 192.168.0.99 server 50000
    3. db2 catalog db deskdb as DESKTEST at node mydeskdb

    5. 验证

    1. 进入终端

    1. docker exec -it db2 bash
    2. su - db2inst1
    3. db2start
    4. db2 connect to deskdb
    5. db2 connect to deskdb user db2odesk using 531.Desk

    2. 查看库表

    1. # 查看有哪些数据库
    2. db2 list db directory
    3. # 查看有哪些用户表
    4. # 默认模式下(DB2ODESK)
    5. db2 list tables
    6. # 指定模式下
    7. db2 list tables for schema BASE
    8. # 查看表结构
    9. db2 describe table BASE.SINK_AIQACHS
    10. # 取前n行数据
    11. db2 "select * from BASE.SINK_AIQACHS fetch first 10 rows only"

    3. 创建库表

    1. -- 清理库表
    2. DROP TABLE BASE.SINK_AIQACHS;
    3. -- 创建库表
    4. CREATE TABLE BASE.SINK_AIQACHS (
    5. aco_ac VARCHAR(32) NOT NULL,
    6. cus_ac VARCHAR(32),
    7. ac_nme VARCHAR(64),
    8. stl_typ VARCHAR(128),
    9. sac_typ VARCHAR(128)
    10. )in TBS_OTH_DAT;
    11. -- 设置主键
    12. alter table BASE.SINK_AIQACHS add constraint aco_ac_pk primary key(aco_ac);

    4. 查看日志

    1. # 容器日志查看
    2. docker logs db2
    3. docker logs -f -t --tail=50 db2

    5. 重命名表名

    1. # 注意to后面的名称不能带模式名
    2. db2 rename table BASE.SINK_AIQACHS to SINK_AIQACHS_NEW

    6. 执行脚本

    1. db2 -tvf db2.sql

    7. 导出表结构

    1. db2look -d deskdb -t BASE.SINK_AIQACHS -e -o BASE.SINK_AIQACHS.sql

    参考

    CSDN:Docker安装DB2
    https://blog.csdn.net/qq_37986734/article/details/91456701
    CSDN:如何在Docker环境中使用DB2
    https://blog.csdn.net/qq_39154147/article/details/79219414
    博客园:Docker安装DB2数据库
    https://www.cnblogs.com/djlsunshine/p/12060224.html