diff --git a/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/Dockerfile.slim b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/Dockerfile.slim new file mode 100644 index 0000000000..30ecbdf419 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/Dockerfile.slim @@ -0,0 +1,96 @@ +# LICENSE UPL 1.0 +# +# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# +# ORACLE DOCKERFILES PROJECT +# -------------------------- +# This is the Dockerfile for Oracle Database 18c Express Edition +# +# REQUIRED FILES TO BUILD THIS IMAGE +# ---------------------------------- +# None +# +# HOW TO BUILD THIS IMAGE +# ----------------------- +# Put the downloaded file in the same directory as this Dockerfile +# Run: +# $ docker build -t oracle/database:11.2.0.2-xe-slim -f Dockerfile.slim . +# Sample usage with init-db directory having an RMAN full backup: +# $ docker run -ti --rm --name testdb -v /home/init-db:/opt/oracle/scripts/setup -v /run/shm:/dev/shm oracle/database:11.2.0.2-xe-slim +# passing init-db.tar.gz with a full RMAN backup initial db +# $ docker run -ti --rm --name testdb -v /home/init-db.tar.gz:/opt/oracle/scripts/setup/init-db.tar.gz -v /run/shm:/dev/shm oracle/database:11.2.0.2-xe-slim +# +# Pull base image +# --------------- +FROM oracle/database:11.2.0.2-xe AS db-xe +FROM oraclelinux:7-slim AS baseOS + +# Labels +# ------ +LABEL "provider"="Oracle" \ + "issues"="https://github.com/oracle/docker-images/issues" \ + "volume.data"="/u01/app/oracle/oradata" \ + "volume.setup.location1"="/u01/app/oracle/scripts/startup" \ + "volume.setup.location2"="/docker-entrypoint-initdb.d/setup" \ + "volume.startup.location1"="/u01/app/oracle/scripts/setup" \ + "volume.startup.location2"="/docker-entrypoint-initdb.d/startup" \ + "port.listener"="1521" \ + "port.apex"="8080" + +# Environment variables required for this build (do NOT change) +# ------------------------------------------------------------- +ENV ORACLE_BASE=/u01/app/oracle \ + ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe \ + ORACLE_SID=XE \ + INSTALL_FILE_1="oracle-xe-11.2.0-1.0.x86_64.rpm.zip" \ + INSTALL_DIR="$HOME/install" \ + CONFIG_RSP="xe.rsp" \ + RUN_FILE="runOracle-slim.sh" \ + PWD_FILE="setPassword.sh" \ + CLR_FILE="cleanup.sh" \ + CHECK_DB_FILE="checkDBStatus.sh" + +# Use second ENV so that variable get substituted +ENV PATH=$ORACLE_HOME/bin:$PATH + +RUN yum -y install unzip libaio bc initscripts net-tools openssl compat-libstdc++-33 && \ + rm -rf /var/cache/yum + +FROM baseOS AS baseInstall +# Copy Oracle XE installation +# ------------- +COPY $CLR_FILE $INSTALL_DIR/ + +COPY --from=db-xe --chown=root:root /etc/passwd /etc/passwd +COPY --from=db-xe --chown=root:root /etc/group /etc/group +COPY --from=db-xe --chown=root:root /etc/init.d/oracle-xe /etc/init.d/oracle-xe +COPY --from=db-xe --chown=oracle:dba $ORACLE_BASE/ $ORACLE_BASE/ + +RUN chmod +x $INSTALL_DIR/$CLR_FILE && \ + $INSTALL_DIR/$CLR_FILE + +FROM baseOS + +COPY --from=baseInstall --chown=root:root /etc/passwd /etc/passwd +COPY --from=baseInstall --chown=root:root /etc/group /etc/group +COPY --from=baseInstall --chown=root:root /etc/init.d/oracle-xe /etc/init.d/oracle-xe +COPY --from=baseInstall $ORACLE_BASE/ $ORACLE_BASE/ +COPY $RUN_FILE $PWD_FILE $CHECK_DB_FILE $ORACLE_BASE/ + +RUN mkdir -p /home/oracle && \ + chown -R oracle:dba /home/oracle && \ + chown oracle:dba $ORACLE_BASE && \ + sed -i -r 's/^(session\s+required\s+pam_limits.so)/#\1/' /etc/pam.d/* && \ + ln -s $ORACLE_BASE/$PWD_FILE / && \ + rm -rf /var/lib/rpm/* && \ + rm -rf /var/log/* && \ + ln -s $ORACLE_BASE/scripts /docker-entrypoint-initdb.d && \ + cd $HOME && \ + chmod ug+x $ORACLE_BASE/*.sh + +VOLUME ["$ORACLE_BASE/oradata"] +EXPOSE 1521 8080 5500 +HEALTHCHECK --interval=1m --start-period=20m \ + CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 + +CMD exec $ORACLE_BASE/$RUN_FILE diff --git a/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/cleanup.sh b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/cleanup.sh new file mode 100644 index 0000000000..ca7683f1f3 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/cleanup.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# Remove not needed components +rm -rf $ORACLE_HOME/apex +rm -rf $ORACLE_HOME/jdbc +# ZDLRA installer files +rm -rf $ORACLE_HOME/lib/ra*.zip +rm -rf $ORACLE_HOME/ords +rm -rf $ORACLE_HOME/sqldeveloper +rm -rf $ORACLE_HOME/ucp +# as we won't install patches +rm -rf $ORACLE_HOME/lib/*.a +find $ORACLE_HOME -name '*.a' -type f -delete +# OUI backup +rm -rf $ORACLE_HOME/inventory/backup/* +# Network tools help +rm -rf $ORACLE_HOME/network/tools/help/mgr/help_* +# Temp location +rm -rf /tmp/* +# Advised by Gerald Venzl +echo "Cleanup Advised by Gerald Venzl" +rm -rf $ORACLE_HOME/.patch_storage/* +rm -rf $ORACLE_HOME/R/* +rm -rf $ORACLE_HOME/assistants/* +rm -rf $ORACLE_HOME/cfgtoollogs/* +rm -rf $ORACLE_HOME/dmu/* +rm -rf $ORACLE_HOME/inventory/* +rm -rf $ORACLE_HOME/javavm/* +rm -rf $ORACLE_HOME/md/* +rm -rf $ORACLE_HOME/suptools/* +echo "Additional Cleanup by Jacek Gebal" +#additional cleanup- removes 1.2GB of DB-sources size - for small images only (no Java) +rm -rf $ORACLE_HOME/OPatch/ #OPatch --> Patching +rm -rf $ORACLE_HOME/crs/ #crs --> some clusterware single instance failover things +rm -rf $ORACLE_HOME/ctx/ #ctx --> Oracle Text (also used for JSON index) +rm -rf $ORACLE_HOME/cv/ #cv --> some patchign related stuff I think +rm -rf $ORACLE_HOME/has/ #has --> no clue +rm -rf $ORACLE_HOME/jdk/ #jdk --> Java jdk +rm -rf $ORACLE_HOME/jlib/ #jlib --> Java libraries +rm -rf $ORACLE_HOME/mgw/ #mgw --> Message gateway +rm -rf $ORACLE_HOME/odbc/ #odbc --> ODBC +rm -rf $ORACLE_HOME/olap/ #olap --> OLAP +rm -rf $ORACLE_HOME/ord/ #ord --> Multimedia I think +rm -rf $ORACLE_HOME/oui/ #oui --> Oracle Universal installer +rm -rf $ORACLE_HOME/owm/ #owm --> Workspace manger +rm -rf $ORACLE_HOME/perl/ #perl --> perl +rm -rf $ORACLE_HOME/precomp/ #precomp --> Not much clue either +rm -rf $ORACLE_HOME/sdk/ #sdk --> some more java I believe +rm -rf $ORACLE_HOME/sqlpatch/ #sqlpatch --> patching related stuff +rm -rf $ORACLE_HOME/usm/ #usm --> Universal storage management +rm -rf $ORACLE_HOME/rdbms/admin/cdb_cloud +rm -rf $ORACLE_HOME/rdbms/xml/em +rm -rf $ORACLE_HOME/relnotes +find $ORACLE_HOME -name '*.zip' -type f -delete +find $ORACLE_HOME -name '*.txt' -type f -delete +find $ORACLE_HOME -name '*O' -type f -delete +find $ORACLE_HOME -path '*/install/*' -delete +find $ORACLE_HOME -name 'install' -type d -delete + diff --git a/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/runOracle-slim.sh b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/runOracle-slim.sh new file mode 100644 index 0000000000..8b16e11292 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/runOracle-slim.sh @@ -0,0 +1,270 @@ +#!/bin/bash + +############# Execute custom scripts ############## +function runUserScripts { + + SCRIPTS_ROOT="$1"; + + # Check whether parameter has been passed on + if [ -z "$SCRIPTS_ROOT" ]; then + echo "$0: No SCRIPTS_ROOT passed on, no scripts will be run"; + exit 1; + fi; + + # Execute custom provided files (only if directory exists and has files in it) + if [ -d "$SCRIPTS_ROOT" ] && [ -n "$(ls -A $SCRIPTS_ROOT)" ]; then + + echo ""; + echo "Executing user defined scripts" + + for f in $SCRIPTS_ROOT/*; do + case "$f" in + *.sh) echo "$0: running $f"; . "$f" ;; + *.sql) echo "$0: running $f"; echo "exit" | su -p oracle -c "$ORACLE_HOME/bin/sqlplus / as sysdba @$f"; echo ;; + *) echo "$0: ignoring $f" ;; + esac + echo ""; + done + + echo "DONE: Executing user defined scripts" + echo ""; + + fi; + +} + +########### Move DB files ############ +function moveFiles { + if [ ! -d $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID ]; then + su -p oracle -c "mkdir -p $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/" + fi; + + su -p oracle -c "mv $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/" + su -p oracle -c "mv $ORACLE_HOME/dbs/orapw$ORACLE_SID $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/" + su -p oracle -c "mv $ORACLE_HOME/network/admin/listener.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/" + su -p oracle -c "mv $ORACLE_HOME/network/admin/tnsnames.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/" + mv /etc/sysconfig/oracle-xe $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/ + + cp /etc/oratab $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/ + + symLinkFiles; +} + +########### Symbolic link DB files ############ +function symLinkFiles { + + if [ ! -L $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora ]; then + ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/spfile$ORACLE_SID.ora $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora + fi; + + if [ ! -L $ORACLE_HOME/dbs/orapw$ORACLE_SID ]; then + ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/orapw$ORACLE_SID $ORACLE_HOME/dbs/orapw$ORACLE_SID + fi; + + if [ ! -L $ORACLE_HOME/network/admin/listener.ora ]; then + ln -sf $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/listener.ora $ORACLE_HOME/network/admin/listener.ora + fi; + + if [ ! -L $ORACLE_HOME/network/admin/tnsnames.ora ]; then + ln -sf $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora + fi; + + if [ ! -L /etc/sysconfig/oracle-xe ]; then + ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/oracle-xe /etc/sysconfig/oracle-xe + fi; + + cp $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/oratab /etc/oratab +} + +########### SIGTERM handler ############ +function _term() { + echo "Stopping container." + echo "SIGTERM received, shutting down database!" + /etc/init.d/oracle-xe stop +} + +########### SIGKILL handler ############ +function _kill() { + echo "SIGKILL received, shutting down database!" + /etc/init.d/oracle-xe stop +} + +############# Create DB ################ +function createDB { + # Auto generate ORACLE PWD if not passed on + export ORACLE_PWD=${ORACLE_PWD:-"`openssl rand -hex 8`"} + echo "ORACLE PASSWORD FOR SYS AND SYSTEM: $ORACLE_PWD"; + + # configure + echo "#This is a configuration file for automatic starting of the Oracle +#Database and listener at system startup.It is generated By running +#'/etc/init.d/oracle-xe configure'.Please use that method to modify this +#file + +# ORACLE_DBENABLED:'true' means to load the Database at system boot. +ORACLE_DBENABLED=true + +# LISTENER_PORT: Database listener +LISTENER_PORT=1521 + +# HTTP_PORT : HTTP port for Oracle Application Express +HTTP_PORT=8080 + +# Configuration : Check whether configure has been done or not +CONFIGURE_RUN=true +" > /etc/sysconfig/oracle-xe + + # Listener + echo "# listener.ora Network Configuration File: + + SID_LIST_LISTENER = + (SID_LIST = + (SID_DESC = + (SID_NAME = PLSExtProc) + (ORACLE_HOME = $ORACLE_HOME) + (PROGRAM = extproc) + ) + ) + + LISTENER = + (DESCRIPTION_LIST = + (DESCRIPTION = + (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + ) + ) + + DEFAULT_SERVICE_LISTENER = (XE)" > $ORACLE_HOME/network/admin/listener.ora + + # TNS Names.ora + echo "# tnsnames.ora Network Configuration File: + +XE = + (DESCRIPTION = + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + (CONNECT_DATA = + (SERVER = DEDICATED) + (SERVICE_NAME = XE) + ) + ) + +EXTPROC_CONNECTION_DATA = + (DESCRIPTION = + (ADDRESS_LIST = + (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) + ) + (CONNECT_DATA = + (SID = PLSExtProc) + (PRESENTATION = RO) + ) + ) +" > $ORACLE_HOME/network/admin/tnsnames.ora + + su -p oracle -c "lsnrctl start" + + # make some required directories it not exists + su -p oracle -c "mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID" + su -p oracle -c "mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump" + su -p oracle -c "mkdir -p $ORACLE_BASE/fast_recovery_area" + + # Check init-db.tar format + if [ -f $ORACLE_BASE/scripts/setup/init-db.tar ]; then + (cd $ORACLE_BASE/scripts/setup;tar xf init-db.tar) + fi; + + # Check init-db.tar.gz format + if [ -f $ORACLE_BASE/scripts/setup/init-db.tar.gz ]; then + (cd $ORACLE_BASE/scripts/setup;tar xfz init-db.tar.gz) + fi; + + # Check whether database already exists + if [ -f $ORACLE_BASE/scripts/setup/spfile.bks ]; then + # start process of restore from rman full backup, first spfile + su -p oracle -c "rman target /<> /etc/oratab + chown oracle:dba /etc/oratab + fi; + # Move database operational files to oradata + moveFiles; +} + +############# MAIN ################ + +# Set SIGTERM handler +trap _term SIGTERM + +# Set SIGKILL handler +trap _kill SIGKILL + +# Check whether database already exists +if [ -d $ORACLE_BASE/oradata/$ORACLE_SID ]; then + symLinkFiles; + # Make sure audit file destination exists + if [ ! -d $ORACLE_BASE/admin/$ORACLE_SID/adump ]; then + su -p oracle -c "mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump" + fi; +fi; + +/etc/init.d/oracle-xe start | grep -qc "Oracle Database 11g Express Edition is not configured" +if [ "$?" == "0" ]; then + # Check whether container has enough memory + if [ `df -Pk /dev/shm | tail -n 1 | awk '{print $2}'` -lt 1048576 ]; then + echo "Error: The container doesn't have enough memory allocated." + echo "A database XE container needs at least 1 GB of shared memory (/dev/shm)." + echo "You currently only have $((`df -Pk /dev/shm | tail -n 1 | awk '{print $2}'`/1024)) MB allocated to the container." + exit 1; + fi; + + # Create database + createDB; + + # Execute custom provided setup scripts + runUserScripts $ORACLE_BASE/scripts/setup +fi; + +# Check whether database is up and running +$ORACLE_BASE/$CHECK_DB_FILE +if [ $? -eq 0 ]; then + echo "#########################" + echo "DATABASE IS READY TO USE!" + echo "#########################" + + # Execute custom provided startup scripts + runUserScripts $ORACLE_BASE/scripts/startup + +else + echo "#####################################" + echo "########### E R R O R ###############" + echo "DATABASE SETUP WAS NOT SUCCESSFUL!" + echo "Please check output for further info!" + echo "########### E R R O R ###############" + echo "#####################################" +fi; + +echo "The following output is now a tail of the alert.log:" +tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert*.log & +childPID=$! +wait $childPID diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.slim b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.slim new file mode 100644 index 0000000000..8a773dc6e5 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.slim @@ -0,0 +1,113 @@ +# LICENSE UPL 1.0 +# +# Copyright (c) 2018, 2020 Oracle and/or its affiliates. +# +# ORACLE DOCKERFILES PROJECT +# -------------------------- +# This is the Dockerfile for Oracle Database 18c +# +# REQUIRED FILES TO BUILD THIS IMAGE +# ---------------------------------- +# (1) db_home.zip +# Download Oracle Database 18c Enterprise Edition or Standard Edition 2 for Linux x64 +# from http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html +# +# HOW TO BUILD THIS IMAGE +# ----------------------- +# Put all downloaded files in the same directory as this Dockerfile +# Run: +# $ docker build --build-arg DB_EDITION=ee -t oracle/database:12.1.0.2-ee-slim -f Dockerfile.slim . +# +# Pull base image +# --------------- + +# Labels +# ------ +ARG DB_EDITION + +FROM oracle/database:12.1.0.2-${DB_EDITION} AS db-base +FROM oraclelinux:7-slim as base + +LABEL "provider"="Oracle" \ + "issues"="https://github.com/oracle/docker-images/issues" \ + "volume.data"="/opt/oracle/oradata" \ + "volume.setup.location1"="/opt/oracle/scripts/setup" \ + "volume.setup.location2"="/docker-entrypoint-initdb.d/setup" \ + "volume.startup.location1"="/opt/oracle/scripts/startup" \ + "volume.startup.location2"="/docker-entrypoint-initdb.d/startup" \ + "port.listener"="1521" \ + "port.oemexpress"="5500" + +# Environment variables required for this build (do NOT change) +# ------------------------------------------------------------- +ENV ORACLE_BASE=/opt/oracle \ + ORACLE_HOME=/opt/oracle/product/12.1.0.2/dbhome_1 \ + INSTALL_DIR=/opt/install \ + INSTALL_FILE_1="linuxamd64_12102_database_1of2.zip" \ + INSTALL_FILE_2="linuxamd64_12102_database_2of2.zip" \ + INSTALL_RSP="db_inst.rsp" \ + CONFIG_RSP="dbca.rsp.tmpl" \ + PWD_FILE="setPassword.sh" \ + PERL_INSTALL_FILE="installPerl.sh" \ + RUN_FILE="runOracle.sh" \ + START_FILE="startDB.sh" \ + CREATE_DB_FILE="createDB-slim.sh" \ + CLR_FILE="cleanup.sh" \ + SETUP_LINUX_FILE="setupLinuxEnv.sh" \ + CHECK_SPACE_FILE="checkSpace.sh" \ + CHECK_DB_FILE="checkDBStatus.sh" \ + USER_SCRIPTS_FILE="runUserScripts.sh" \ + INSTALL_DB_BINARIES_FILE="installDBBinaries.sh" + +# Use second ENV so that variable get substituted +ENV PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch/:/usr/sbin:$PATH \ + LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib \ + CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib + +# Copy files needed during both installation and runtime +# ------------- +COPY $SETUP_LINUX_FILE $CHECK_SPACE_FILE $CLR_FILE $INSTALL_DIR/ +COPY $RUN_FILE $START_FILE $CREATE_DB_FILE $CONFIG_RSP $PWD_FILE $CHECK_DB_FILE $USER_SCRIPTS_FILE $ORACLE_BASE/ + +RUN chmod ug+x $INSTALL_DIR/*.sh && \ + sync && \ + $INSTALL_DIR/$CHECK_SPACE_FILE && \ + $INSTALL_DIR/$SETUP_LINUX_FILE + +############################################# +# ------------------------------------------- +# Start new stage for installing the database +# ------------------------------------------- +############################################# + +FROM base AS builder + +USER oracle +COPY --from=db-base $ORACLE_BASE $ORACLE_BASE + +USER root +RUN $INSTALL_DIR/$CLR_FILE && \ + rm -rf $INSTALL_DIR + +############################################# +# ------------------------------------------- +# Start new layer for database runtime +# ------------------------------------------- +############################################# + +FROM base + +USER root +COPY --chown=oracle:dba --from=builder $ORACLE_BASE $ORACLE_BASE +COPY --chown=oracle:dba --from=db-base /etc/oratab /etc/oratab +COPY --chown=oracle:dba --from=db-base /etc/oratab /opt/oracle +COPY --chown=root:root --from=db-base /opt/ORCLfmap /opt/ORCLfmap + +USER oracle +WORKDIR /home/oracle + +HEALTHCHECK --interval=1m --start-period=5m \ + CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 + +# Define default command to start Oracle Database. +CMD exec $ORACLE_BASE/$RUN_FILE diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/cleanup.sh b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/cleanup.sh new file mode 100755 index 0000000000..ca7683f1f3 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/cleanup.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# Remove not needed components +rm -rf $ORACLE_HOME/apex +rm -rf $ORACLE_HOME/jdbc +# ZDLRA installer files +rm -rf $ORACLE_HOME/lib/ra*.zip +rm -rf $ORACLE_HOME/ords +rm -rf $ORACLE_HOME/sqldeveloper +rm -rf $ORACLE_HOME/ucp +# as we won't install patches +rm -rf $ORACLE_HOME/lib/*.a +find $ORACLE_HOME -name '*.a' -type f -delete +# OUI backup +rm -rf $ORACLE_HOME/inventory/backup/* +# Network tools help +rm -rf $ORACLE_HOME/network/tools/help/mgr/help_* +# Temp location +rm -rf /tmp/* +# Advised by Gerald Venzl +echo "Cleanup Advised by Gerald Venzl" +rm -rf $ORACLE_HOME/.patch_storage/* +rm -rf $ORACLE_HOME/R/* +rm -rf $ORACLE_HOME/assistants/* +rm -rf $ORACLE_HOME/cfgtoollogs/* +rm -rf $ORACLE_HOME/dmu/* +rm -rf $ORACLE_HOME/inventory/* +rm -rf $ORACLE_HOME/javavm/* +rm -rf $ORACLE_HOME/md/* +rm -rf $ORACLE_HOME/suptools/* +echo "Additional Cleanup by Jacek Gebal" +#additional cleanup- removes 1.2GB of DB-sources size - for small images only (no Java) +rm -rf $ORACLE_HOME/OPatch/ #OPatch --> Patching +rm -rf $ORACLE_HOME/crs/ #crs --> some clusterware single instance failover things +rm -rf $ORACLE_HOME/ctx/ #ctx --> Oracle Text (also used for JSON index) +rm -rf $ORACLE_HOME/cv/ #cv --> some patchign related stuff I think +rm -rf $ORACLE_HOME/has/ #has --> no clue +rm -rf $ORACLE_HOME/jdk/ #jdk --> Java jdk +rm -rf $ORACLE_HOME/jlib/ #jlib --> Java libraries +rm -rf $ORACLE_HOME/mgw/ #mgw --> Message gateway +rm -rf $ORACLE_HOME/odbc/ #odbc --> ODBC +rm -rf $ORACLE_HOME/olap/ #olap --> OLAP +rm -rf $ORACLE_HOME/ord/ #ord --> Multimedia I think +rm -rf $ORACLE_HOME/oui/ #oui --> Oracle Universal installer +rm -rf $ORACLE_HOME/owm/ #owm --> Workspace manger +rm -rf $ORACLE_HOME/perl/ #perl --> perl +rm -rf $ORACLE_HOME/precomp/ #precomp --> Not much clue either +rm -rf $ORACLE_HOME/sdk/ #sdk --> some more java I believe +rm -rf $ORACLE_HOME/sqlpatch/ #sqlpatch --> patching related stuff +rm -rf $ORACLE_HOME/usm/ #usm --> Universal storage management +rm -rf $ORACLE_HOME/rdbms/admin/cdb_cloud +rm -rf $ORACLE_HOME/rdbms/xml/em +rm -rf $ORACLE_HOME/relnotes +find $ORACLE_HOME -name '*.zip' -type f -delete +find $ORACLE_HOME -name '*.txt' -type f -delete +find $ORACLE_HOME -name '*O' -type f -delete +find $ORACLE_HOME -path '*/install/*' -delete +find $ORACLE_HOME -name 'install' -type d -delete + diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/createDB-slim.sh b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/createDB-slim.sh new file mode 100755 index 0000000000..3ca6392cc5 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/createDB-slim.sh @@ -0,0 +1,97 @@ +#!/bin/bash +# LICENSE UPL 1.0 +# +# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# +# Since: November, 2016 +# Author: gerald.venzl@oracle.com +# Description: Creates an Oracle Database based on following parameters: +# $ORACLE_SID: The Oracle SID and CDB name +# $ORACLE_PDB: The PDB name +# $ORACLE_PWD: The Oracle password +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. +# + +set -e + +# Check whether ORACLE_SID is passed on +export ORACLE_SID=${1:-ORCLCDB} + +# Check whether ORACLE_PDB is passed on +export ORACLE_PDB=${2:-ORCLPDB1} + +# Create network related config files (sqlnet.ora, tnsnames.ora, listener.ora) +mkdir -p $ORACLE_HOME/network/admin +echo "NAME.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME)" > $ORACLE_HOME/network/admin/sqlnet.ora + +# Listener.ora +echo "LISTENER = +(DESCRIPTION_LIST = + (DESCRIPTION = + (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + ) +) + +DEDICATED_THROUGH_BROKER_LISTENER=ON +DIAG_ADR_ENABLED = off +" > $ORACLE_HOME/network/admin/listener.ora + +# Start LISTENER and run DBCA +lsnrctl start + +echo "$ORACLE_SID=localhost:1521/$ORACLE_SID" > $ORACLE_HOME/network/admin/tnsnames.ora +echo "$ORACLE_PDB= + (DESCRIPTION = + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + (CONNECT_DATA = + (SERVER = DEDICATED) + (SERVICE_NAME = $ORACLE_PDB) + ) + )" >> $ORACLE_HOME/network/admin/tnsnames.ora + +# make some required directories it not exists +mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID +mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump +mkdir -p $ORACLE_BASE/fast_recovery_area + +# Check init-db.tar format +if [ -f /opt/oracle/scripts/setup/init-db.tar ]; then + (cd /opt/oracle/scripts/setup;tar xf init-db.tar) +fi; + +# Check init-db.tar.gz format +if [ -f /opt/oracle/scripts/setup/init-db.tar.gz ]; then + (cd /opt/oracle/scripts/setup;tar xfz init-db.tar.gz) +fi; + +# Check whether database already exists +if [ -f /opt/oracle/scripts/setup/spfile.bks ]; then + # start process of restore from rman full backup, first spfile + rman target /<> /etc/oratab +fi; diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/Dockerfile.slim b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/Dockerfile.slim new file mode 100644 index 0000000000..11108bf5e6 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/Dockerfile.slim @@ -0,0 +1,111 @@ +# LICENSE UPL 1.0 +# +# Copyright (c) 2018, 2020 Oracle and/or its affiliates. +# +# ORACLE DOCKERFILES PROJECT +# -------------------------- +# This is the Dockerfile for Oracle Database 18c +# +# REQUIRED FILES TO BUILD THIS IMAGE +# ---------------------------------- +# (1) db_home.zip +# Download Oracle Database 18c Enterprise Edition or Standard Edition 2 for Linux x64 +# from http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html +# +# HOW TO BUILD THIS IMAGE +# ----------------------- +# Put all downloaded files in the same directory as this Dockerfile +# Run: +# $ docker build --build-arg DB_EDITION=ee -t oracle/database:12.2.0.1-ee-slim -f Dockerfile.slim . +# +# Pull base image +# --------------- + +# Labels +# ------ +ARG DB_EDITION + +FROM oracle/database:12.2.0.1-${DB_EDITION} AS db-base +FROM oraclelinux:7-slim as base + +LABEL "provider"="Oracle" \ + "issues"="https://github.com/oracle/docker-images/issues" \ + "volume.data"="/opt/oracle/oradata" \ + "volume.setup.location1"="/opt/oracle/scripts/setup" \ + "volume.setup.location2"="/docker-entrypoint-initdb.d/setup" \ + "volume.startup.location1"="/opt/oracle/scripts/startup" \ + "volume.startup.location2"="/docker-entrypoint-initdb.d/startup" \ + "port.listener"="1521" \ + "port.oemexpress"="5500" + +# Environment variables required for this build (do NOT change) +# ------------------------------------------------------------- +ENV ORACLE_BASE=/opt/oracle \ + ORACLE_HOME=/opt/oracle/product/12.2.0.1/dbhome_1 \ + INSTALL_DIR=/opt/install \ + INSTALL_FILE_1="LINUX.linuxx64_12201_database.zip" \ + INSTALL_RSP="db_inst.rsp" \ + CONFIG_RSP="dbca.rsp.tmpl" \ + PWD_FILE="setPassword.sh" \ + RUN_FILE="runOracle.sh" \ + START_FILE="startDB.sh" \ + CREATE_DB_FILE="createDB-slim.sh" \ + CLR_FILE="cleanup.sh" \ + SETUP_LINUX_FILE="setupLinuxEnv.sh" \ + CHECK_SPACE_FILE="checkSpace.sh" \ + CHECK_DB_FILE="checkDBStatus.sh" \ + USER_SCRIPTS_FILE="runUserScripts.sh" \ + INSTALL_DB_BINARIES_FILE="installDBBinaries.sh" + +# Use second ENV so that variable get substituted +ENV PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch/:/usr/sbin:$PATH \ + LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib \ + CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib + +# Copy files needed during both installation and runtime +# ------------- +COPY $SETUP_LINUX_FILE $CHECK_SPACE_FILE $CLR_FILE $INSTALL_DIR/ +COPY $RUN_FILE $START_FILE $CREATE_DB_FILE $CONFIG_RSP $PWD_FILE $CHECK_DB_FILE $USER_SCRIPTS_FILE $ORACLE_BASE/ + +RUN chmod ug+x $INSTALL_DIR/*.sh && \ + sync && \ + $INSTALL_DIR/$CHECK_SPACE_FILE && \ + $INSTALL_DIR/$SETUP_LINUX_FILE + +############################################# +# ------------------------------------------- +# Start new stage for installing the database +# ------------------------------------------- +############################################# + +FROM base AS builder + +USER oracle +COPY --from=db-base $ORACLE_BASE $ORACLE_BASE + +USER root +RUN $INSTALL_DIR/$CLR_FILE && \ + rm -rf $INSTALL_DIR + +############################################# +# ------------------------------------------- +# Start new layer for database runtime +# ------------------------------------------- +############################################# + +FROM base + +USER root +COPY --chown=oracle:dba --from=builder $ORACLE_BASE $ORACLE_BASE +COPY --chown=oracle:dba --from=db-base /etc/oratab /etc/oratab +COPY --chown=oracle:dba --from=db-base /etc/oratab /opt/oracle +COPY --chown=root:root --from=db-base /opt/ORCLfmap /opt/ORCLfmap + +USER oracle +WORKDIR /home/oracle + +HEALTHCHECK --interval=1m --start-period=5m \ + CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 + +# Define default command to start Oracle Database. +CMD exec $ORACLE_BASE/$RUN_FILE diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/cleanup.sh b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/cleanup.sh new file mode 100755 index 0000000000..ca7683f1f3 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/cleanup.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# Remove not needed components +rm -rf $ORACLE_HOME/apex +rm -rf $ORACLE_HOME/jdbc +# ZDLRA installer files +rm -rf $ORACLE_HOME/lib/ra*.zip +rm -rf $ORACLE_HOME/ords +rm -rf $ORACLE_HOME/sqldeveloper +rm -rf $ORACLE_HOME/ucp +# as we won't install patches +rm -rf $ORACLE_HOME/lib/*.a +find $ORACLE_HOME -name '*.a' -type f -delete +# OUI backup +rm -rf $ORACLE_HOME/inventory/backup/* +# Network tools help +rm -rf $ORACLE_HOME/network/tools/help/mgr/help_* +# Temp location +rm -rf /tmp/* +# Advised by Gerald Venzl +echo "Cleanup Advised by Gerald Venzl" +rm -rf $ORACLE_HOME/.patch_storage/* +rm -rf $ORACLE_HOME/R/* +rm -rf $ORACLE_HOME/assistants/* +rm -rf $ORACLE_HOME/cfgtoollogs/* +rm -rf $ORACLE_HOME/dmu/* +rm -rf $ORACLE_HOME/inventory/* +rm -rf $ORACLE_HOME/javavm/* +rm -rf $ORACLE_HOME/md/* +rm -rf $ORACLE_HOME/suptools/* +echo "Additional Cleanup by Jacek Gebal" +#additional cleanup- removes 1.2GB of DB-sources size - for small images only (no Java) +rm -rf $ORACLE_HOME/OPatch/ #OPatch --> Patching +rm -rf $ORACLE_HOME/crs/ #crs --> some clusterware single instance failover things +rm -rf $ORACLE_HOME/ctx/ #ctx --> Oracle Text (also used for JSON index) +rm -rf $ORACLE_HOME/cv/ #cv --> some patchign related stuff I think +rm -rf $ORACLE_HOME/has/ #has --> no clue +rm -rf $ORACLE_HOME/jdk/ #jdk --> Java jdk +rm -rf $ORACLE_HOME/jlib/ #jlib --> Java libraries +rm -rf $ORACLE_HOME/mgw/ #mgw --> Message gateway +rm -rf $ORACLE_HOME/odbc/ #odbc --> ODBC +rm -rf $ORACLE_HOME/olap/ #olap --> OLAP +rm -rf $ORACLE_HOME/ord/ #ord --> Multimedia I think +rm -rf $ORACLE_HOME/oui/ #oui --> Oracle Universal installer +rm -rf $ORACLE_HOME/owm/ #owm --> Workspace manger +rm -rf $ORACLE_HOME/perl/ #perl --> perl +rm -rf $ORACLE_HOME/precomp/ #precomp --> Not much clue either +rm -rf $ORACLE_HOME/sdk/ #sdk --> some more java I believe +rm -rf $ORACLE_HOME/sqlpatch/ #sqlpatch --> patching related stuff +rm -rf $ORACLE_HOME/usm/ #usm --> Universal storage management +rm -rf $ORACLE_HOME/rdbms/admin/cdb_cloud +rm -rf $ORACLE_HOME/rdbms/xml/em +rm -rf $ORACLE_HOME/relnotes +find $ORACLE_HOME -name '*.zip' -type f -delete +find $ORACLE_HOME -name '*.txt' -type f -delete +find $ORACLE_HOME -name '*O' -type f -delete +find $ORACLE_HOME -path '*/install/*' -delete +find $ORACLE_HOME -name 'install' -type d -delete + diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/createDB-slim.sh b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/createDB-slim.sh new file mode 100755 index 0000000000..3ca6392cc5 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/createDB-slim.sh @@ -0,0 +1,97 @@ +#!/bin/bash +# LICENSE UPL 1.0 +# +# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# +# Since: November, 2016 +# Author: gerald.venzl@oracle.com +# Description: Creates an Oracle Database based on following parameters: +# $ORACLE_SID: The Oracle SID and CDB name +# $ORACLE_PDB: The PDB name +# $ORACLE_PWD: The Oracle password +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. +# + +set -e + +# Check whether ORACLE_SID is passed on +export ORACLE_SID=${1:-ORCLCDB} + +# Check whether ORACLE_PDB is passed on +export ORACLE_PDB=${2:-ORCLPDB1} + +# Create network related config files (sqlnet.ora, tnsnames.ora, listener.ora) +mkdir -p $ORACLE_HOME/network/admin +echo "NAME.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME)" > $ORACLE_HOME/network/admin/sqlnet.ora + +# Listener.ora +echo "LISTENER = +(DESCRIPTION_LIST = + (DESCRIPTION = + (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + ) +) + +DEDICATED_THROUGH_BROKER_LISTENER=ON +DIAG_ADR_ENABLED = off +" > $ORACLE_HOME/network/admin/listener.ora + +# Start LISTENER and run DBCA +lsnrctl start + +echo "$ORACLE_SID=localhost:1521/$ORACLE_SID" > $ORACLE_HOME/network/admin/tnsnames.ora +echo "$ORACLE_PDB= + (DESCRIPTION = + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + (CONNECT_DATA = + (SERVER = DEDICATED) + (SERVICE_NAME = $ORACLE_PDB) + ) + )" >> $ORACLE_HOME/network/admin/tnsnames.ora + +# make some required directories it not exists +mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID +mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump +mkdir -p $ORACLE_BASE/fast_recovery_area + +# Check init-db.tar format +if [ -f /opt/oracle/scripts/setup/init-db.tar ]; then + (cd /opt/oracle/scripts/setup;tar xf init-db.tar) +fi; + +# Check init-db.tar.gz format +if [ -f /opt/oracle/scripts/setup/init-db.tar.gz ]; then + (cd /opt/oracle/scripts/setup;tar xfz init-db.tar.gz) +fi; + +# Check whether database already exists +if [ -f /opt/oracle/scripts/setup/spfile.bks ]; then + # start process of restore from rman full backup, first spfile + rman target /<> /etc/oratab +fi; diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.3.0/Dockerfile.slim b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/Dockerfile.slim new file mode 100644 index 0000000000..e2c5e25313 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/Dockerfile.slim @@ -0,0 +1,111 @@ +# LICENSE UPL 1.0 +# +# Copyright (c) 2018, 2020 Oracle and/or its affiliates. +# +# ORACLE DOCKERFILES PROJECT +# -------------------------- +# This is the Dockerfile for Oracle Database 18c +# +# REQUIRED FILES TO BUILD THIS IMAGE +# ---------------------------------- +# (1) db_home.zip +# Download Oracle Database 18c Enterprise Edition or Standard Edition 2 for Linux x64 +# from http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html +# +# HOW TO BUILD THIS IMAGE +# ----------------------- +# Put all downloaded files in the same directory as this Dockerfile +# Run: +# $ docker build --build-arg DB_EDITION=ee -t oracle/database:18.3.0-ee-slim -f Dockerfile.slim . +# +# Pull base image +# --------------- + +# Labels +# ------ +ARG DB_EDITION + +FROM oracle/database:18.3.0-${DB_EDITION} AS db-base +FROM oraclelinux:7-slim as base + +LABEL "provider"="Oracle" \ + "issues"="https://github.com/oracle/docker-images/issues" \ + "volume.data"="/opt/oracle/oradata" \ + "volume.setup.location1"="/opt/oracle/scripts/setup" \ + "volume.setup.location2"="/docker-entrypoint-initdb.d/setup" \ + "volume.startup.location1"="/opt/oracle/scripts/startup" \ + "volume.startup.location2"="/docker-entrypoint-initdb.d/startup" \ + "port.listener"="1521" \ + "port.oemexpress"="5500" + +# Environment variables required for this build (do NOT change) +# ------------------------------------------------------------- +ENV ORACLE_BASE=/opt/oracle \ + ORACLE_HOME=/opt/oracle/product/18c/dbhome_1 \ + INSTALL_DIR=/opt/install \ + INSTALL_FILE_1="LINUX.X64_180000_db_home.zip" \ + INSTALL_RSP="db_inst.rsp" \ + CONFIG_RSP="dbca.rsp.tmpl" \ + PWD_FILE="setPassword.sh" \ + RUN_FILE="runOracle.sh" \ + START_FILE="startDB.sh" \ + CREATE_DB_FILE="createDB-slim.sh" \ + CLR_FILE="cleanup.sh" \ + SETUP_LINUX_FILE="setupLinuxEnv.sh" \ + CHECK_SPACE_FILE="checkSpace.sh" \ + CHECK_DB_FILE="checkDBStatus.sh" \ + USER_SCRIPTS_FILE="runUserScripts.sh" \ + INSTALL_DB_BINARIES_FILE="installDBBinaries.sh" + +# Use second ENV so that variable get substituted +ENV PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch/:/usr/sbin:$PATH \ + LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib \ + CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib + +# Copy files needed during both installation and runtime +# ------------- +COPY $SETUP_LINUX_FILE $CHECK_SPACE_FILE $CLR_FILE $INSTALL_DIR/ +COPY $RUN_FILE $START_FILE $CREATE_DB_FILE $CONFIG_RSP $PWD_FILE $CHECK_DB_FILE $USER_SCRIPTS_FILE $ORACLE_BASE/ + +RUN chmod ug+x $INSTALL_DIR/*.sh && \ + sync && \ + $INSTALL_DIR/$CHECK_SPACE_FILE && \ + $INSTALL_DIR/$SETUP_LINUX_FILE + +############################################# +# ------------------------------------------- +# Start new stage for installing the database +# ------------------------------------------- +############################################# + +FROM base AS builder + +USER oracle +COPY --from=db-base $ORACLE_BASE $ORACLE_BASE + +USER root +RUN $INSTALL_DIR/$CLR_FILE && \ + rm -rf $INSTALL_DIR + +############################################# +# ------------------------------------------- +# Start new layer for database runtime +# ------------------------------------------- +############################################# + +FROM base + +USER root +COPY --chown=oracle:dba --from=builder $ORACLE_BASE $ORACLE_BASE +COPY --chown=oracle:dba --from=db-base /etc/oratab /etc/oratab +COPY --chown=oracle:dba --from=db-base /etc/oratab /opt/oracle +COPY --chown=root:root --from=db-base /opt/ORCLfmap /opt/ORCLfmap + +USER oracle +WORKDIR /home/oracle + +HEALTHCHECK --interval=1m --start-period=5m \ + CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 + +# Define default command to start Oracle Database. +CMD exec $ORACLE_BASE/$RUN_FILE diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.3.0/cleanup.sh b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/cleanup.sh new file mode 100755 index 0000000000..ca7683f1f3 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/cleanup.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# Remove not needed components +rm -rf $ORACLE_HOME/apex +rm -rf $ORACLE_HOME/jdbc +# ZDLRA installer files +rm -rf $ORACLE_HOME/lib/ra*.zip +rm -rf $ORACLE_HOME/ords +rm -rf $ORACLE_HOME/sqldeveloper +rm -rf $ORACLE_HOME/ucp +# as we won't install patches +rm -rf $ORACLE_HOME/lib/*.a +find $ORACLE_HOME -name '*.a' -type f -delete +# OUI backup +rm -rf $ORACLE_HOME/inventory/backup/* +# Network tools help +rm -rf $ORACLE_HOME/network/tools/help/mgr/help_* +# Temp location +rm -rf /tmp/* +# Advised by Gerald Venzl +echo "Cleanup Advised by Gerald Venzl" +rm -rf $ORACLE_HOME/.patch_storage/* +rm -rf $ORACLE_HOME/R/* +rm -rf $ORACLE_HOME/assistants/* +rm -rf $ORACLE_HOME/cfgtoollogs/* +rm -rf $ORACLE_HOME/dmu/* +rm -rf $ORACLE_HOME/inventory/* +rm -rf $ORACLE_HOME/javavm/* +rm -rf $ORACLE_HOME/md/* +rm -rf $ORACLE_HOME/suptools/* +echo "Additional Cleanup by Jacek Gebal" +#additional cleanup- removes 1.2GB of DB-sources size - for small images only (no Java) +rm -rf $ORACLE_HOME/OPatch/ #OPatch --> Patching +rm -rf $ORACLE_HOME/crs/ #crs --> some clusterware single instance failover things +rm -rf $ORACLE_HOME/ctx/ #ctx --> Oracle Text (also used for JSON index) +rm -rf $ORACLE_HOME/cv/ #cv --> some patchign related stuff I think +rm -rf $ORACLE_HOME/has/ #has --> no clue +rm -rf $ORACLE_HOME/jdk/ #jdk --> Java jdk +rm -rf $ORACLE_HOME/jlib/ #jlib --> Java libraries +rm -rf $ORACLE_HOME/mgw/ #mgw --> Message gateway +rm -rf $ORACLE_HOME/odbc/ #odbc --> ODBC +rm -rf $ORACLE_HOME/olap/ #olap --> OLAP +rm -rf $ORACLE_HOME/ord/ #ord --> Multimedia I think +rm -rf $ORACLE_HOME/oui/ #oui --> Oracle Universal installer +rm -rf $ORACLE_HOME/owm/ #owm --> Workspace manger +rm -rf $ORACLE_HOME/perl/ #perl --> perl +rm -rf $ORACLE_HOME/precomp/ #precomp --> Not much clue either +rm -rf $ORACLE_HOME/sdk/ #sdk --> some more java I believe +rm -rf $ORACLE_HOME/sqlpatch/ #sqlpatch --> patching related stuff +rm -rf $ORACLE_HOME/usm/ #usm --> Universal storage management +rm -rf $ORACLE_HOME/rdbms/admin/cdb_cloud +rm -rf $ORACLE_HOME/rdbms/xml/em +rm -rf $ORACLE_HOME/relnotes +find $ORACLE_HOME -name '*.zip' -type f -delete +find $ORACLE_HOME -name '*.txt' -type f -delete +find $ORACLE_HOME -name '*O' -type f -delete +find $ORACLE_HOME -path '*/install/*' -delete +find $ORACLE_HOME -name 'install' -type d -delete + diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.3.0/createDB-slim.sh b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/createDB-slim.sh new file mode 100755 index 0000000000..3ca6392cc5 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/createDB-slim.sh @@ -0,0 +1,97 @@ +#!/bin/bash +# LICENSE UPL 1.0 +# +# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# +# Since: November, 2016 +# Author: gerald.venzl@oracle.com +# Description: Creates an Oracle Database based on following parameters: +# $ORACLE_SID: The Oracle SID and CDB name +# $ORACLE_PDB: The PDB name +# $ORACLE_PWD: The Oracle password +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. +# + +set -e + +# Check whether ORACLE_SID is passed on +export ORACLE_SID=${1:-ORCLCDB} + +# Check whether ORACLE_PDB is passed on +export ORACLE_PDB=${2:-ORCLPDB1} + +# Create network related config files (sqlnet.ora, tnsnames.ora, listener.ora) +mkdir -p $ORACLE_HOME/network/admin +echo "NAME.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME)" > $ORACLE_HOME/network/admin/sqlnet.ora + +# Listener.ora +echo "LISTENER = +(DESCRIPTION_LIST = + (DESCRIPTION = + (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + ) +) + +DEDICATED_THROUGH_BROKER_LISTENER=ON +DIAG_ADR_ENABLED = off +" > $ORACLE_HOME/network/admin/listener.ora + +# Start LISTENER and run DBCA +lsnrctl start + +echo "$ORACLE_SID=localhost:1521/$ORACLE_SID" > $ORACLE_HOME/network/admin/tnsnames.ora +echo "$ORACLE_PDB= + (DESCRIPTION = + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + (CONNECT_DATA = + (SERVER = DEDICATED) + (SERVICE_NAME = $ORACLE_PDB) + ) + )" >> $ORACLE_HOME/network/admin/tnsnames.ora + +# make some required directories it not exists +mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID +mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump +mkdir -p $ORACLE_BASE/fast_recovery_area + +# Check init-db.tar format +if [ -f /opt/oracle/scripts/setup/init-db.tar ]; then + (cd /opt/oracle/scripts/setup;tar xf init-db.tar) +fi; + +# Check init-db.tar.gz format +if [ -f /opt/oracle/scripts/setup/init-db.tar.gz ]; then + (cd /opt/oracle/scripts/setup;tar xfz init-db.tar.gz) +fi; + +# Check whether database already exists +if [ -f /opt/oracle/scripts/setup/spfile.bks ]; then + # start process of restore from rman full backup, first spfile + rman target /<> /etc/oratab +fi; diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.4.0/Dockerfile.slim b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/Dockerfile.slim new file mode 100644 index 0000000000..fe65cf9ec4 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/Dockerfile.slim @@ -0,0 +1,101 @@ +# LICENSE UPL 1.0 +# +# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# +# ORACLE DOCKERFILES PROJECT +# -------------------------- +# This is the Dockerfile for Oracle Database 18c Express Edition +# +# REQUIRED FILES TO BUILD THIS IMAGE +# ---------------------------------- +# None +# +# HOW TO BUILD THIS IMAGE +# ----------------------- +# Put the downloaded file in the same directory as this Dockerfile +# Run: +# $ docker build -t oracle/database:18.4.0-xe-slim -f Dockerfile.slim . +# Sample usage with init-db directory having an RMAN full backup: +# $ docker run -ti --rm --name testdb -v /home/init-db:/opt/oracle/scripts/setup -v /run/shm:/dev/shm oracle/database:18.4.0-xe-slim +# passing init-db.tar.gz with a full RMAN backup initial db +# $ docker run -ti --rm --name testdb -v /home/init-db.tar.gz:/opt/oracle/scripts/setup/init-db.tar.gz -v /run/shm:/dev/shm oracle/database:18.4.0-xe-slim +# +# Pull base image +# --------------- +FROM oracle/database:18.4.0-xe AS db-xe +FROM oraclelinux:7-slim AS baseOS + +# Labels +# ------ +LABEL "provider"="Oracle" \ + "issues"="https://github.com/oracle/docker-images/issues" \ + "volume.data"="/opt/oracle/oradata" \ + "volume.setup.location1"="/opt/oracle/scripts/setup" \ + "volume.setup.location2"="/docker-entrypoint-initdb.d/setup" \ + "volume.startup.location1"="/opt/oracle/scripts/startup" \ + "volume.startup.location2"="/docker-entrypoint-initdb.d/startup" \ + "port.listener"="1521" \ + "port.oemexpress"="5500" \ + "port.apex"="8080" + +# Environment variables required for this build (do NOT change) +# ------------------------------------------------------------- +ENV ORACLE_BASE=/opt/oracle \ + ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE \ + ORACLE_SID=XE \ + INSTALL_FILE_1="https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm" \ + RUN_FILE="runOracle-slim.sh" \ + PWD_FILE="setPassword.sh" \ + CLR_FILE="cleanup.sh" \ + CONF_FILE="oracle-xe-18c.conf" \ + CHECK_SPACE_FILE="checkSpace.sh" \ + CHECK_DB_FILE="checkDBStatus.sh" \ + INSTALL_DIR="$HOME/install" \ + ORACLE_DOCKER_INSTALL="true" + +# Use second ENV so that variable get substituted +ENV PATH=$ORACLE_HOME/bin:$PATH + +RUN yum -y install openssl file oracle-database-preinstall-18c && \ + rm -rf /var/cache/yum + +FROM baseOS AS baseInstall +# Copy Oracle XE installation +# ------------- +COPY $CLR_FILE $INSTALL_DIR/ + +COPY --from=db-xe --chown=oracle:oinstall $ORACLE_BASE/ $ORACLE_BASE/ +COPY --from=db-xe --chown=oracle:oinstall /etc/oratab /etc/oratab +COPY --from=db-xe --chown=root:root /etc/init.d/oracle-xe-18c /etc/init.d/oracle-xe-18c +COPY --from=db-xe --chown=root:root /etc/sysconfig/$CONF_FILE /etc/sysconfig/$CONF_FILE +COPY --from=db-xe --chown=root:root /opt/ORCLfmap /opt/ORCLfmap + +RUN chmod +x $INSTALL_DIR/$CLR_FILE && \ + $INSTALL_DIR/$CLR_FILE + +FROM baseOS + +COPY --from=baseInstall $ORACLE_BASE/ $ORACLE_BASE/ +COPY --from=baseInstall /etc/oratab /etc/oratab +COPY --from=baseInstall /etc/init.d/oracle-xe-18c /etc/init.d/oracle-xe-18c +COPY --from=baseInstall /etc/sysconfig/$CONF_FILE /etc/sysconfig/$CONF_FILE +COPY --from=baseInstall /opt/ORCLfmap /opt/ORCLfmap +COPY $RUN_FILE $PWD_FILE $CHECK_DB_FILE $CONF_FILE $ORACLE_BASE/ + +RUN mkdir -p /home/oracle && \ + chown -R oracle:oinstall /home/oracle && \ + chown oracle:oinstall $ORACLE_BASE && \ + sed -i -r 's/^(session\s+required\s+pam_limits.so)/#\1/' /etc/pam.d/* && \ + ln -s $ORACLE_BASE/$PWD_FILE / && \ + rm -rf /var/lib/rpm/* && \ + rm -rf /var/log/* && \ + ln -s $ORACLE_BASE/scripts /docker-entrypoint-initdb.d && \ + cd $HOME && \ + chmod ug+x $ORACLE_BASE/*.sh + +VOLUME ["$ORACLE_BASE/oradata"] +EXPOSE 1521 8080 5500 +HEALTHCHECK --interval=1m --start-period=20m \ + CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 + +CMD exec $ORACLE_BASE/$RUN_FILE diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.4.0/cleanup.sh b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/cleanup.sh new file mode 100644 index 0000000000..ca7683f1f3 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/cleanup.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# Remove not needed components +rm -rf $ORACLE_HOME/apex +rm -rf $ORACLE_HOME/jdbc +# ZDLRA installer files +rm -rf $ORACLE_HOME/lib/ra*.zip +rm -rf $ORACLE_HOME/ords +rm -rf $ORACLE_HOME/sqldeveloper +rm -rf $ORACLE_HOME/ucp +# as we won't install patches +rm -rf $ORACLE_HOME/lib/*.a +find $ORACLE_HOME -name '*.a' -type f -delete +# OUI backup +rm -rf $ORACLE_HOME/inventory/backup/* +# Network tools help +rm -rf $ORACLE_HOME/network/tools/help/mgr/help_* +# Temp location +rm -rf /tmp/* +# Advised by Gerald Venzl +echo "Cleanup Advised by Gerald Venzl" +rm -rf $ORACLE_HOME/.patch_storage/* +rm -rf $ORACLE_HOME/R/* +rm -rf $ORACLE_HOME/assistants/* +rm -rf $ORACLE_HOME/cfgtoollogs/* +rm -rf $ORACLE_HOME/dmu/* +rm -rf $ORACLE_HOME/inventory/* +rm -rf $ORACLE_HOME/javavm/* +rm -rf $ORACLE_HOME/md/* +rm -rf $ORACLE_HOME/suptools/* +echo "Additional Cleanup by Jacek Gebal" +#additional cleanup- removes 1.2GB of DB-sources size - for small images only (no Java) +rm -rf $ORACLE_HOME/OPatch/ #OPatch --> Patching +rm -rf $ORACLE_HOME/crs/ #crs --> some clusterware single instance failover things +rm -rf $ORACLE_HOME/ctx/ #ctx --> Oracle Text (also used for JSON index) +rm -rf $ORACLE_HOME/cv/ #cv --> some patchign related stuff I think +rm -rf $ORACLE_HOME/has/ #has --> no clue +rm -rf $ORACLE_HOME/jdk/ #jdk --> Java jdk +rm -rf $ORACLE_HOME/jlib/ #jlib --> Java libraries +rm -rf $ORACLE_HOME/mgw/ #mgw --> Message gateway +rm -rf $ORACLE_HOME/odbc/ #odbc --> ODBC +rm -rf $ORACLE_HOME/olap/ #olap --> OLAP +rm -rf $ORACLE_HOME/ord/ #ord --> Multimedia I think +rm -rf $ORACLE_HOME/oui/ #oui --> Oracle Universal installer +rm -rf $ORACLE_HOME/owm/ #owm --> Workspace manger +rm -rf $ORACLE_HOME/perl/ #perl --> perl +rm -rf $ORACLE_HOME/precomp/ #precomp --> Not much clue either +rm -rf $ORACLE_HOME/sdk/ #sdk --> some more java I believe +rm -rf $ORACLE_HOME/sqlpatch/ #sqlpatch --> patching related stuff +rm -rf $ORACLE_HOME/usm/ #usm --> Universal storage management +rm -rf $ORACLE_HOME/rdbms/admin/cdb_cloud +rm -rf $ORACLE_HOME/rdbms/xml/em +rm -rf $ORACLE_HOME/relnotes +find $ORACLE_HOME -name '*.zip' -type f -delete +find $ORACLE_HOME -name '*.txt' -type f -delete +find $ORACLE_HOME -name '*O' -type f -delete +find $ORACLE_HOME -path '*/install/*' -delete +find $ORACLE_HOME -name 'install' -type d -delete + diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.4.0/runOracle-slim.sh b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/runOracle-slim.sh new file mode 100644 index 0000000000..0876489347 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/runOracle-slim.sh @@ -0,0 +1,253 @@ +#!/bin/bash + +############# Execute custom scripts ############## +function runUserScripts { + + SCRIPTS_ROOT="$1"; + + # Check whether parameter has been passed on + if [ -z "$SCRIPTS_ROOT" ]; then + echo "$0: No SCRIPTS_ROOT passed on, no scripts will be run"; + exit 1; + fi; + + # Execute custom provided files (only if directory exists and has files in it) + if [ -d "$SCRIPTS_ROOT" ] && [ -n "$(ls -A $SCRIPTS_ROOT)" ]; then + + echo ""; + echo "Executing user defined scripts" + + for f in $SCRIPTS_ROOT/*; do + case "$f" in + *.sh) echo "$0: running $f"; . "$f" ;; + *.sql) echo "$0: running $f"; echo "exit" | su -p oracle -c "$ORACLE_HOME/bin/sqlplus / as sysdba @$f"; echo ;; + *) echo "$0: ignoring $f" ;; + esac + echo ""; + done + + echo "DONE: Executing user defined scripts" + echo ""; + + fi; + +} + +########### Move DB files ############ +function moveFiles { + if [ ! -d $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID ]; then + su -p oracle -c "mkdir -p $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/" + fi; + + su -p oracle -c "mv $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/" + su -p oracle -c "mv $ORACLE_HOME/dbs/orapw$ORACLE_SID $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/" + su -p oracle -c "mv $ORACLE_HOME/network/admin/listener.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/" + su -p oracle -c "mv $ORACLE_HOME/network/admin/tnsnames.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/" + + cp /etc/oratab $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/ + + symLinkFiles; +} + +########### Symbolic link DB files ############ +function symLinkFiles { + + if [ ! -L $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora ]; then + ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/spfile$ORACLE_SID.ora $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora + fi; + + if [ ! -L $ORACLE_HOME/dbs/orapw$ORACLE_SID ]; then + ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/orapw$ORACLE_SID $ORACLE_HOME/dbs/orapw$ORACLE_SID + fi; + + if [ ! -L $ORACLE_HOME/network/admin/listener.ora ]; then + ln -sf $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/listener.ora $ORACLE_HOME/network/admin/listener.ora + fi; + + if [ ! -L $ORACLE_HOME/network/admin/tnsnames.ora ]; then + ln -sf $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora + fi; + + cp $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/oratab /etc/oratab +} + +########### SIGTERM handler ############ +function _term() { + echo "Stopping container." + echo "SIGTERM received, shutting down database!" + /etc/init.d/oracle-xe-18c stop +} + +########### SIGKILL handler ############ +function _kill() { + echo "SIGKILL received, shutting down database!" + /etc/init.d/oracle-xe-18c stop +} + +############# Create DB ################ +function createDB { + # Auto generate ORACLE PWD if not passed on + export ORACLE_PWD=${ORACLE_PWD:-"`openssl rand -hex 8`"} + echo "ORACLE PASSWORD FOR SYS AND SYSTEM: $ORACLE_PWD"; + + # Set character set + export ORACLE_CHARACTERSET=${ORACLE_CHARACTERSET:-AL32UTF8} + sed -i -e "s|###ORACLE_CHARACTERSET###|$ORACLE_CHARACTERSET|g" /etc/sysconfig/$CONF_FILE + + + # Listener + echo "# listener.ora Network Configuration File: + + SID_LIST_LISTENER = + (SID_LIST = + (SID_DESC = + (SID_NAME = PLSExtProc) + (ORACLE_HOME = $ORACLE_HOME) + (PROGRAM = extproc) + ) + ) + + LISTENER = + (DESCRIPTION_LIST = + (DESCRIPTION = + (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + ) + ) + + DEFAULT_SERVICE_LISTENER = (XE)" > $ORACLE_HOME/network/admin/listener.ora + +# TNS Names.ora + echo "# tnsnames.ora Network Configuration File: + +XE = + (DESCRIPTION = + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + (CONNECT_DATA = + (SERVER = DEDICATED) + (SERVICE_NAME = XE) + ) + ) + +LISTENER_XE = + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + +XEPDB1 = + (DESCRIPTION = + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + (CONNECT_DATA = + (SERVER = DEDICATED) + (SERVICE_NAME = XEPDB1) + ) + ) + +EXTPROC_CONNECTION_DATA = + (DESCRIPTION = + (ADDRESS_LIST = + (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) + ) + (CONNECT_DATA = + (SID = PLSExtProc) + (PRESENTATION = RO) + ) + ) +" > $ORACLE_HOME/network/admin/tnsnames.ora + su -p oracle -c "lsnrctl start" + + # make some required directories it not exists + su -p oracle -c "mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID" + su -p oracle -c "mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump" + su -p oracle -c "mkdir -p $ORACLE_BASE/fast_recovery_area" + + # Check init-db.tar format + if [ -f /opt/oracle/scripts/setup/init-db.tar ]; then + (cd /opt/oracle/scripts/setup;tar xf init-db.tar) + fi; + + # Check init-db.tar.gz format + if [ -f /opt/oracle/scripts/setup/init-db.tar.gz ]; then + (cd /opt/oracle/scripts/setup;tar xfz init-db.tar.gz) + fi; + + # Check whether database already exists + if [ -f /opt/oracle/scripts/setup/spfile.bks ]; then + # start process of restore from rman full backup, first spfile + su -p oracle -c "rman target /<> /etc/oratab + fi; + # Move database operational files to oradata + moveFiles; +} + +############# MAIN ################ + +# Set SIGTERM handler +trap _term SIGTERM + +# Set SIGKILL handler +trap _kill SIGKILL + +# Check whether database already exists +if [ -d $ORACLE_BASE/oradata/$ORACLE_SID ]; then + symLinkFiles; + # Make sure audit file destination exists + if [ ! -d $ORACLE_BASE/admin/$ORACLE_SID/adump ]; then + su -p oracle -c "mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump" + fi; +fi; + +/etc/init.d/oracle-xe-18c start | grep -qc "Oracle Database is not configured" +if [ "$?" == "0" ]; then + # Create database + createDB; + + # Execute custom provided setup scripts + runUserScripts $ORACLE_BASE/scripts/setup +fi; + +# Check whether database is up and running +$ORACLE_BASE/$CHECK_DB_FILE +if [ $? -eq 0 ]; then + echo "#########################" + echo "DATABASE IS READY TO USE!" + echo "#########################" + + # Execute custom provided startup scripts + runUserScripts $ORACLE_BASE/scripts/startup + +else + echo "#####################################" + echo "########### E R R O R ###############" + echo "DATABASE SETUP WAS NOT SUCCESSFUL!" + echo "Please check output for further info!" + echo "########### E R R O R ###############" + echo "#####################################" +fi; + +echo "The following output is now a tail of the alert.log:" +tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert*.log & +childPID=$! +wait $childPID diff --git a/OracleDatabase/SingleInstance/dockerfiles/19.3.0/Dockerfile.slim b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/Dockerfile.slim new file mode 100644 index 0000000000..8c937157ee --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/Dockerfile.slim @@ -0,0 +1,111 @@ +# LICENSE UPL 1.0 +# +# Copyright (c) 2018, 2020 Oracle and/or its affiliates. +# +# ORACLE DOCKERFILES PROJECT +# -------------------------- +# This is the Dockerfile for Oracle Database 18c +# +# REQUIRED FILES TO BUILD THIS IMAGE +# ---------------------------------- +# (1) db_home.zip +# Download Oracle Database 18c Enterprise Edition or Standard Edition 2 for Linux x64 +# from http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html +# +# HOW TO BUILD THIS IMAGE +# ----------------------- +# Put all downloaded files in the same directory as this Dockerfile +# Run: +# $ docker build --build-arg DB_EDITION=ee -t oracle/database:19.3.0-ee-slim -f Dockerfile.slim . +# +# Pull base image +# --------------- + +# Labels +# ------ +ARG DB_EDITION + +FROM oracle/database:19.3.0-${DB_EDITION} AS db-base +FROM oraclelinux:7-slim as base + +LABEL "provider"="Oracle" \ + "issues"="https://github.com/oracle/docker-images/issues" \ + "volume.data"="/opt/oracle/oradata" \ + "volume.setup.location1"="/opt/oracle/scripts/setup" \ + "volume.setup.location2"="/docker-entrypoint-initdb.d/setup" \ + "volume.startup.location1"="/opt/oracle/scripts/startup" \ + "volume.startup.location2"="/docker-entrypoint-initdb.d/startup" \ + "port.listener"="1521" \ + "port.oemexpress"="5500" + +# Environment variables required for this build (do NOT change) +# ------------------------------------------------------------- +ENV ORACLE_BASE=/opt/oracle \ + ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 \ + INSTALL_DIR=/opt/install \ + INSTALL_FILE_1="LINUX.X64_193000_db_home.zip" \ + INSTALL_RSP="db_inst.rsp" \ + CONFIG_RSP="dbca.rsp.tmpl" \ + PWD_FILE="setPassword.sh" \ + RUN_FILE="runOracle.sh" \ + START_FILE="startDB.sh" \ + CREATE_DB_FILE="createDB-slim.sh" \ + CLR_FILE="cleanup.sh" \ + SETUP_LINUX_FILE="setupLinuxEnv.sh" \ + CHECK_SPACE_FILE="checkSpace.sh" \ + CHECK_DB_FILE="checkDBStatus.sh" \ + USER_SCRIPTS_FILE="runUserScripts.sh" \ + INSTALL_DB_BINARIES_FILE="installDBBinaries.sh" + +# Use second ENV so that variable get substituted +ENV PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch/:/usr/sbin:$PATH \ + LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib \ + CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib + +# Copy files needed during both installation and runtime +# ------------- +COPY $SETUP_LINUX_FILE $CHECK_SPACE_FILE $CLR_FILE $INSTALL_DIR/ +COPY $RUN_FILE $START_FILE $CREATE_DB_FILE $CONFIG_RSP $PWD_FILE $CHECK_DB_FILE $USER_SCRIPTS_FILE $ORACLE_BASE/ + +RUN chmod ug+x $INSTALL_DIR/*.sh && \ + sync && \ + $INSTALL_DIR/$CHECK_SPACE_FILE && \ + $INSTALL_DIR/$SETUP_LINUX_FILE + +############################################# +# ------------------------------------------- +# Start new stage for installing the database +# ------------------------------------------- +############################################# + +FROM base AS builder + +USER oracle +COPY --from=db-base $ORACLE_BASE $ORACLE_BASE + +USER root +RUN $INSTALL_DIR/$CLR_FILE && \ + rm -rf $INSTALL_DIR + +############################################# +# ------------------------------------------- +# Start new layer for database runtime +# ------------------------------------------- +############################################# + +FROM base + +USER root +COPY --chown=oracle:dba --from=builder $ORACLE_BASE $ORACLE_BASE +COPY --chown=oracle:dba --from=db-base /etc/oratab /etc/oratab +COPY --chown=oracle:dba --from=db-base /etc/oratab /opt/oracle +COPY --chown=root:root --from=db-base /opt/ORCLfmap /opt/ORCLfmap + +USER oracle +WORKDIR /home/oracle + +HEALTHCHECK --interval=1m --start-period=5m \ + CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 + +# Define default command to start Oracle Database. +CMD exec $ORACLE_BASE/$RUN_FILE diff --git a/OracleDatabase/SingleInstance/dockerfiles/19.3.0/cleanup.sh b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/cleanup.sh new file mode 100755 index 0000000000..ca7683f1f3 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/cleanup.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# Remove not needed components +rm -rf $ORACLE_HOME/apex +rm -rf $ORACLE_HOME/jdbc +# ZDLRA installer files +rm -rf $ORACLE_HOME/lib/ra*.zip +rm -rf $ORACLE_HOME/ords +rm -rf $ORACLE_HOME/sqldeveloper +rm -rf $ORACLE_HOME/ucp +# as we won't install patches +rm -rf $ORACLE_HOME/lib/*.a +find $ORACLE_HOME -name '*.a' -type f -delete +# OUI backup +rm -rf $ORACLE_HOME/inventory/backup/* +# Network tools help +rm -rf $ORACLE_HOME/network/tools/help/mgr/help_* +# Temp location +rm -rf /tmp/* +# Advised by Gerald Venzl +echo "Cleanup Advised by Gerald Venzl" +rm -rf $ORACLE_HOME/.patch_storage/* +rm -rf $ORACLE_HOME/R/* +rm -rf $ORACLE_HOME/assistants/* +rm -rf $ORACLE_HOME/cfgtoollogs/* +rm -rf $ORACLE_HOME/dmu/* +rm -rf $ORACLE_HOME/inventory/* +rm -rf $ORACLE_HOME/javavm/* +rm -rf $ORACLE_HOME/md/* +rm -rf $ORACLE_HOME/suptools/* +echo "Additional Cleanup by Jacek Gebal" +#additional cleanup- removes 1.2GB of DB-sources size - for small images only (no Java) +rm -rf $ORACLE_HOME/OPatch/ #OPatch --> Patching +rm -rf $ORACLE_HOME/crs/ #crs --> some clusterware single instance failover things +rm -rf $ORACLE_HOME/ctx/ #ctx --> Oracle Text (also used for JSON index) +rm -rf $ORACLE_HOME/cv/ #cv --> some patchign related stuff I think +rm -rf $ORACLE_HOME/has/ #has --> no clue +rm -rf $ORACLE_HOME/jdk/ #jdk --> Java jdk +rm -rf $ORACLE_HOME/jlib/ #jlib --> Java libraries +rm -rf $ORACLE_HOME/mgw/ #mgw --> Message gateway +rm -rf $ORACLE_HOME/odbc/ #odbc --> ODBC +rm -rf $ORACLE_HOME/olap/ #olap --> OLAP +rm -rf $ORACLE_HOME/ord/ #ord --> Multimedia I think +rm -rf $ORACLE_HOME/oui/ #oui --> Oracle Universal installer +rm -rf $ORACLE_HOME/owm/ #owm --> Workspace manger +rm -rf $ORACLE_HOME/perl/ #perl --> perl +rm -rf $ORACLE_HOME/precomp/ #precomp --> Not much clue either +rm -rf $ORACLE_HOME/sdk/ #sdk --> some more java I believe +rm -rf $ORACLE_HOME/sqlpatch/ #sqlpatch --> patching related stuff +rm -rf $ORACLE_HOME/usm/ #usm --> Universal storage management +rm -rf $ORACLE_HOME/rdbms/admin/cdb_cloud +rm -rf $ORACLE_HOME/rdbms/xml/em +rm -rf $ORACLE_HOME/relnotes +find $ORACLE_HOME -name '*.zip' -type f -delete +find $ORACLE_HOME -name '*.txt' -type f -delete +find $ORACLE_HOME -name '*O' -type f -delete +find $ORACLE_HOME -path '*/install/*' -delete +find $ORACLE_HOME -name 'install' -type d -delete + diff --git a/OracleDatabase/SingleInstance/dockerfiles/19.3.0/createDB-slim.sh b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/createDB-slim.sh new file mode 100755 index 0000000000..3ca6392cc5 --- /dev/null +++ b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/createDB-slim.sh @@ -0,0 +1,97 @@ +#!/bin/bash +# LICENSE UPL 1.0 +# +# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved. +# +# Since: November, 2016 +# Author: gerald.venzl@oracle.com +# Description: Creates an Oracle Database based on following parameters: +# $ORACLE_SID: The Oracle SID and CDB name +# $ORACLE_PDB: The PDB name +# $ORACLE_PWD: The Oracle password +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. +# + +set -e + +# Check whether ORACLE_SID is passed on +export ORACLE_SID=${1:-ORCLCDB} + +# Check whether ORACLE_PDB is passed on +export ORACLE_PDB=${2:-ORCLPDB1} + +# Create network related config files (sqlnet.ora, tnsnames.ora, listener.ora) +mkdir -p $ORACLE_HOME/network/admin +echo "NAME.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME)" > $ORACLE_HOME/network/admin/sqlnet.ora + +# Listener.ora +echo "LISTENER = +(DESCRIPTION_LIST = + (DESCRIPTION = + (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + ) +) + +DEDICATED_THROUGH_BROKER_LISTENER=ON +DIAG_ADR_ENABLED = off +" > $ORACLE_HOME/network/admin/listener.ora + +# Start LISTENER and run DBCA +lsnrctl start + +echo "$ORACLE_SID=localhost:1521/$ORACLE_SID" > $ORACLE_HOME/network/admin/tnsnames.ora +echo "$ORACLE_PDB= + (DESCRIPTION = + (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) + (CONNECT_DATA = + (SERVER = DEDICATED) + (SERVICE_NAME = $ORACLE_PDB) + ) + )" >> $ORACLE_HOME/network/admin/tnsnames.ora + +# make some required directories it not exists +mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID +mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump +mkdir -p $ORACLE_BASE/fast_recovery_area + +# Check init-db.tar format +if [ -f /opt/oracle/scripts/setup/init-db.tar ]; then + (cd /opt/oracle/scripts/setup;tar xf init-db.tar) +fi; + +# Check init-db.tar.gz format +if [ -f /opt/oracle/scripts/setup/init-db.tar.gz ]; then + (cd /opt/oracle/scripts/setup;tar xfz init-db.tar.gz) +fi; + +# Check whether database already exists +if [ -f /opt/oracle/scripts/setup/spfile.bks ]; then + # start process of restore from rman full backup, first spfile + rman target /<> /etc/oratab +fi; diff --git a/OracleDatabase/SingleInstance/dockerfiles/buildDockerImage.sh b/OracleDatabase/SingleInstance/dockerfiles/buildContainerImage.sh similarity index 90% rename from OracleDatabase/SingleInstance/dockerfiles/buildDockerImage.sh rename to OracleDatabase/SingleInstance/dockerfiles/buildContainerImage.sh index 77a118c240..907b56eff9 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/buildDockerImage.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/buildContainerImage.sh @@ -12,7 +12,7 @@ usage() { cat << EOF -Usage: buildDockerImage.sh -v [version] [-e | -s | -x] [-i] [-o] [Docker build option] +Usage: buildDockerImage.sh -v [version] [-e | -s | -x] [-i] [-o] [-l] [Docker build option] Builds a Docker Image for Oracle Database. Parameters: @@ -21,6 +21,7 @@ Parameters: -e: creates image based on 'Enterprise Edition' -s: creates image based on 'Standard Edition 2' -x: creates image based on 'Express Edition' + -l: creates slim images based on 'Enterprise Edition' or 'Express Edition' -i: ignores the MD5 checksums -o: passes on Docker build option @@ -97,13 +98,14 @@ DOCKEROPS="" MIN_DOCKER_VERSION="17.09" MIN_PODMAN_VERSION="1.6.0" DOCKERFILE="Dockerfile" +SLIM=0 if [ "$#" -eq 0 ]; then usage; exit 1; fi -while getopts "hesxiv:o:" optname; do +while getopts "hlesxiv:o:" optname; do case "$optname" in "h") usage @@ -121,6 +123,9 @@ while getopts "hesxiv:o:" optname; do "x") EXPRESS=1 ;; + "l") + SLIM=1 + ;; "v") VERSION="$OPTARG" ;; @@ -161,13 +166,18 @@ elif [ $EXPRESS -eq 1 ]; then fi; # Which Dockerfile should be used? -if [ "$VERSION" == "12.1.0.2" ] || [ "$VERSION" == "11.2.0.2" ] || [ "$VERSION" == "18.4.0" ]; then - DOCKERFILE="$DOCKERFILE.$EDITION" +if [ $SLIM -eq 1 ]; then + DOCKERFILE="$DOCKERFILE.slim" + # Oracle Database Image Nameorigin + IMAGE_NAME="oracle/database:$VERSION-$EDITION-slim"; +else + if [ "$VERSION" == "12.1.0.2" ] || [ "$VERSION" == "11.2.0.2" ] || [ "$VERSION" == "18.4.0" ]; then + DOCKERFILE="$DOCKERFILE.$EDITION" + fi; + # Oracle Database Image Nameorigin + IMAGE_NAME="oracle/database:$VERSION-$EDITION"; fi; -# Oracle Database Image Name -IMAGE_NAME="oracle/database:$VERSION-$EDITION" - # Go into version folder cd "$VERSION" || { echo "Could not find version directory '$VERSION'";