programing

사용자 지정 데이터를 사용하여 Oracle Docker 이미지 생성

newstyles 2023. 7. 28. 21:52

사용자 지정 데이터를 사용하여 Oracle Docker 이미지 생성

미리 정의된 데이터가 포함된 Oracle DB Docker 이미지를 생성하려고 합니다.이미지는 도커 합성 파일에서 사용하여 Oracle DB에 연결된 모듈의 일부 장치 테스트를 자동으로 실행합니다.

MySQL과 SQL Server 이미지가 이미 준비되어 있습니다.이러한 데이터베이스 서버를 실행하면 간단한 사전 정의된 데이터베이스 및 테이블을 제공할 수 있습니다.

MySQL에서는 이미지가 이미 제공하기 때문에 매력적으로 작동했습니다./docker-entrypoint-initdb.d디렉토리입니다.스크립트 ICOPY시동 시 실행되는 것들이 있고 저는 괜찮습니다.

SQL Server는 좀 더 복잡했습니다.사용 중/opt/mssql/bin/sqlservr이미지를 빌드하는 동안 SQL 서버를 시작합니다.SQL Server가 작동 중일 때 셸 스크립트가 호출합니다./opt/mssql-tools/bin/sqlcmd제공할 데이터베이스 및 테이블을 만드는 스크립트를 실행합니다.또한 잘 작동합니다.

Oracle DB를 사용하면 이미 일부 데이터가 포함된 이미지를 생성하는 것이 불가능할 것 같습니다.

제가 현재 시도하고 있는 것은 다음과 같습니다.

FROM store/oracle/database-enterprise:12.2.0.1-slim

ENV ORACLE_SYS_USER=sys
ENV ORACLE_SYS_PASSWORD=Oradoc_db1
ENV ORACLE_PDB=ORCLPDB1
ENV ORACLE_DATABASE=test
ENV ORACLE_USER=test
ENV ORACLE_PASSWORD=test

USER root

RUN mkdir -p /usr/local/src/oracle

WORKDIR /usr/local/src/oracle

COPY ./docker/wait-for-it.sh /usr/local/src/oracle
COPY ./docker/oracle/start-import.sh /usr/local/src/oracle
COPY ./docker/oracle/import-data.sh /usr/local/src/oracle
COPY ./docker/oracle/create-database.sql /usr/local/src/oracle
COPY ./docker/oracle/testdata.sql /usr/local/src/oracle

RUN chmod +x /usr/local/src/oracle/wait-for-it.sh
RUN chmod +x /usr/local/src/oracle/prepare-import.sh
RUN chmod +x /usr/local/src/oracle/start-import.sh
RUN chmod +x /usr/local/src/oracle/import-data.sh

RUN chown -R oracle:dba /usr/local/src/oracle

USER oracle

RUN ./start-import.sh

ENTRYPOINT /home/oracle/setup/dockerInit.sh

수입 개시의sh:

#!/bin/sh

# Start the server. From its source it seems that Oracle prefers bash.
/bin/bash /home/oracle/setup/dockerInit.sh &

./wait-for-it.sh "localhost:1521" -t 300 -- ./import-data.sh

kill %1
wait

수입 자료sh:

#!/bin/bash

/u01/app/oracle/product/12.2.0/dbhome_1/bin/sqlplus -s $ORACLE_SYS_USER/$ORACLE_SYS_PASSWORD AS SYSDBA << SQL
@/usr/local/src/oracle/create-database.sql
exit;
SQL

/u01/app/oracle/product/12.2.0/dbhome_1/bin/sqlplus -s $ORACLE_USER/$ORACLE_PASSWORD << SQL
@/usr/local/src/oracle/testdata.sql
exit;
SQL

두 개의 SQL 파일을 건너뜁니다.일반 Oracle DB Docker 이미지 내에서 실행하면 됩니다.그리고 전화에 관해서는sqlplus나는 이미 다음과 같은 다른 전화들을 시도했습니다.sqlplus ... @script.sql하지만 아무 것도 효과가 없었습니다.

