diff --git a/.github/workflows/contributed-recipes.yml b/.github/workflows/contributed-recipes.yml index 511b0b38..ce548c6a 100644 --- a/.github/workflows/contributed-recipes.yml +++ b/.github/workflows/contributed-recipes.yml @@ -47,6 +47,7 @@ jobs: mamba_install.dockerfile, manpage_install.dockerfile, microsoft_odbc.dockerfile, + oracledb.dockerfile, pip_install.dockerfile, rise_jupyterlab.dockerfile, spellcheck_notebookv6.dockerfile, diff --git a/docs/using/recipe_code/oracledb.dockerfile b/docs/using/recipe_code/oracledb.dockerfile new file mode 100644 index 00000000..635880a7 --- /dev/null +++ b/docs/using/recipe_code/oracledb.dockerfile @@ -0,0 +1,54 @@ +FROM jupyter/base-notebook + +USER root + +# Install java, javac and alien +RUN apt-get update --yes && \ + apt-get install --yes --no-install-recommends software-properties-common && \ + add-apt-repository universe && \ + apt-get update --yes && \ + apt-get install --yes --no-install-recommends alien default-jre default-jdk openjdk-11-jdk libaio1 && \ + apt-get clean && rm -rf /var/lib/apt/lists/* + +ARG instantclient_major_version=21 +ARG instantclient_version=${instantclient_major_version}.11.0.0.0-1 +ARG instantclient_url=https://download.oracle.com/otn_software/linux/instantclient/2111000 + +# Then install Oracle SQL Instant client, SQL+Plus, tools and JDBC. +# Note: You may need to change the URL to a newer version. +# See: https://www.oracle.com/es/database/technologies/instant-client/linux-x86-64-downloads.html +WORKDIR "/tmp" +RUN wget --progress=dot:giga ${instantclient_url}/oracle-instantclient-basiclite-${instantclient_version}.el8.x86_64.rpm && \ + alien --install --scripts oracle-instantclient-basiclite-${instantclient_version}.el8.x86_64.rpm && \ + wget --progress=dot:giga ${instantclient_url}/oracle-instantclient-sqlplus-${instantclient_version}.el8.x86_64.rpm && \ + alien --install --scripts oracle-instantclient-sqlplus-${instantclient_version}.el8.x86_64.rpm && \ + wget --progress=dot:giga ${instantclient_url}/oracle-instantclient-tools-${instantclient_version}.el8.x86_64.rpm && \ + alien --install --scripts oracle-instantclient-tools-${instantclient_version}.el8.x86_64.rpm && \ + wget --progress=dot:giga ${instantclient_url}/oracle-instantclient-jdbc-${instantclient_version}.el8.x86_64.rpm && \ + alien --install --scripts oracle-instantclient-jdbc-${instantclient_version}.el8.x86_64.rpm && \ + chown -R "${NB_UID}":"${NB_GID}" "${HOME}/.rpmdb" && \ + rm -f ./*.rpm + +# Configure environment +ENV ORACLE_HOME=/usr/lib/oracle/${instantclient_major_version}/client64 +ENV PATH="${ORACLE_HOME}/bin:${PATH}" +ENV LD_LIBRARY_PATH="${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}" + +# (Optional) Add credentials for the Oracle Database server; files must be present on your `docker build PATH` folder. +WORKDIR /usr/lib/oracle/${instantclient_major_version}/client64/lib/network/admin +# Adding a wildcard `[]` on the last letter of the filename to avoid throwing an error if the file does not exist. +# See: https://stackoverflow.com/questions/31528384/conditional-copy-add-in-dockerfile +COPY cwallet.ss[o] ./ +COPY sqlnet.or[a] ./ +COPY tnsnames.or[a] ./ + +# Switch back to jovyan to avoid accidental container runs as root +USER "${NB_UID}" + +WORKDIR "${HOME}" + +# Install `oracledb` Python library to use Oracle SQL Instant Client +RUN mamba install --yes 'oracledb' && \ + mamba clean --all -f -y && \ + fix-permissions "${CONDA_DIR}" && \ + fix-permissions "/home/${NB_USER}" diff --git a/docs/using/recipes.md b/docs/using/recipes.md index 2da905b0..507e374e 100644 --- a/docs/using/recipes.md +++ b/docs/using/recipes.md @@ -499,3 +499,17 @@ The following recipe demonstrates how to add functionality to read from and writ You can now use `pyodbc` and `sqlalchemy` to interact with the database. Pre-built images are hosted in the [realiserad/jupyter-docker-mssql](https://github.com/Realiserad/jupyter-docker-mssql) repository. + +## Add Oracle SQL Instant client, SQL\*Plus and other tools (Version 21.x) + +The following recipe demonstrates how to add functionality to connect to a Oracle Database using [Oracle Instant Client](https://www.oracle.com/database/technologies/instant-client.html) +in your notebook. +This recipe installs version `21.11.0.0.0`. + +Nonetheless, go to the [Oracle Instant Client Download page](https://www.oracle.com/es/database/technologies/instant-client/linux-x86-64-downloads.html) for the complete list of versions available. +You may need to perform different steps for older versions; +the may be explained on the "Installation instructions" section of the Downloads page. + +```{literalinclude} recipe_code/oracledb.dockerfile +:language: docker +```