From ed502db5ec737c696b3d3d6e95aeaacc52e887d5 Mon Sep 17 00:00:00 2001 From: Scott Morken Date: Fri, 6 Mar 2026 12:00:07 -0700 Subject: [PATCH] Add oci8 layer for Bref 3 --- Readme.md | 2 +- layers/oci8/Dockerfile | 84 ++++++++++++++++++---------------- layers/oci8/config.json | 3 ++ layers/oci8/docker-compose.yml | 7 +++ layers/oci8/test.php | 39 +++++++++++++++- 5 files changed, 94 insertions(+), 41 deletions(-) create mode 100644 layers/oci8/docker-compose.yml diff --git a/Readme.md b/Readme.md index bc6dc3a8..1293785f 100644 --- a/Readme.md +++ b/Readme.md @@ -82,7 +82,7 @@ functions: | ODBC Snowflake | `${bref-extra:odbc-snowflake-php-81}` | | OpenSwoole | `${bref-extra:openswoole-php-81}` | | OpenTelemetry | `${bref-extra:opentelemetry-php-81}` | -| Oracle | `${bref-extra:oci8-php-80}` | +| Oracle | `${bref-extra:oci8-php-83}` | | Pcov | `${bref-extra:pcov-php-81}` | | PostgreSQL | `${bref-extra:pgsql-php-81}` | | RdKafka | `${bref-extra:rdkafka-php-81}` | diff --git a/layers/oci8/Dockerfile b/layers/oci8/Dockerfile index a616f5d0..32656ef0 100644 --- a/layers/oci8/Dockerfile +++ b/layers/oci8/Dockerfile @@ -1,48 +1,54 @@ ARG PHP_VERSION ARG BREF_VERSION -FROM bref/build-php-$PHP_VERSION:$BREF_VERSION AS ext +ARG OL_VERSION=8 +ARG IC_VERSION=21 +# Oracle Instant Client image +FROM public.ecr.aws/docker/library/oraclelinux:$OL_VERSION AS oracle_base +ARG OL_VERSION +RUN dnf -y install oracle-instantclient-release-el${OL_VERSION} + +FROM oracle_base AS oracle_devel +RUN dnf -y install oracle-instantclient-devel && \ + mkdir -p /opt/oracle && \ + cp -r /usr/lib/oracle/*/client64/lib/* /opt/oracle/ && \ + cp -r /usr/include/oracle/*/client64/* /opt/oracle/ + +FROM oracle_base AS oracle_client +RUN dnf -y install oracle-instantclient-basiclite && \ + mkdir -p /opt/oracle && \ + cp -r /usr/lib/oracle/*/client64/lib/* /opt/oracle/ + +# Redeclare for scope ARG PHP_VERSION - -# Specify library path -ENV LD_LIBRARY_PATH=/usr/lib:/usr/lib64:$LD_LIBRARY_PATH -ENV ORACLE_BUILD_DIR=${BUILD_DIR}/oracle - -# Install libaio -RUN dnf install -y libaio - -# Instant Client newer than 21.x requires glibc 2.28+ which is not available on Amazon Linux 2 -RUN mkdir -p ${ORACLE_BUILD_DIR}; \ - cd ${ORACLE_BUILD_DIR}; \ - curl -o oci-basic.zip https://download.oracle.com/otn_software/linux/instantclient/2116000/instantclient-basiclite-linux.x64-21.16.0.0.0dbru.zip && \ - unzip oci-basic.zip -d src -x META-INF/* && \ - curl -o oci-sdk.zip https://download.oracle.com/otn_software/linux/instantclient/2116000/instantclient-sdk-linux.x64-21.16.0.0.0dbru.zip && \ - unzip oci-sdk.zip -d src -x META-INF/* - -RUN if [ "$PHP_VERSION" = "80" ] ; then \ - echo "instantclient,${ORACLE_BUILD_DIR}/src/instantclient_21_16" | pecl install oci8-3.0.1; \ - elif [ "$PHP_VERSION" = "81" ] ; then \ - echo "instantclient,${ORACLE_BUILD_DIR}/src/instantclient_21_16" | pecl install oci8-3.2.1; \ - else \ - echo "instantclient,${ORACLE_BUILD_DIR}/src/instantclient_21_16" | pecl install oci8; \ - fi - -RUN cp /usr/lib64/libaio.so.1 /tmp/libaio.so.1 -RUN cp ${ORACLE_BUILD_DIR}/src/instantclient_21_16/libclntshcore.so.21.1 /tmp/libclntshcore.so.21.1 -RUN cp ${ORACLE_BUILD_DIR}/src/instantclient_21_16/libclntsh.so.21.1 /tmp/libclntsh.so.21.1 -RUN cp ${ORACLE_BUILD_DIR}/src/instantclient_21_16/libocci.so.21.1 /tmp/libocci.so.21.1 -RUN cp ${ORACLE_BUILD_DIR}/src/instantclient_21_16/libnnz21.so /tmp/libnnz21.so -RUN cp ${ORACLE_BUILD_DIR}/src/instantclient_21_16/libociicus.so /tmp/libociicus.so -RUN cp `php-config --extension-dir`/oci8.so /tmp/oci8.so -RUN echo 'extension=oci8.so' > /tmp/ext.ini - -RUN php /bref/lib-copy/copy-dependencies.php /tmp/oci8.so /tmp/extension-libs -# Missing these two -RUN cp /tmp/libocci.so.21.1 /tmp/extension-libs -RUN cp /tmp/libociicus.so /tmp/extension-libs +ARG BREF_VERSION +FROM bref/build-php-$PHP_VERSION:$BREF_VERSION AS ext +ARG IC_VERSION +ENV ORACLE_DEVEL_DIR=/opt/oracle-devel +ENV ORACLE_CLIENT_DIR=/opt/oracle-client +ENV LD_LIBRARY_PATH=/usr/lib:/usr/lib64:$ORACLE_CLIENT_DIR:$ORACLE_DEVEL_DIR:$LD_LIBRARY_PATH + +COPY --from=oracle_devel /usr/lib64/libaio.so.1 /usr/lib64/libaio.so.1 +COPY --from=oracle_devel /opt/oracle $ORACLE_DEVEL_DIR +COPY --from=oracle_client /opt/oracle $ORACLE_CLIENT_DIR + +RUN echo "instantclient,${ORACLE_DEVEL_DIR}" | pecl install oci8 + +RUN cp /usr/lib64/libaio.so.1 /tmp/libaio.so.1 && \ + cp ${ORACLE_CLIENT_DIR}/libclntshcore.so.${IC_VERSION}.1 /tmp && \ + cp ${ORACLE_CLIENT_DIR}/libclntsh.so.${IC_VERSION}.1 /tmp && \ + cp ${ORACLE_CLIENT_DIR}/libnnz${IC_VERSION}.so /tmp && \ + cp ${ORACLE_CLIENT_DIR}/libocci.so.${IC_VERSION}.1 /tmp && \ + cp ${ORACLE_CLIENT_DIR}/libociicus.so /tmp && \ + cp `php-config --extension-dir`/oci8.so /tmp/oci8.so && \ + echo 'extension=oci8.so' > /tmp/ext.ini + +RUN php /bref/lib-copy/copy-dependencies.php /tmp/oci8.so /tmp/extension-libs && \ + cp /tmp/libocci.so.${IC_VERSION}.1 /tmp/extension-libs && \ + cp /tmp/libociicus.so /tmp/extension-libs # Build the final image from the scratch image that contain files you want to export FROM scratch COPY --from=ext /tmp/oci8.so /opt/bref/extensions/oci8.so COPY --from=ext /tmp/ext.ini /opt/bref/etc/php/conf.d/ext-oci8.ini -COPY --from=ext /tmp/extension-libs /opt/lib +COPY --from=ext /tmp/extension-libs /opt/lib \ No newline at end of file diff --git a/layers/oci8/config.json b/layers/oci8/config.json index e6d247a5..dd525c05 100644 --- a/layers/oci8/config.json +++ b/layers/oci8/config.json @@ -1,4 +1,7 @@ { "php": [ + "83", + "84", + "85" ] } diff --git a/layers/oci8/docker-compose.yml b/layers/oci8/docker-compose.yml new file mode 100644 index 00000000..da4571d5 --- /dev/null +++ b/layers/oci8/docker-compose.yml @@ -0,0 +1,7 @@ +services: + db: + image: container-registry.oracle.com/database/free:latest-lite + ports: + - "1521:1521" + environment: + - ORACLE_PWD=testing \ No newline at end of file diff --git a/layers/oci8/test.php b/layers/oci8/test.php index b06fbfad..49a62797 100644 --- a/layers/oci8/test.php +++ b/layers/oci8/test.php @@ -1,8 +1,45 @@