Docker сообщает, что установка клиента Oracle Instant Client прошла успешно, но при исследовании файловой системы контейнера не обнаружено «Oracle»

Docker сообщает, что установка клиента Oracle Instant Client прошла успешно, но при исследовании файловой системы контейнера не обнаружено «Oracle»

Мой docker-файл выглядит так

FROM store/oracle/database-instantclient:12.2.0.1

ENV OCI_LIB=/usr/lib/oracle/12.2/client64/lib
ENV OCI_INC=/usr/include/oracle/12.2/client64
ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${OCI_LIB}
ENV PATH=$PATH:/usr/lib/oracle/12.2/client64/bin

FROM rocker/rstudio
FROM rocker/tidyverse

и когда я запускаю docker build. Я вижу сообщение на консоли, говорящее следующее

Step 1/15 : FROM store/oracle/database-instantclient:12.2.0.1
12.2.0.1: Pulling from store/oracle/database-instantclient
497341ef9d71: Pulling fs layer
598d27c2564a: Pulling fs layer
497341ef9d71: Verifying Checksum
497341ef9d71: Download complete
497341ef9d71: Pull complete
598d27c2564a: Verifying Checksum
598d27c2564a: Download complete
598d27c2564a: Pull complete
Digest: sha256:e83a2a223a14f24e6e433847d15d817ff7799a3a1a2dd2e4b224437358e996a0
Status: Downloaded newer image for store/oracle/database-instantclient:12.2.0.1

Однако при исследовании файловой системы контейнера я не вижу никаких ссылок на «Oracle» во всей файловой системе.

Я делаю следующее для исследования

# find ID of your running container:
docker ps

# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot

# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash

Что происходит..??

решение1

Насколько я могу судить, последующие FROMстроки в Dockerfile ( FROM rocker/rstudio...) стирают то, что было сделано. Окончательный образ контейнера — это то, что создается с последнего FROM и далее. Если вы хотите перенести что-то из образа, созданного ранее, вам придется явно КОПИРОВАТЬ их в ваш текущий образ. СмотритеДокументация Docker для многоэтапных сборок.

Я не уверен, что будет практично извлекать все, что требуется Oracle в исходном образе, чтобы скопировать его. Возможно, вам следует либо:

  1. установка/добавление элементов в образ Oracle.
  2. создайте первые два изображения, изображение Oracle, и скопируйте все в изображение Oracle.
  3. есть два контейнера, один с простым Oracle и один для других вещей, что является обычным способом решения задач.

решение2

У меня получилось следующее.

FROM oraclelinux:7-slim AS oracrap

RUN  yum -y install oracle-release-el7 && yum-config-manager --enable ol7_oracle_instantclient && \
     yum -y install oracle-instantclient18.5-basic oracle-instantclient18.5-devel oracle-instantclient18.5-sqlplus && \
     rm -rf /var/cache/yum && \
     echo /usr/lib/oracle/18.5/client64/lib > /etc/ld.so.conf.d/oracle-instantclient18.5.conf && \
     ldconfig

ENV PATH=$PATH:/usr/lib/oracle/18.5/client64/bin       


FROM rocker/rstudio:3.5.0

COPY --from=oracrap /usr/lib/oracle /usr/lib/oracle/
COPY --from=oracrap /usr/include/oracle /usr/include/oracle/
ENV PATH=$PATH:/usr/lib/oracle/18.5/client64/bin:/usr/lib/oracle/18.5/client64/lib:/usr/include/oracle/18.5/client64/
ENV OCI_LIB=/usr/lib/oracle/18.5/client64/lib
ENV OCI_INC=/usr/include/oracle/18.5/client64
ENV ORACLE_HOME=/usr/lib/oracle/18.5/client64
ENV LD_LIBRARY_PATH=/usr/lib/oracle/18.5/client64/lib
ENV LD_LIBRARY_PATH_64=/usr/lib/oracle/18.5/client64/lib

RUN ln -s /usr/lib/oracle/18.5/client64/lib/libclntsh.so.18.1   libclntsh.so.18.1

FROM rocker/tidyverse:3.5.0

COPY --from=oracrap /usr/lib/oracle /usr/lib/oracle/
COPY --from=oracrap /usr/include/oracle /usr/include/oracle/
ENV PATH=$PATH:/usr/lib/oracle/18.5/client64/bin:/usr/lib/oracle/18.5/client64/lib:/usr/include/oracle/18.5/client64/
ENV OCI_LIB=/usr/lib/oracle/18.5/client64/lib
ENV OCI_INC=/usr/include/oracle/18.5/client64
ENV ORACLE_HOME=/usr/lib/oracle/18.5/client64
ENV LD_LIBRARY_PATH=/usr/lib/oracle/18.5/client64/lib
ENV LD_LIBRARY_PATH_64=/usr/lib/oracle/18.5/client64/lib

RUN ln -s /usr/lib/oracle/18.5/client64/lib/libclntsh.so.18.1  libclntsh.so.18.1

Связанный контент