如何制作 SQL*Plus 的 docker 镜像
因为需要在 linux ssh 远程中访问数据库,不能直接使用 SQL Developer 图形化访问操作
找了一下 oracle 在 linux 下的命令行工具,发现官方有一个 SQL*Plus 可以使用,它似乎是集成在了 Instant Client 中
下载地址:https://www.oracle.com/database/technologies/instant-client/downloads.html
为了贯彻使用 docker,故又找了一下有没有相关镜像,找到一个不再维护的项目:
https://github.com/sflyr/docker-sqlplus
虽然用是可以用,但是会出现中文乱码的问题,故又参考其思路重新设计打包了镜像
1、在上述下载地址中,下载到对应架构系统以及对应工具功能的 zip 包,这里以 Linux x86-64 为例
2、解压压缩包,所有内容会被统一解压到 instantclient_版本号 目录中:
unzip instantclient-basic-linux.x64-21.6.0.0.0dbru.zip unzip instantclient-jdbc-linux.x64-21.6.0.0.0dbru.zip unzip instantclient-odbc-linux.x64-21.6.0.0.0dbru.zip unzip instantclient-sdk-linux.x64-21.6.0.0.0dbru.zip unzip instantclient-sqlplus-linux.x64-21.6.0.0.0dbru.zip unzip instantclient-tools-linux.x64-21.6.0.0.0dbru.zip
3、编写 Dockerfile 文件
FROM ubuntu # 替换默认源为阿里云 RUN sed -i -r 's#http://(archive|security).ubuntu.com#http://mirrors.aliyun.com#g' /etc/apt/sources.list && apt-get update # 安装必要依赖 RUN apt-get -y update RUN apt-get -y install libaio1 unzip # 复制文件 COPY ./instantclient_21_6 /instantclient_21_6 # 配置命令 ENV PATH=/instantclient_21_6:$PATH ENV LD_LIBRARY_PATH=/instantclient_21_6 # 配置编码 ENV LANG zh_CN.UTF8 ENV NLS_LANG AMERICAN_AMERICA.AL32UTF8 # 默认运行命令行 CMD bin/bash
4、构建镜像
docker build -t xxx/sqlplus:21.6 .
5、运行镜像(即用即删)
docker run --rm -it xxx/sqlplus:21.6
6、运行镜像后,可以使用命令运行 SQL*Plus 并连接至指定数据库:
sqlplus <user>/<password>@//xxx.yyy.com:1521/ORCL
7、如果发现查询中文或其它字符仍然乱码,可以通过 SQL 查询当前数据库的 NLS_LANG 进行修改
SELECT USERENV ('language') FROM DUAL;
参考:https://blog.csdn.net/pan_tian/article/details/7745717
退出 sqlplus 后,执行修改系统环境变量
export LANG=zh_CN.UTF8
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
再次运行 sqlplus 即可
输了你,赢了世界又如何...