Oracle on Alpine linux

前端 未结 5 511
南笙
南笙 2021-01-05 00:02

I am trying to install OCI8 extension on my Alpine Linux Docker environment. Although there are several places saying it won\'t work, there are some which say it actually do

相关标签:
5条回答
  • 2021-01-05 00:04

    I share my version of docker that I made to work with the latest version of alpine and instantclient basiclite. The size of the docker image is 124 mb.

    I share my github where you can download it

    Docker + alpine + Instantclient Basiclite

    Or you can see below the content of the dockerfile

    FROM alpine:latest
    # Install Instantclient Basic Light Oracle and Dependencies
    RUN apk --no-cache add libaio libnsl libc6-compat curl && \
    cd /tmp && \
    curl -o instantclient-basiclite.zip https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip -SL && \
    unzip instantclient-basiclite.zip && \
    mv instantclient*/ /usr/lib/instantclient && \
    rm instantclient-basiclite.zip && \
    ln -s /usr/lib/instantclient/libclntsh.so.19.1 /usr/lib/libclntsh.so && \
    ln -s /usr/lib/instantclient/libocci.so.19.1 /usr/lib/libocci.so && \
    ln -s /usr/lib/instantclient/libociicus.so /usr/lib/libociicus.so && \
    ln -s /usr/lib/instantclient/libnnz19.so /usr/lib/libnnz19.so && \
    ln -s /usr/lib/libnsl.so.2 /usr/lib/libnsl.so.1 && \
    ln -s /lib/libc.so.6 /usr/lib/libresolv.so.2 && \
    ln -s /lib64/ld-linux-x86-64.so.2 /usr/lib/ld-linux-x86-64.so.2
    
    ENV ORACLE_BASE /usr/lib/instantclient
    ENV LD_LIBRARY_PATH /usr/lib/instantclient
    ENV TNS_ADMIN /usr/lib/instantclient
    ENV ORACLE_HOME /usr/lib/instantclient
    
    0 讨论(0)
  • 2021-01-05 00:18

    I'd recommend using an operating system supported by Oracle, thus avoiding the headache of hacking Alpine and the uncertainty that it won't fall over at a critical time. And thus giving you some confidence your business won't be negatively impacted. Try https://github.com/oracle/docker-images/tree/master/OracleInstantClient

    Other comments

    • Don't set ORACLE_HOME when using Instant Client. That variable is for full software installs.
    • Use ldconfig to set the system library path, see the Instant Client installation instructions e.g. here.
    • Use Instant Client 19, which can connect to the same DB versions that 12.2 can. (19 is really the renamed terminal 12.2 release in the new versioning system)
    • Using Oracle Linux Docker images has the advantage that it will download and install the 19 Instant Client without you having to manually do the download.

    See this blog for info about the 'slim' Oracle Linux container it uses.

    0 讨论(0)
  • 2021-01-05 00:23

    I might be late to answer this. I got the same problem of having a alpine base image and add oracle client to that. So i came up with this solution - https://github.com/Shrinidhikulkarni7/OracleClient_Alpine

    Here is the Dockerfile, but you would also need the shell script in it for it to work.

    FROM alpine:latest
    
    ENV LD_LIBRARY_PATH=/lib
    
    RUN wget https://download.oracle.com/otn_software/linux/instantclient/193000/instantclient-basic-linux.x64-19.3.0.0.0dbru.zip && \
        unzip instantclient-basic-linux.x64-19.3.0.0.0dbru.zip && \
        cp -r instantclient_19_3/* /lib && \
        rm -rf instantclient-basic-linux.x64-19.3.0.0.0dbru.zip && \
        apk add libaio
    
    ADD script.sh /root/script.sh
    
    RUN /root/script.sh
    
    

    Over here I'm directly downloading the oracle client inside image, setting the path, adding packages and finally using the shell script for creating symbolic link.

    0 讨论(0)
  • 2021-01-05 00:24

    Here is the Dockerfile For Golang With ORACLE-CLIENT

    FROM golang:alpine
    
    RUN apk update
    
    ENV CLIENT_FILENAME instantclient-basic-linux.x64-12.1.0.1.0.zip
    
    WORKDIR /opt/oracle/lib
    
    ADD https://github.com/bumpx/oracle-instantclient/raw/master/${CLIENT_FILENAME} .
    
    RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories && \
    apk add --update libaio libnsl && \
    ln -s /usr/lib/libnsl.so.2 /usr/lib/libnsl.so.1
    
    RUN LIBS="*/libociei.so */libons.so */libnnz12.so */libclntshcore.so.12.1 */libclntsh.so.12.1" && \
    unzip ${CLIENT_FILENAME} ${LIBS} && \
    for lib in ${LIBS}; do mv ${lib} /usr/lib; done && \
    ln -s /usr/lib/libclntsh.so.12.1 /usr/lib/libclntsh.so && \
    rm ${CLIENT_FILENAME}
    
    RUN mkdir /app
    
    ADD . /app
    
    WORKDIR /app
    
    RUN apk add git
    RUN apk add libc-dev
    RUN apk add gcc
    
    RUN go mod tidy
    RUN go build -o main .
    
    CMD ["/app/main"]
    
    0 讨论(0)
  • 2021-01-05 00:29

    I was just tackling a similar problem to this using the Godror Golang Driver for Oracle. I was never able to solve this on using an Alpine image. The problem eventually came that libint.sh, would never fully install to be recognized by the system. Even changing the docker file to using the Glibc library.

    How i eventually fixed the issue was to use the images from Oracle itself. The full version not the slim images that can be seen here: https://github.com/oracle/docker-images/tree/master/OracleLinuxDevelopers

    you then have to install golang and then your Instant client and Oracle dependencies if you need it.

    FROM oraclelinux:7 as builder
    RUN yum install -y oracle-golang-release-el7 && \
        yum install -y git && \
        yum install -y golang unzip
    
    COPY . /app
    RUN go version
    WORKDIR /app
    {Your Docker Specific Commands Here}
    
    {Insert Build Specific Environment Variables here}
    #Oracle Specific Environment Variables
    {Insert Oracle Env Variables here}
    
    WORKDIR /root/
    #Install oracle dependencies
    RUN yum install -y wget unzip libaio && \
        rm -rf /var/cache/yum
    #install Oracle Instant Client
    RUN wget https://download.oracle.com/otn_software/linux/instantclient/199000/instantclient-basic-linux.x64-19.9.0.0.0dbru.zip -O /tmp/instantclient.zip && \
        unzip /tmp/instantclient.zip -d /usr/lib/instantclient && \
        rm /tmp/instantclient.zip
    
    #Install Oracle SDK
    RUN wget https://download.oracle.com/otn_software/linux/instantclient/199000/instantclient-sdk-linux.x64-19.9.0.0.0dbru.zip -O /tmp/instantclient-sdk-linux.x64-19.9.0.0.0.zip && \
        unzip /tmp/instantclient-sdk-linux.x64-19.9.0.0.0.zip -d /usr/lib/ && \
        rm /tmp/instantclient-sdk-linux.x64-19.9.0.0.0.zip
    
    #Install Oracle Tools through SQLPlus
    RUN wget https://download.oracle.com/otn_software/linux/instantclient/199000/instantclient-sqlplus-linux.x64-19.9.0.0.0dbru.zip -O /tmp/instantclient-sqlplus-linux.x64-19.9.0.0.0.zip && \
        unzip /tmp/instantclient-sqlplus-linux.x64-19.9.0.0.0.zip -d /usr/lib/ && \
        rm /tmp/instantclient-sqlplus-linux.x64-19.9.0.0.0.zip
    
    WORKDIR /app
    
    COPY --from=builder /app/cmd/svr .
    EXPOSE 8000
    
    CMD ["./app"]
    

    Again this is how i solved the problem for a Golang API. There may be others that solved the Alpine issue but i was never able to get it to work, even using older version of the Oracle Instant Client.

    0 讨论(0)
提交回复
热议问题