# Copyright OpenSearch Contributors # SPDX-License-Identifier: Apache-2.0 # This dockerfile generates an AmazonLinux-based image containing an OpenSearch installation. # Dockerfile for building an OpenSearch image. # It assumes that the working directory contains these files: an OpenSearch tarball (opensearch.tgz), log4j2.properties, opensearch.yml, opensearch-docker-entrypoint.sh, opensearch-onetime-setup.sh. # Build arguments: # VERSION: Required. Used to label the image. # BUILD_DATE: Required. Used to label the image. Should be in the form 'yyyy-mm-ddThh:mm:ssZ', i.e. a date-time from https://tools.ietf.org/html/rfc3339. The timestamp must be in UTC. # UID: Optional. Specify the opensearch userid. Defaults to 1000. # GID: Optional. Specify the opensearch groupid. Defaults to 1000. # OPENSEARCH_HOME: Optional. Specify the opensearch root directory. Defaults to /usr/share/opensearch. ########################### Stage 0 ######################## FROM amazonlinux:2 AS linux_stage_0 ARG UID=1000 ARG GID=1000 ARG TEMP_DIR=/tmp/opensearch ARG OPENSEARCH_HOME=/usr/share/opensearch ARG OPENSEARCH_PATH_CONF=$OPENSEARCH_HOME/config ARG SECURITY_PLUGIN_DIR=$OPENSEARCH_HOME/plugins/opensearch-security ARG PERFORMANCE_ANALYZER_PLUGIN_CONFIG_DIR=$OPENSEARCH_PATH_CONF/opensearch-performance-analyzer # Update packages # Install the tools we need: tar and gzip to unpack the OpenSearch tarball, and shadow-utils to give us `groupadd` and `useradd`. # Install which to allow running of securityadmin.sh RUN yum update -y && yum install -y tar gzip shadow-utils which && yum clean all # Create an opensearch user, group, and directory RUN groupadd -g $GID opensearch && \ adduser -u $UID -g $GID -d $OPENSEARCH_HOME opensearch && \ mkdir $TEMP_DIR # Prepare working directory # Copy artifacts and configurations to corresponding directories COPY * $TEMP_DIR/ RUN ls -l $TEMP_DIR && \ tar -xzpf /tmp/opensearch/opensearch-`uname -p`.tgz -C $OPENSEARCH_HOME --strip-components=1 && \ mkdir -p $OPENSEARCH_HOME/data && chown -Rv $UID:$GID $OPENSEARCH_HOME/data && \ if [[ -d $SECURITY_PLUGIN_DIR ]] ; then chmod -v 750 $SECURITY_PLUGIN_DIR/tools/* ; fi && \ if [[ -d $PERFORMANCE_ANALYZER_PLUGIN_CONFIG_DIR ]] ; then cp -v $TEMP_DIR/performance-analyzer.properties $PERFORMANCE_ANALYZER_PLUGIN_CONFIG_DIR; fi && \ cp -v $TEMP_DIR/opensearch-docker-entrypoint.sh $TEMP_DIR/opensearch-onetime-setup.sh $OPENSEARCH_HOME/ && \ cp -v $TEMP_DIR/log4j2.properties $TEMP_DIR/opensearch.yml $OPENSEARCH_PATH_CONF/ && \ ls -l $OPENSEARCH_HOME && \ rm -rf $TEMP_DIR ########################### Stage 1 ######################## # Copy working directory to the actual release docker images FROM amazonlinux:2 ARG UID=1000 ARG GID=1000 ARG OPENSEARCH_HOME=/usr/share/opensearch # Update packages # Install the tools we need: tar and gzip to unpack the OpenSearch tarball, and shadow-utils to give us `groupadd` and `useradd`. # Install which to allow running of securityadmin.sh RUN yum update -y && yum install -y tar gzip shadow-utils which && yum clean all # Create an opensearch user, group RUN groupadd -g $GID opensearch && \ adduser -u $UID -g $GID -d $OPENSEARCH_HOME opensearch # Copy from Stage0 COPY --from=linux_stage_0 --chown=$UID:$GID $OPENSEARCH_HOME $OPENSEARCH_HOME WORKDIR $OPENSEARCH_HOME # Set $JAVA_HOME RUN echo "export JAVA_HOME=$OPENSEARCH_HOME/jdk" >> /etc/profile.d/java_home.sh && \ echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile.d/java_home.sh ENV JAVA_HOME=$OPENSEARCH_HOME/jdk ENV PATH=$PATH:$JAVA_HOME/bin:$OPENSEARCH_HOME/bin # Add k-NN lib directory to library loading path variable ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$OPENSEARCH_HOME/plugins/opensearch-knn/lib" # Change user USER $UID # Setup OpenSearch # Disable security demo installation during image build, and allow user to disable during startup of the container # Enable security plugin during image build, and allow user to disable during startup of the container ARG DISABLE_INSTALL_DEMO_CONFIG=true ARG DISABLE_SECURITY_PLUGIN=false RUN ./opensearch-onetime-setup.sh # Expose ports for the opensearch service (9200 for HTTP and 9300 for internal transport) and performance analyzer (9600 for the agent and 9650 for the root cause analysis component) EXPOSE 9200 9300 9600 9650 ARG VERSION ARG BUILD_DATE ARG NOTES # Label LABEL org.label-schema.schema-version="1.0" \ org.label-schema.name="opensearch" \ org.label-schema.version="$VERSION" \ org.label-schema.url="https://opensearch.org" \ org.label-schema.vcs-url="https://github.com/opensearch-project/OpenSearch" \ org.label-schema.license="Apache-2.0" \ org.label-schema.vendor="OpenSearch" \ org.label-schema.description="$NOTES" \ org.label-schema.build-date="$BUILD_DATE" \ "DOCKERFILE"="https://github.com/opensearch-project/opensearch-build/blob/main/docker/release/dockerfiles/opensearch.al2.dockerfile" # CMD to run ENTRYPOINT ["./opensearch-docker-entrypoint.sh"] CMD ["opensearch"]