# This Dockerfile should be used for docker official repo # https://github.com/docker-library/official-images: # No official images can be derived from, or depend on, non-official images # with the following notable exceptions... FROM redhat/ubi9-minimal LABEL name="Percona Server" \ release="8.4" \ vendor="Percona" \ summary="Percona Server database server" \ description="Percona Server is a fast, stable and true multi-user, multi-threaded SQL \ database server. SQL (Structured Query Language) is the most popular database \ query language in the world. The main goals of Percona Server are speed, \ robustness and ease of use." \ maintainer="Percona Development " LABEL org.opencontainers.image.authors="info@percona.com" ENV PS_VERSION=8.4.7-7.1 ENV MYSQL_SHELL_VERSION=8.4.7-1 ENV OS_VER=el9 ENV FULL_PERCONA_VERSION="$PS_VERSION.$OS_VER" ENV FULL_MYSQL_SHELL_VERSION="$MYSQL_SHELL_VERSION.$OS_VER" ENV PS_REPO=release ENV PS_TELEMETRY_VERSION=8.4.7-7-1 ENV CALL_HOME_DOWNLOAD_SHA256=5e84d2f1a5d57f44c46e6a1f16794d649d3de09fe8021f0294bc321c89e51068 ENV KEY_RPM_DOWNLOAD_SHA256=fcf0eab4f05a1c0de6363ac4b707600a27a9d774e9b491059e59e6921b255a84 ENV CALL_HOME_VERSION=0.1 # It is intentionally used another UID, to have backward compatibility with # the previous image versions published on Docker Hub RUN set -ex; \ #groupdel input; \ #userdel systemd-coredump; \ groupadd -g 1001 mysql; \ useradd -u 1001 -r -g 1001 -s /sbin/nologin \ -m -c "Default Application User" mysql # Do not report during Docker image creation. ARG PERCONA_TELEMETRY_DISABLE=1 # check repository package signature in secure way RUN set -ex; \ #yum -y install epel-release; \ export GNUPGHOME="$(mktemp -d)"; \ gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 4D1BB29D63D98E422B2113B19334A25F8507EFA5 99DB70FAE1D7CE227FB6488205B555B38483C65D; \ gpg --batch --export --armor 4D1BB29D63D98E422B2113B19334A25F8507EFA5 > ${GNUPGHOME}/PERCONA-PACKAGING-KEY; \ gpg --batch --export --armor 99DB70FAE1D7CE227FB6488205B555B38483C65D > ${GNUPGHOME}/RPM-GPG-KEY-centosofficial; \ rpmkeys --import ${GNUPGHOME}/PERCONA-PACKAGING-KEY ${GNUPGHOME}/RPM-GPG-KEY-centosofficial; \ curl -Lf -o /tmp/percona-release.rpm https://repo.percona.com/yum/percona-release-latest.noarch.rpm; \ rpmkeys --checksig /tmp/percona-release.rpm; \ microdnf install -y findutils libssh; \ rpm -i /tmp/percona-release.rpm; \ sed -i "s|x86_64|x86_64 aarch64|" /usr/bin/percona-release; \ rm -rf "$GNUPGHOME" /tmp/percona-release.rpm; \ rpm --import /etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY; \ #microdnf -y module disable mysql; \ percona-release disable all; \ percona-release enable ps-84-lts ${PS_REPO}; \ percona-release enable telemetry ${PS_REPO}; \ rm -rf /tmp/percona-*; \ curl -O https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9; \ echo "$KEY_RPM_DOWNLOAD_SHA256 RPM-GPG-KEY-EPEL-9" | sha256sum --strict --check; \ rpm --import RPM-GPG-KEY-EPEL-9; \ curl -Lf -o /tmp/jemalloc.rpm https://rpmfind.net/linux/epel/9/Everything/aarch64/Packages/j/jemalloc-5.2.1-2.el9.aarch64.rpm; \ curl -Lf -o /tmp/gflags.rpm https://rpmfind.net/linux/epel/9/Everything/aarch64/Packages/g/gflags-2.2.2-9.el9.aarch64.rpm; \ rpmkeys --checksig /tmp/gflags.rpm /tmp/jemalloc.rpm; \ rpm -i /tmp/jemalloc.rpm; \ rpm -i /tmp/gflags.rpm; \ curl -Lf -o /tmp/mysql-shell.rpm https://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell-${MYSQL_SHELL_VERSION}.el9.aarch64.rpm; \ rpm -i /tmp/mysql-shell.rpm; \ rm -f /tmp/gflags.rpm /tmp/jemalloc.rpm /tmp/mysql-shell.rpm RUN set -ex; \ rpm -e --nodeps tzdata; \ microdnf -y install \ hostname \ tzdata \ jemalloc \ which \ cracklib-dicts \ tar \ policycoreutils; \ microdnf -y update \ #glibc \ libnghttp2 \ openssh \ python3-setuptools-wheel \ krb5-libs \ pam \ python3; \ \ microdnf -y install \ percona-server-server-${FULL_PERCONA_VERSION} \ percona-server-rocksdb-${FULL_PERCONA_VERSION} \ percona-server-devel-${FULL_PERCONA_VERSION} \ percona-icu-data-files-${FULL_PERCONA_VERSION} \ percona-telemetry-agent; \ microdnf clean all; \ rm -rf /var/cache/dnf /var/cache/yum /var/lib/mysql # purge and re-create /var/lib/mysql with appropriate ownership RUN set -ex; \ /usr/bin/install -m 0775 -o mysql -g root -d /var/lib/mysql /var/run/mysqld /docker-entrypoint-initdb.d; \ # comment out a few problematic configuration values find /etc/my.cnf /etc/my.cnf.d -name '*.cnf' -print0 \ | xargs -0 grep -lZE '^(bind-address|log|user)' \ | xargs -rt -0 sed -Ei 's/^(bind-address|log|user)/#&/'; \ # don't reverse lookup hostnames, they are usually another container echo '!includedir /etc/my.cnf.d' >> /etc/my.cnf; \ printf '[mysqld]\nhost_cache_size=0\nskip-name-resolve\n' > /etc/my.cnf.d/docker.cnf; \ # TokuDB modifications /usr/bin/install -m 0664 -o mysql -g root /dev/null /etc/sysconfig/mysql; \ echo "LD_PRELOAD=/usr/lib64/libjemalloc.so.1" >> /etc/sysconfig/mysql; \ echo "THP_SETTING=never" >> /etc/sysconfig/mysql; \ # allow to change config files chown -R mysql:root /etc/my.cnf /etc/my.cnf.d; \ chmod -R ug+rwX /etc/my.cnf /etc/my.cnf.d COPY LICENSE /licenses/LICENSE.Dockerfile VOLUME ["/var/lib/mysql", "/var/log/mysql"] RUN set -eux; \ curl -fL "https://github.com/Percona-Lab/telemetry-agent/archive/refs/tags/phase-$CALL_HOME_VERSION.tar.gz" -o "phase-$CALL_HOME_VERSION.tar.gz"; \ echo "$CALL_HOME_DOWNLOAD_SHA256 phase-$CALL_HOME_VERSION.tar.gz" | sha256sum --strict --check; \ tar -xvf phase-$CALL_HOME_VERSION.tar.gz; \ cp telemetry-agent-phase-$CALL_HOME_VERSION/call-home.sh .;\ rm -rf telemetry-agent-phase-$CALL_HOME_VERSION phase-$CALL_HOME_VERSION.tar.gz; \ chmod a+rx /call-home.sh; \ mkdir -p /usr/local/percona; \ chown mysql:mysql /usr/local/percona ENV CALL_HOME_OPTIONAL_PARAMS=" -s ${OS_VER}" COPY ps-entry.sh /docker-entrypoint.sh COPY telemetry-agent-supervisor.sh /usr/bin/ COPY dockerdir/ / RUN set -ex; \ chown mysql /usr/bin/telemetry-agent-supervisor.sh; \ chown mysql /usr/bin/percona-telemetry-agent; \ chown mysql /usr/local/percona/telemetry/history; \ chmod ug+rwx /usr/bin/telemetry-agent-supervisor.sh; \ chmod -R go+w /var/log/percona ENV PERCONA_TELEMETRY_CHECK_INTERVAL=86400 ENV PERCONA_TELEMETRY_HISTORY_KEEP_INTERVAL=604800 ENV PERCONA_TELEMETRY_RESEND_INTERVAL=60 ENV PERCONA_TELEMETRY_URL=https://check.percona.com/v1/telemetry/GenericReport ENTRYPOINT ["/docker-entrypoint.sh"] USER mysql EXPOSE 3306 33060 CMD ["mysqld"]