Skip to content

Commit

Permalink
feat: add mysql-8.4 image and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
tobybellwood committed May 31, 2024
1 parent 0833e51 commit e474efe
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 2 deletions.
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,8 @@ versioned-images := php-8.1-fpm \
ruby-3.1 \
ruby-3.2 \
opensearch-2 \
mysql-8.0
mysql-8.0 \
mysql-8.4

# default-versioned-images are images that formerly had no versioning, and are made backwards-compatible.
# the below versions are the ones that map to the unversioned namespace
Expand Down Expand Up @@ -320,7 +321,7 @@ build/mariadb-10.11-drupal: build/mariadb-10.11
build/ruby-3.0 build/ruby-3.1 build/ruby-3.2: build/commons
build/opensearch-2: build/commons
build/mongo-4: build/commons
build/mysql-8.0: build/commons
build/mysql-8.0 build/mysql-8.4: build/commons

#######
####### Building Images
Expand Down
15 changes: 15 additions & 0 deletions helpers/TESTING_service_images_dockercompose.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ docker run --rm --net all-images_default jwilder/dockerize dockerize -wait tcp:/
docker run --rm --net all-images_default jwilder/dockerize dockerize -wait tcp://mariadb-10-6:3306 -timeout 1m
docker run --rm --net all-images_default jwilder/dockerize dockerize -wait tcp://mariadb-10-11:3306 -timeout 1m
docker run --rm --net all-images_default jwilder/dockerize dockerize -wait tcp://mysql-8-0:3306 -timeout 1m
docker run --rm --net all-images_default jwilder/dockerize dockerize -wait tcp://mysql-8-4:3306 -timeout 1m
docker run --rm --net all-images_default jwilder/dockerize dockerize -wait tcp://postgres-11:5432 -timeout 1m
docker run --rm --net all-images_default jwilder/dockerize dockerize -wait tcp://postgres-12:5432 -timeout 1m
docker run --rm --net all-images_default jwilder/dockerize dockerize -wait tcp://postgres-13:5432 -timeout 1m
Expand Down Expand Up @@ -55,6 +56,7 @@ docker ps --filter label=com.docker.compose.project=all-images | grep Up | grep
docker ps --filter label=com.docker.compose.project=all-images | grep Up | grep mariadb-10-6
docker ps --filter label=com.docker.compose.project=all-images | grep Up | grep mariadb-10-11
docker ps --filter label=com.docker.compose.project=all-images | grep Up | grep mysql-8-0
docker ps --filter label=com.docker.compose.project=all-images | grep Up | grep mysql-8-4
docker ps --filter label=com.docker.compose.project=all-images | grep Up | grep mongo-4
docker ps --filter label=com.docker.compose.project=all-images | grep Up | grep postgres-11
docker ps --filter label=com.docker.compose.project=all-images | grep Up | grep postgres-12
Expand Down Expand Up @@ -237,6 +239,19 @@ docker compose exec -T mysql-8-0 sh -c "mysql -D lagoon -u lagoon --password=la
docker compose exec -T commons sh -c "curl -kL http://internal-services-test:3000/mariadb?service=mysql-8-0" | grep "SERVICE_HOST=8.0"
docker compose exec -T commons sh -c "curl -kL http://internal-services-test:3000/mariadb?service=mysql-8-0" | grep "LAGOON_TEST_VAR=all-images"

# mysql-8-4 should be version 8.4 client
docker compose exec -T mysql-8-4 sh -c "mysql -V" | grep "8.4"

# mysql-8-4 should be version 8.4 server
docker compose exec -T mysql-8-4 sh -c "mysql -e 'SHOW variables;'" | grep "version" | grep "8.4"

# mysql-8-4 should use default credentials
docker compose exec -T mysql-8-4 sh -c "mysql -D lagoon -u lagoon --password=lagoon -e 'SHOW databases;'" | grep lagoon

