如何制作 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 即可

posted @ 2022-07-01 16:56  不是豆豆  阅读(162)  评论(0编辑  收藏  举报
友情链接:迷途