스크립트를 읽을 때 이미지 생성 중에 Oracle DB 서버가 시작되고 시작되면sqlplus통화는 내가 갖고 싶은 데이터베이스 구조를 만듭니다.하지만 대신에 나는 어느 쪽이든

  • 연결 문자열에 호스트 또는 SID를 포함하는 경우 TNS 오류 또는
  • 위의 경우 EOF 오류(ORA-03113).
Done ! The database is ready for use .
# ===========================================================================  
# == Add below entries to your tnsnames.ora to access this database server ==  
# ====================== from external host =================================  
ORCLCDB=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<ip-address>)(PORT=<port>))
    (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCLCDB.localdomain)))     
ORCLPDB1=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<ip-address>)(PORT=<port>))
    (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCLPDB1.localdomain)))     
#                                                                              
#ip-address : IP address of the host where the container is running.           
#port       : Host Port that is mapped to the port 1521 of the container.      
#                                                                              
# The mapped port can be obtained from running "docker port <container-id>"  
# ===========================================================================  
ORCLPDB1(3):Database Characterset for ORCLPDB1 is WE8DEC
ORCLPDB1(3):Opatch validation is skipped for PDB ORCLPDB1 (con_id=0)
2019-04-15T12:44:22.591697+00:00
ORCLPDB1(3):Opening pdb with no Resource Manager plan active
Pluggable database ORCLPDB1 opened read write
Completed:     alter pluggable database ORCLPDB1 open
    alter pluggable database all save state
Completed:     alter pluggable database all save state
2019-04-15T12:44:22.844748+00:00
ALTER SYSTEM SET encrypt_new_tablespaces='DDL' SCOPE=BOTH;
wait-for-it.sh: localhost:1521 is available after 99 seconds
ERROR:
ORA-03113: end-of-file on communication channel
Process ID: 0
Session ID: 0 Serial number: 0


SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM|SYSBACKUP|SYSDG|SYSKM|SYSRAC}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM|SYSBACKUP|SYSDG|SYSKM|SYSRAC}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3701
Additional information: 1724833639

누군가 아이디어가 있다면 정말 좋을 것 같습니다.네, 볼륨을 사용하여 슬림한 이미지를 실행해 보겠습니다.그런 다음 테이블을 생성하고 결과 볼륨을 도커 합성 환경에서 사용합니다.

일에 대한 접근법을 얻지 못했습니다.저는 공식 이미지를 실행하고, 데이터베이스를 수정하고, 수정된 컨테이너로 자체 이미지를 만들기로 결정했습니다.

업데이트: 공식 도커 파일은 GitHub에서 사용할 수 있으며, 단일 인스턴스 DB 설치에 사용했습니다.도커 파일이 오해의 소지가 있을 수 있습니다.일부 스크립트와 함께 번들된 도커 파일이 제공됩니다.Oracle에서 공식 설정 파일을 다운로드하여 올바른 위치에 배치한 후에는 다음 작업을 수행할 수 있습니다.

  • 도커 이미지 생성 시작(연결된 GitHub 페이지의 README 참조)
  • 이미지를 합니다.docker run --name ora -e ORACLE_PWD=<yourpw> <image name/id, e. g. oracle/database:18.4.0-xe>)
  • 컨테이너에서 "sqlplus"를 사용하여 일부 데이터를 생성합니다.
    • docker exec -it ora bash
    • bash-4.2# sqlplus sys/<yourpw>@localhost:1521/XEPDB1 as sysdba
  • exit""는 "sqlplus"를 의미합니다
  • 합니다.docker stop ora)
  • 사항을 .docker commit -m "Oracle XE + custom changes" -a "<Your name>" ora <registry>/<nameForTheChangedImage>)

언급URL : https://stackoverflow.com/questions/55690597/create-oracle-docker-image-with-custom-data