背景
我们的oracle服务端是oracle12g版本,应用程序均由golang或者python编写,运行在k8s 容器里,那我们就需要build一些docker容器来,那如何build呢?可以参考以下我的方法。文章最后有我编写过程中的参考文章,也可以根据参考文章自己创新。
玩法1:参考oracle官方文档制作
1.下载代码https://github.com/oracle/docker-images.git 到本地
2.进入OracleInstantClient/oraclelinux8/21/目录,该目录下有一个原始的dockerfile文件,可以使用该文件build一个基础镜像,例如
docker build --pull -t oracle/instantclient:21 .
使用build出来的这个oracle/instantclient:21镜像可以二次进行dockerfile编辑加入golang或者python。
也可以用这个oracle/instantclient:21来测试一下oracle数据库是否能正常连接。测试连接命令如下:
docker run -ti --rm oracle/instantclient:21 sqlplus 用户名/密码@数据库IP:数据库端口/数据库名
玩法2:从debian开始制作一个镜像
除了上面的方法外,我们还可以从debian开始制作一个包含python的镜像
1.进入oracle客户端下载页https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
2.下载https://download.oracle.com/otn_software/linux/instantclient/218000/instantclient-basic-linux.x64-21.8.0.0.0dbru.zip到本地,如下图
3.编写Dockerfile,以debian+oracle+python举例
FROM debian:11-slim
LABEL maintainer="zhenwei.li <zhenwei.li@sfere-elec.com>"
RUN set -eux \
&& sed -i "s@http://ftp.debian.org@https://repo.huaweicloud.com@g" /etc/apt/sources.list \
&& sed -i "s@http://security.debian.org@https://repo.huaweicloud.com@g" /etc/apt/sources.list \
&& apt-get update \
&& apt-get install -y -q libaio1 unzip python3 pip
&& pip install cx_Oracle
# 清理垃圾
RUN set -eux \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /tmp/*
ENV TZ=Asia/Shanghai \
DEBIAN_FRONTEND=noninteractive
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo ${TZ} > /etc/timezone \
&& dpkg-reconfigure --frontend noninteractive tzdata \
&& rm -rf /var/lib/apt/lists/*
COPY instantclient-basic-linux.x64-21.8.0.0.0dbru.zip /opt/oracle/instantclient-basic-linux.x64-21.8.0.0.0dbru.zip
WORKDIR /opt/oracle/
RUN unzip instantclient-basic-linux.x64-21.8.0.0.0dbru.zip
RUN sh -c "echo /opt/oracle/instantclient_21_8 > /etc/ld.so.conf.d/oracle-instantclient.conf"
RUN ldconfig
RUN useradd sfere
4. 目录下放Dockerfile和oracle客户端zip包
5. 制作镜像
docker build -t debian-oracle .
6.运行镜像,测试python连接oracle服务端可行,依次输入如下命令
docker run -ti --rm debian-oracle python
import cx_Oracle as cx
con = cx.connect('用户名', '密码', '数据库IP:数据库端口/数据库名')
参考文章
https://github.com/oracle/docker-images/tree/main/OracleInstantClient
https://csiandal.medium.com/install-oracle-instant-client-on-ubuntu-4ffc8fdfda08