1. 获取镜像
# 查看可用的稳定版本docker search db2docker pull ibmcom/db2express-cdocker pull zongqiang/db2v10.5expcdocker image ls |grep db2
2. 启动容器
# 持久化mkdir -p /tmp/db2rm -rf /tmp/db2/*# 构建并启动容器docker run -d --name db2 -it -p 50000:50000 -e DB2INST1_PASSWORD=db2inst1psss -e LICENSE=accept -v /tmp/db2:/db2data ibmcom/db2express-c bash# 启动容器docker start db2# 停止容器docker stop db2# 删除容器docker rm db2# 查看容器状态docker ps | grep db2# 查看db2端口netstat -an | grep 50000# 进入db2客户端docker exec -it db2 bash
3. 容器操作
1. 常用操作
切换实例用户
su - db2inst1
启动实例
db2start
关闭实例
db2stop
查看运行状态
db2pd -
查看数据库列表
db2 list db directory
查看数据库信息(补丁版本)
db2level
查看挂载
df -h
2. 创建数据库
设置目录权限
# 容器root用户下执行chmod 777 /db2data
创建相关目录
su - db2inst1cd /db2datamkdir dbpath log data
查看缺省的dbpath
db2 get dbm cfg| grep -i dbpath
创建用户数据库
db2startdb2 "create db deskdb on /db2data/data dbpath on /db2data/dbpath using codeset utf-8 territory cn"
注意:数据库名称不能超过8位!!!
修改日志路径
db2 update db cfg for deskdb using newlogpath /db2data/log
激活数据库
db2 activate db deskdb
确认日志生效
cd /db2data/logls /db2data/log/NODE*/LOGSTREAM*db2 get db cfg for deskdb | grep -i primary
catalog
由于容器是静态的,所以每次重启容器之后都需要做catalog,否则无法访问数据库。
db2 catalog db deskdb as deskdb on /db2data/dbpathdb2 connect to deskdb
3. 设置数据库密码
创建数据库用户
# 容器root用户groupadd -g 994 db2odesk
分配权限
useradd -g db2odesk -u 894 -d /home/db2odesk -m -s /bin/sh db2odesk
设置密码(db2odesk/531.Desk)
passwd db2odesk
数据库用户权限赋值
su - db2inst1db2 connect to deskdbdb2startdb2 grant dbadm on database to group db2odesk
root权限赋值
# 切换到容器root用户vi /etc/groupdb2iadm1:x:1000:db2inst1,rootdb2inst1:x:1001:rootdb2odesk:x:994:root
4. 表空间管理
查看表空间
su - db2inst1db2 connect to deskdbdb2startdb2 list tablespaces show detail
创建表空间
# 创建表空间(默认)db2 create tablespace TBS_OTH_DAT managed by automatic storagedb2 create tablespace TBS_OTH_IDX managed by automatic storage# 删除表空间db2 drop tablespace TBS_OTH_DATdb2 drop tablespace TBS_OTH_IDX
扩展页大小
db2 create bufferpool bp16k size 1000 pagesize 16k# 先删除之前创建的表空间db2 "create tablespace TBS_OTH_DAT pagesize 16k managed by database using(file '/home/db2inst1/TBS_OTH_DAT' 10000) bufferpool bp16k"db2 "create tablespace TBS_OTH_IDX pagesize 16k managed by database using(file '/home/db2inst1/TBS_OTH_IDX' 10000) bufferpool bp16k"db2 "create TEMPORARY tablespace TBS_TEMP pagesize 16k managed by database using(file '/home/db2inst1/TBS_TEMP' 10000) bufferpool bp16k"
5. 删除数据库
su - db2inst1# 断开所有连接db2 connect reset# 删除数据库db2 drop database deskdb
6. 保存镜像
docker commit db2 ibmcom/db2express-c-mydocker images | grep db2# 保存catalog db的信息,以便每次重启容器后可以直接访问数据库docker save ibmcom/db2express-c-my > /share/ibm-db2express-c-my.tar
保存为新的镜像之后,即可使用新的镜像创建容器,或者上传至镜像仓库供他人使用。
docker stop db2docker rm db2docker 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. 编目
# DB2编目也可以使用db2控制中心配置(db2ca,本地需安装DB2客户端并开启服务)db2 catalog tcpip node mydeskdb remote 192.168.0.99 server 50000db2 catalog db deskdb as DESKTEST at node mydeskdb
5. 验证
1. 进入终端
docker exec -it db2 bashsu - db2inst1db2startdb2 connect to deskdbdb2 connect to deskdb user db2odesk using 531.Desk
2. 查看库表
# 查看有哪些数据库db2 list db directory# 查看有哪些用户表# 默认模式下(DB2ODESK)db2 list tables# 指定模式下db2 list tables for schema BASE# 查看表结构db2 describe table BASE.SINK_AIQACHS# 取前n行数据db2 "select * from BASE.SINK_AIQACHS fetch first 10 rows only"
3. 创建库表
-- 清理库表DROP TABLE BASE.SINK_AIQACHS;-- 创建库表CREATE TABLE BASE.SINK_AIQACHS (aco_ac VARCHAR(32) NOT NULL,cus_ac VARCHAR(32),ac_nme VARCHAR(64),stl_typ VARCHAR(128),sac_typ VARCHAR(128))in TBS_OTH_DAT;-- 设置主键alter table BASE.SINK_AIQACHS add constraint aco_ac_pk primary key(aco_ac);
4. 查看日志
# 容器日志查看docker logs db2docker logs -f -t --tail=50 db2
5. 重命名表名
# 注意to后面的名称不能带模式名db2 rename table BASE.SINK_AIQACHS to SINK_AIQACHS_NEW
6. 执行脚本
db2 -tvf db2.sql
7. 导出表结构
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
