我的docker随笔33:在容器中连接oracle数据库
Posted 李迟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的docker随笔33:在容器中连接oracle数据库相关的知识,希望对你有一定的参考价值。
本文涉及一种在容器中连接 oracle 数据库的方法和步骤,最后给出测试结果。至于使用程序的方式连接,则是后续要实施的工作。
一、引言
之前在 Windows 实现了连接 oracle 数据库,本次尝试在 docker 容器中连接数据库,这样,正在用 Golang 开发软件就可在 Windows 和 Linux 上运行了,部署和使用都方便。
二、技术小结
- 下载 oci 压缩包
- 解压 oci 包,并设置连接参数
- 进入容器连接数据库
三、实践过程
3.1 linux OCI下载
登录官方下载地址:https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html , 需登录才能下载。包名称及校验码如下:
$ cksum *
109893216 63352239 instantclient-basic-linux.x64-12.1.0.2.0.zip
1824795072 1289004 instantclient-odbc-linux.x64-12.1.0.2.0.zip
1047596065 667174 instantclient-sdk-linux.x64-12.1.0.2.0.zip
2255047856 861284 instantclient-sqlplus-linux.x64-12.1.0.2.0.zip
3.2 oci安装
将 oci 压缩包拷贝到/home/latelee/tools/oracle/
,解压:
unzip instantclient-basic-linux.x64-12.1.0.2.0.zip
unzip instantclient-odbc-linux.x64-12.1.0.2.0.zip
unzip instantclient-sdk-linux.x64-12.1.0.2.0.zip
unzip instantclient-sqlplus-linux.x64-12.1.0.2.0.zip
解压后得到目录目录为instantclient_12_1
,在该目录创建文件tnsnames.ora
,内容如下:
foo =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.18.18)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = mydb)
)
)
oracle_test =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.18.18)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCLCDB)
)
)
注:根据实际情况修改 oracle_test(表示链接名)、HOST(主机)、PORT(端口)、SERVICE_NAME(数据库服务名)三字段值。
文中将 oci 存储到目录/home/latelee/tools/oracle/instantclient_12_1
,是为了方便多个容器映射使用。当然也可以将 oci 的文件放到 docker 镜像中,但笔者认为不太好,故不采用。
3.2 在容器中验证
在主机中拷贝依赖库,本文中使用的sqlplus
依赖于动态库libaio.so.1
:
sudo cp /lib64/libaio.so.1.0.1 /home/latelee/tools/oracle/instantclient_12_1
cd /home/latelee/tools/oracle/instantclient_12_1
sudo ln -s libaio.so.1 libaio.so.1.0.1
注意,也可将动态库单独拷贝至一 lib 目录,再进行映射,本文图方便直接放到 oci 目录了。
使用 latelee/ubuntu
进行实验。进入容器:
docker run -it --rm -v /home/latelee/tools/oracle/instantclient_12_1:/work/instantclient_12_1 --name foo latelee/ubuntu bash
在容器中设置环境变量:
export ORACLE_HOME=/work/instantclient_12_1
export TNS_ADMIN=$ORACLE_HOME
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/work/instantclient_12_1
在容器中进入/work/instantclient_12_1
目录,执行命令:
./sqlplus my_db/123456@oracle_test
提示:
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
表示连接成功。
后续将使用 golang 实现程序方式的连接。
以上是关于我的docker随笔33:在容器中连接oracle数据库的主要内容,如果未能解决你的问题,请参考以下文章