# mysql-8-4 should be able to read/write data
docker compose exec -T commons sh -c "curl -kL http://internal-services-test:3000/mariadb?service=mysql-8-4" | grep "SERVICE_HOST=8.4"
docker compose exec -T commons sh -c "curl -kL http://internal-services-test:3000/mariadb?service=mysql-8-4" | grep "LAGOON_TEST_VAR=all-images"

# postgres-11 should be version 11 client
docker compose exec -T postgres-11 bash -c "psql --version" | grep "psql" | grep "11."

Expand Down
6 changes: 6 additions & 0 deletions helpers/services-docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@ services:
- "3306"
<< : *default-user # uses the defined user from top

mysql-8-4:
image: uselagoon/mysql-8.4:latest
ports:
- "3306"
<< : *default-user # uses the defined user from top

postgres-11:
image: uselagoon/postgres-11:latest
ports:
Expand Down
70 changes: 70 additions & 0 deletions images/mysql/8.4.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
ARG IMAGE_REPO
FROM ${IMAGE_REPO:-lagoon}/commons as commons
FROM mysql:8.4.0-oracle

LABEL org.opencontainers.image.authors="The Lagoon Authors" maintainer="The Lagoon Authors"
LABEL org.opencontainers.image.source="https://github.com/uselagoon/lagoon-images" repository="https://github.com/uselagoon/lagoon-images"

ARG LAGOON_VERSION
ENV LAGOON_VERSION=$LAGOON_VERSION

# Copy commons files
COPY --from=commons /lagoon /lagoon
COPY --from=commons /bin/fix-permissions /bin/ep /bin/docker-sleep /bin/wait-for /bin/
COPY --from=commons /home /home

RUN fix-permissions /etc/passwd \
&& mkdir -p /home

ENV TMPDIR=/tmp \
TMP=/tmp \
HOME=/home \
# When Bash is invoked via `sh` it behaves like the old Bourne Shell and sources a file that is given in `ENV`
ENV=/home/.bashrc \
# When Bash is invoked as non-interactive (like `bash -c command`) it sources a file that is given in `BASH_ENV`
BASH_ENV=/home/.bashrc

ENV BACKUPS_DIR="/var/lib/mysql/backup"

ENV MYSQL_DATABASE=lagoon \
MYSQL_USER=lagoon \
MYSQL_PASSWORD=lagoon \
MYSQL_ROOT_PASSWORD=Lag00n

RUN microdnf install -y epel-release \
&& microdnf update -y \
&& microdnf install -y \
gettext \
net-tools \
pwgen \
tini \
wget; \
rm -rf /var/lib/mysql/* /etc/mysql/ /etc/my.cnf*; \
curl -sSL https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl -o mysqltuner.pl

COPY entrypoints/ /lagoon/entrypoints/
COPY mysql-backup.sh /lagoon/
COPY my.cnf /etc/mysql/my.cnf

RUN for i in /var/run/mysqld /run/mysqld /var/lib/mysql /etc/mysql/conf.d /docker-entrypoint-initdb.d /home; \
do mkdir -p $i; chown mysql $i; /bin/fix-permissions $i; \
done

COPY root/usr/share/container-scripts/mysql/readiness-probe.sh /usr/share/container-scripts/mysql/readiness-probe.sh
RUN /bin/fix-permissions /usr/share/container-scripts/mysql/ \
&& /bin/fix-permissions /etc/mysql

RUN touch /var/log/mariadb-slow.log && /bin/fix-permissions /var/log/mariadb-slow.log \
&& touch /var/log/mariadb-queries.log && /bin/fix-permissions /var/log/mariadb-queries.log

# We cannot start mysql as root, we add the user mysql to the group root and
# change the user of the Docker Image to this user.
RUN usermod -a -G root mysql
USER mysql
ENV USER_NAME mysql

WORKDIR /var/lib/mysql
EXPOSE 3306

ENTRYPOINT ["/usr/bin/tini", "--", "/lagoon/entrypoints.bash"]
CMD ["mysqld"]

0 comments on commit e474efe

Please sign in to comment.