-
Notifications
You must be signed in to change notification settings - Fork 5.5k
/
Copy pathDockerfile
155 lines (142 loc) · 6.41 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#
# Copyright (c) 2020, 2023, Oracle and/or its affiliates.
#
# Licensed under the Universal Permissive License v 1.0 as shown at
# https://oss.oracle.com/licenses/upl.
#
# ORACLE DOCKERFILES PROJECT
# --------------------------
# This is the Dockerfile for Oracle Unified Directory Service Manager (OUDSM)
#
# REQUIRED FILES TO BUILD THIS IMAGE
# ----------------------------------
# See oud.download file
# Also see patches.download file in the patches directory
# ------------------------------------------------------------
# Pull base image
# ---------------
FROM oracle/fmw-infrastructure:12.2.1.4.0 as base
# Maintainer
# ----------
LABEL "maintainer"="Oracle Unified Directory team" \
"provider"="Oracle" \
"issues"="https://github.com/oracle/docker-images/issues" \
"volume.user_projects"="/opt/oracle/user_projects" \
"port.admin"="7001" \
"port.adminSsl"="7002"
#
# Environment variables required for this build (do NOT change)
# -------------------------------------------------------------
ENV FMW_OUD_JAR=fmw_12.2.1.4.0_oud.jar \
BASE_DIR=/u01 \
ORACLE_HOME=/u01/oracle \
SCRIPT_DIR=/u01/oracle/container-scripts \
HEALTH_SCRIPT_FILE=/u01/oracle/container-scripts/get_healthcheck_url.sh \
PROPS_DIR=/u01/oracle/properties \
PATCHES_BASE_DIR=/tmp/oracle_patches \
VOLUME_DIR=/u01/oracle/user_projects \
DOMAIN_NAME="${DOMAIN_NAME:-base_domain}" \
ADMIN_USER="${ADMIN_USER:-}" \
ADMIN_PASS="${ADMIN_PASS:-}" \
DOMAIN_ROOT="${DOMAIN_ROOT:-/u01/oracle/user_projects/domains}" \
DOMAIN_HOME="${DOMAIN_ROOT:-/u01/oracle/user_projects/domains}"/"${DOMAIN_NAME:-base_domain}" \
ADMIN_PORT="${ADMIN_PORT:-7001}" \
ADMIN_SSL_PORT="${ADMIN_SSL_PORT:-7002}" \
DOMAIN_TYPE="oudsm" \
USER_MEM_ARGS=${USER_MEM_ARGS:-"-Djava.security.egd=file:/dev/./urandom"} \
JAVA_OPTIONS="${JAVA_OPTIONS} -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true" \
PATH=$PATH:/usr/java/default/bin:/u01/oracle/oracle_common/common/bin:/u01/oracle/wlserver/common/bin:/u01/oracle/container-scripts
#
# Creation of User, Directories and Installation of OS packages
# ----------------------------------------------------------------
USER root
RUN mkdir -p ${BASE_DIR} && \
mkdir -p ${PATCHES_BASE_DIR}/opatch_patch && \
mkdir -p ${PATCHES_BASE_DIR}/patches && \
chmod a+xr ${BASE_DIR} && chown oracle:root ${BASE_DIR} && \
chmod -R a+xr ${PATCHES_BASE_DIR} && chown -R oracle:root ${PATCHES_BASE_DIR} && \
mkdir -p ${VOLUME_DIR} && \
chown -R oracle:root ${VOLUME_DIR} && chmod -R 770 ${VOLUME_DIR} && \
mkdir -p ${SCRIPT_DIR} && chown oracle:root ${SCRIPT_DIR} && \
mkdir -p ${PROPS_DIR} && chown oracle:root ${PROPS_DIR} && \
yum install -y libaio hostname perl && \
rm -rf /var/cache/yum
# Builder Image for Installation of Binaries
# --------------------------------------------
FROM base as builder
# Copy install package, patches and scripts
# -----------------------------------------
COPY container-scripts/* ${SCRIPT_DIR}/
COPY install/* ${BASE_DIR}/
ADD $FMW_OUD_JAR ${BASE_DIR}/
COPY --chown=oracle:root Dockerfile opatch_patch/* ${PATCHES_BASE_DIR}/opatch_patch/
COPY --chown=oracle:root Dockerfile patches/* ${PATCHES_BASE_DIR}/patches/
#
# Update Permissions for packages and scripts
# --------------------------------------------
RUN cd ${BASE_DIR} && chmod 755 *.jar && \
chmod a+xr ${SCRIPT_DIR}/* && \
chown oracle:root ${SCRIPT_DIR}/* && \
chmod -R a+xr ${PATCHES_BASE_DIR} && \
chown -R oracle:root ${PATCHES_BASE_DIR}
#
# Installation of OUD Binaries
# --------------------------------------------
USER oracle
WORKDIR ${ORACLE_HOME}
#install OUD in silent mode
RUN $JAVA_HOME/bin/java -jar ${BASE_DIR}/$FMW_OUD_JAR -silent -responseFile ${BASE_DIR}/oud.response -invPtrLoc ${BASE_DIR}/oraInst.loc -jreLoc $JAVA_HOME -ignoreSysPrereqs -force -novalidation ORACLE_HOME=${ORACLE_HOME} && \
rm -fr ${BASE_DIR}/*.jar ${BASE_DIR}/*.response
#
# Apply patch to OPatch
# ---------------------
RUN opatchzip=`ls ${PATCHES_BASE_DIR}/opatch_patch/p*.zip 2>/dev/null`; \
if [ ! -z "$opatchzip" ]; then \
cd ${PATCHES_BASE_DIR}/opatch_patch; \
echo -e "\nBelow patch present in opatch_patch directory. Applying this patch:" ; \
ls p*.zip ; \
echo -e "" ; \
opatchfile=`ls p*.zip` ; \
$JAVA_HOME/bin/jar xf $opatchfile ; \
$JAVA_HOME/bin/java -jar ${PATCHES_BASE_DIR}/opatch_patch/6880880/opatch_generic.jar -silent oracle_home=$ORACLE_HOME; \
if [ $? -ne 0 ]; then \
echo "Applying patch to opatch Failed" ; \
exit 1 ; \
fi; \
cd /tmp; \
rm ${PATCHES_BASE_DIR}/opatch_patch/*.zip; \
rm -r ${PATCHES_BASE_DIR}/opatch_patch/; \
else \
echo -e "\nNo OPatch patch present in opatch_patch directory. Skipping patch application."; \
fi
#
# Apply OUD Patches
# -----------------
RUN export OPATCH_NO_FUSER=TRUE && patchzips=`ls ${PATCHES_BASE_DIR}/patches/p*.zip 2>/dev/null`; \
if [ ! -z "$patchzips" ]; then \
cd ${PATCHES_BASE_DIR}/patches; \
echo -e "\nBelow patches present in patches directory. Applying these patches:"; \
ls p*.zip; \
echo -e ""; \
for filename in `ls p*.zip`; do echo "Extracting patch: ${filename}"; $JAVA_HOME/bin/jar xf ${filename}; done; \
rm -f ${PATCHES_BASE_DIR}/patches/p*.zip; \
$ORACLE_HOME/OPatch/opatch napply -silent -oh $ORACLE_HOME -jre $JAVA_HOME -invPtrLoc ${BASE_DIR}/oraInst.loc -phBaseDir ${PATCHES_BASE_DIR}/patches; \
$ORACLE_HOME/OPatch/opatch util cleanup -silent; \
rm -rf ${PATCHES_BASE_DIR}/patches ${BASE_DIR}/oracle/cfgtoollogs/opatch/*; \
echo -e "\nPatches applied in OUD oracle home are:"; \
cd $ORACLE_HOME/OPatch; \
$ORACLE_HOME/OPatch/opatch lspatches; \
else \
echo -e "\nNo patches present in patches directory. Skipping patch application."; \
fi
#
# Final Image
# -------------
FROM base
COPY --chown=oracle:root --from=builder $BASE_DIR $BASE_DIR
COPY --chown=oracle:root --from=builder $JAVA_HOME $JAVA_HOME
USER oracle
HEALTHCHECK --start-period=5m --interval=1m CMD curl -k -s --fail `$HEALTH_SCRIPT_FILE` || exit 1
WORKDIR ${ORACLE_HOME}
# Define default command to start bash.
ENTRYPOINT ["sh", "-c", "${SCRIPT_DIR}/createDomainAndStart.sh"]