diff --git a/mariadb11.7-volumes/50-server.cnf b/mariadb/50-server.cnf similarity index 100% rename from mariadb11.7-volumes/50-server.cnf rename to mariadb/50-server.cnf diff --git a/mariadb/Dockerfile b/mariadb/Dockerfile index 9189672d..6841cbcd 100644 --- a/mariadb/Dockerfile +++ b/mariadb/Dockerfile @@ -1,45 +1,101 @@ -FROM mariadb:11.2.2-jammy as build - -ENV MARIADB_ROOT_PASSWORD="unikraft" - -RUN /usr/bin/sed -i '/^[ \t]\+exec "\$@"/d' /usr/local/bin/docker-entrypoint.sh -RUN /usr/local/bin/docker-entrypoint.sh mariadbd -RUN /usr/bin/sed -i 's/^#\(user[ \t]\+\).*$/\1= root/g' /etc/mysql/mariadb.conf.d/50-server.cnf -RUN /usr/bin/sed -i 's/^#\(bind-address[ \t]\+\).*$/\1= 0.0.0.0/g' /etc/mysql/mariadb.conf.d/50-server.cnf -RUN /usr/bin/sed -i 's/^#skip-name-resolve/skip-name-resolve=ON/g' /etc/mysql/mariadb.conf.d/50-server.cnf - -RUN mkdir -p /home/run/mysqld +FROM mariadb:11.7.2-noble AS build FROM scratch +COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt + +# MariaDB binary COPY --from=build /usr/sbin/mariadbd /usr/sbin/mariadbd -COPY --from=build /home/run/mysqld /run/mysqld -COPY --from=build /var/lib /var/lib +# MariaDB support binaries +COPY --from=build /usr/bin/mariadb \ + /usr/bin/mariadb-install-db \ + /usr/bin/mariadb-tzinfo-to-sql \ + /usr/bin/my_print_defaults \ + /usr/bin/ + +# MariaDB support files +COPY --from=build /run/mysqld /run/mysqld COPY --from=build /etc/mysql /etc/mysql COPY --from=build /usr/lib/mysql /usr/lib/mysql +COPY --from=build /usr/share/mariadb /usr/share/mariadb + +# MariaDB libraries +COPY --from=build /lib/x86_64-linux-gnu/libpcre2-8.so.0 \ + /lib/x86_64-linux-gnu/libcrypt.so.1 \ + /lib/x86_64-linux-gnu/liburing.so.2 \ + /lib/x86_64-linux-gnu/libsystemd.so.0 \ + /lib/x86_64-linux-gnu/libz.so.1 \ + /lib/x86_64-linux-gnu/libssl.so.3 \ + /lib/x86_64-linux-gnu/libcrypto.so.3 \ + /lib/x86_64-linux-gnu/libstdc++.so.6 \ + /lib/x86_64-linux-gnu/libm.so.6 \ + /lib/x86_64-linux-gnu/libgcc_s.so.1 \ + /lib/x86_64-linux-gnu/libc.so.6 \ + /lib/x86_64-linux-gnu/libcap.so.2 \ + /lib/x86_64-linux-gnu/libgcrypt.so.20 \ + /lib/x86_64-linux-gnu/liblz4.so.1 \ + /lib/x86_64-linux-gnu/liblzma.so.5 \ + /lib/x86_64-linux-gnu/libzstd.so.1 \ + /lib/x86_64-linux-gnu/libgpg-error.so.0 \ + /lib/x86_64-linux-gnu/libedit.so.2 \ + /lib/x86_64-linux-gnu/libncurses.so.6 \ + /lib/x86_64-linux-gnu/libtinfo.so.6 \ + /lib/x86_64-linux-gnu/libbsd.so.0 \ + /lib/x86_64-linux-gnu/libmd.so.0 \ + /lib/x86_64-linux-gnu/ -COPY --from=build /lib/x86_64-linux-gnu/libpcre2-8.so.0 /lib/x86_64-linux-gnu/libpcre2-8.so.0 -COPY --from=build /lib/x86_64-linux-gnu/libcrypt.so.1 /lib/x86_64-linux-gnu/libcrypt.so.1 -COPY --from=build /lib/x86_64-linux-gnu/liburing.so.2 /lib/x86_64-linux-gnu/liburing.so.2 -COPY --from=build /lib/x86_64-linux-gnu/libpmem.so.1 /lib/x86_64-linux-gnu/libpmem.so.1 -COPY --from=build /lib/x86_64-linux-gnu/libsystemd.so.0 /lib/x86_64-linux-gnu/libsystemd.so.0 -COPY --from=build /lib/x86_64-linux-gnu/libz.so.1 /lib/x86_64-linux-gnu/libz.so.1 -COPY --from=build /lib/x86_64-linux-gnu/libssl.so.3 /lib/x86_64-linux-gnu/libssl.so.3 -COPY --from=build /lib/x86_64-linux-gnu/libcrypto.so.3 /lib/x86_64-linux-gnu/libcrypto.so.3 -COPY --from=build /lib/x86_64-linux-gnu/libstdc++.so.6 /lib/x86_64-linux-gnu/libstdc++.so.6 -COPY --from=build /lib/x86_64-linux-gnu/libm.so.6 /lib/x86_64-linux-gnu/libm.so.6 -COPY --from=build /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libc.so.6 +# Loader COPY --from=build /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2 -COPY --from=build /lib/x86_64-linux-gnu/libndctl.so.6 /lib/x86_64-linux-gnu/libndctl.so.6 -COPY --from=build /lib/x86_64-linux-gnu/libdaxctl.so.1 /lib/x86_64-linux-gnu/libdaxctl.so.1 -COPY --from=build /lib/x86_64-linux-gnu/liblzma.so.5 /lib/x86_64-linux-gnu/liblzma.so.5 -COPY --from=build /lib/x86_64-linux-gnu/libzstd.so.1 /lib/x86_64-linux-gnu/libzstd.so.1 -COPY --from=build /lib/x86_64-linux-gnu/liblz4.so.1 /lib/x86_64-linux-gnu/liblz4.so.1 -COPY --from=build /lib/x86_64-linux-gnu/libcap.so.2 /lib/x86_64-linux-gnu/libcap.so.2 -COPY --from=build /lib/x86_64-linux-gnu/libgcrypt.so.20 /lib/x86_64-linux-gnu/libgcrypt.so.20 -COPY --from=build /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib/x86_64-linux-gnu/libgcc_s.so.1 -COPY --from=build /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.1 -COPY --from=build /lib/x86_64-linux-gnu/libuuid.so.1 /lib/x86_64-linux-gnu/libuuid.so.1 -COPY --from=build /lib/x86_64-linux-gnu/libkmod.so.2 /lib/x86_64-linux-gnu/libkmod.so.2 -COPY --from=build /lib/x86_64-linux-gnu/libgpg-error.so.0 /lib/x86_64-linux-gnu/libgpg-error.so.0 + +# User database +COPY --from=build /etc/passwd /etc/passwd +COPY --from=build /etc/shadow /etc/shadow + +# Entrypoint scripts +COPY --from=build /usr/local/bin/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh +COPY --from=build /docker-entrypoint-initdb.d /docker-entrypoint-initdb.d + +# Support binaries for entrypoint script +COPY --from=build /bin/sh /bin/sh +COPY --from=build /bin/bash /bin/bash +COPY --from=build /usr/bin/date /usr/bin/date +COPY --from=build /usr/bin/awk /usr/bin/awk +COPY --from=build /usr/bin/id /usr/bin/id +COPY --from=build /usr/bin/mkdir /usr/bin/mkdir +COPY --from=build /usr/bin/find /usr/bin/find +COPY --from=build /usr/bin/kill /usr/bin/kill +COPY --from=build /usr/bin/chown /usr/bin/chown +COPY --from=build /usr/bin/chmod /usr/bin/chmod +COPY --from=build /usr/bin/ls /usr/bin/ls +COPY --from=build /usr/bin/sed /usr/bin/sed +COPY --from=build /usr/bin/uname /usr/bin/uname +COPY --from=build /usr/bin/cat /usr/bin/cat +COPY --from=build /usr/bin/sleep /usr/bin/sleep +COPY --from=build /usr/bin/pwgen /usr/bin/pwgen +COPY --from=build /usr/local/bin/gosu /usr/local/bin/gosu +COPY --from=build /bin/mount /bin/mount + +# Support files +COPY --from=build /etc/alternatives /etc/alternatives +COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo + +# Libraries for support binaries +COPY --from=build /lib/x86_64-linux-gnu/libtinfo.so.6 \ + /lib/x86_64-linux-gnu/libc.so.6 \ + /lib/x86_64-linux-gnu/libsigsegv.so.2 \ + /lib/x86_64-linux-gnu/libreadline.so.8 \ + /lib/x86_64-linux-gnu/libmpfr.so.6 \ + /lib/x86_64-linux-gnu/libgmp.so.10 \ + /lib/x86_64-linux-gnu/libm.so.6 \ + /lib/x86_64-linux-gnu/libselinux.so.1 \ + /lib/x86_64-linux-gnu/libacl.so.1 \ + /lib/x86_64-linux-gnu/libmount.so.1 \ + /lib/x86_64-linux-gnu/libblkid.so.1 \ + /lib/x86_64-linux-gnu/ + +# Wrapper script +COPY ./wrapper.sh /usr/local/bin/wrapper.sh + +# Mariadb configuration file +COPY ./50-server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf diff --git a/mariadb/Kraftfile b/mariadb/Kraftfile index 8eed67e0..be41ab8b 100644 --- a/mariadb/Kraftfile +++ b/mariadb/Kraftfile @@ -3,10 +3,10 @@ spec: v0.6 runtime: base-compat:latest labels: - cloud.unikraft.v1.instances/scale_to_zero.policy: "off" - cloud.unikraft.v1.instances/scale_to_zero.stateful: "false" + cloud.unikraft.v1.instances/scale_to_zero.policy: "idle" + cloud.unikraft.v1.instances/scale_to_zero.stateful: "true" cloud.unikraft.v1.instances/scale_to_zero.cooldown_time_ms: 1000 rootfs: ./Dockerfile -cmd: ["/usr/sbin/mariadbd", "--user=root", "--log-bin"] +cmd: ["/usr/local/bin/wrapper.sh"] diff --git a/mariadb/README.md b/mariadb/README.md index 6288ee72..82c75dce 100644 --- a/mariadb/README.md +++ b/mariadb/README.md @@ -24,7 +24,7 @@ export UKC_METRO=fra When done, invoke the following command to deploy this app on Unikraft Cloud: ```bash -kraft cloud deploy -p 3306:3306/tls -M 1Gi . +kraft cloud deploy -M 1Gi -p 3306:3306/tls --env MARIADB_ROOT_PASSWORD="unikraft" . ``` The output shows the instance address and other details: @@ -95,6 +95,25 @@ When done, you can remove the instance: kraft cloud instance remove mariadb-w2g2z ``` +> **Tip:** +> This example uses the [`idle` scale-to-zero policy](https://unikraft.com/docs/api/platform/v1/instances#scaletozero_policy) by default (see the `labels` section in the `Kraftfile`). + +## Using volumes + +You can use [volumes](https://unikraft.com/docs/platform/volumes) for data persistence for your MariaDB instance. +For that you would first create a volume: + +```console +kraft cloud volume create --name mariadb-store --size 512 +``` + +Then start the MariaDB instance and mount that volume: + +```bash +kraft cloud deploy -M 1Gi -p 3306:3306/tls --env MARIADB_ROOT_PASSWORD="unikraft" --volume mariadb-store:/var/lib . +``` + + ## Customize your app To customize the app, update the files in the repository, listed below: diff --git a/mariadb11.7-volumes/wrapper.sh b/mariadb/wrapper.sh similarity index 100% rename from mariadb11.7-volumes/wrapper.sh rename to mariadb/wrapper.sh diff --git a/mariadb11.7-volumes/.dockerignore b/mariadb11.7-volumes/.dockerignore deleted file mode 100644 index 1b8123b9..00000000 --- a/mariadb11.7-volumes/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -/.unikraft/ diff --git a/mariadb11.7-volumes/.gitignore b/mariadb11.7-volumes/.gitignore deleted file mode 100644 index 1b8123b9..00000000 --- a/mariadb11.7-volumes/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/.unikraft/ diff --git a/mariadb11.7-volumes/Dockerfile b/mariadb11.7-volumes/Dockerfile deleted file mode 100644 index 6841cbcd..00000000 --- a/mariadb11.7-volumes/Dockerfile +++ /dev/null @@ -1,101 +0,0 @@ -FROM mariadb:11.7.2-noble AS build - -FROM scratch - -COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt - -# MariaDB binary -COPY --from=build /usr/sbin/mariadbd /usr/sbin/mariadbd - -# MariaDB support binaries -COPY --from=build /usr/bin/mariadb \ - /usr/bin/mariadb-install-db \ - /usr/bin/mariadb-tzinfo-to-sql \ - /usr/bin/my_print_defaults \ - /usr/bin/ - -# MariaDB support files -COPY --from=build /run/mysqld /run/mysqld -COPY --from=build /etc/mysql /etc/mysql -COPY --from=build /usr/lib/mysql /usr/lib/mysql -COPY --from=build /usr/share/mariadb /usr/share/mariadb - -# MariaDB libraries -COPY --from=build /lib/x86_64-linux-gnu/libpcre2-8.so.0 \ - /lib/x86_64-linux-gnu/libcrypt.so.1 \ - /lib/x86_64-linux-gnu/liburing.so.2 \ - /lib/x86_64-linux-gnu/libsystemd.so.0 \ - /lib/x86_64-linux-gnu/libz.so.1 \ - /lib/x86_64-linux-gnu/libssl.so.3 \ - /lib/x86_64-linux-gnu/libcrypto.so.3 \ - /lib/x86_64-linux-gnu/libstdc++.so.6 \ - /lib/x86_64-linux-gnu/libm.so.6 \ - /lib/x86_64-linux-gnu/libgcc_s.so.1 \ - /lib/x86_64-linux-gnu/libc.so.6 \ - /lib/x86_64-linux-gnu/libcap.so.2 \ - /lib/x86_64-linux-gnu/libgcrypt.so.20 \ - /lib/x86_64-linux-gnu/liblz4.so.1 \ - /lib/x86_64-linux-gnu/liblzma.so.5 \ - /lib/x86_64-linux-gnu/libzstd.so.1 \ - /lib/x86_64-linux-gnu/libgpg-error.so.0 \ - /lib/x86_64-linux-gnu/libedit.so.2 \ - /lib/x86_64-linux-gnu/libncurses.so.6 \ - /lib/x86_64-linux-gnu/libtinfo.so.6 \ - /lib/x86_64-linux-gnu/libbsd.so.0 \ - /lib/x86_64-linux-gnu/libmd.so.0 \ - /lib/x86_64-linux-gnu/ - -# Loader -COPY --from=build /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2 - -# User database -COPY --from=build /etc/passwd /etc/passwd -COPY --from=build /etc/shadow /etc/shadow - -# Entrypoint scripts -COPY --from=build /usr/local/bin/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh -COPY --from=build /docker-entrypoint-initdb.d /docker-entrypoint-initdb.d - -# Support binaries for entrypoint script -COPY --from=build /bin/sh /bin/sh -COPY --from=build /bin/bash /bin/bash -COPY --from=build /usr/bin/date /usr/bin/date -COPY --from=build /usr/bin/awk /usr/bin/awk -COPY --from=build /usr/bin/id /usr/bin/id -COPY --from=build /usr/bin/mkdir /usr/bin/mkdir -COPY --from=build /usr/bin/find /usr/bin/find -COPY --from=build /usr/bin/kill /usr/bin/kill -COPY --from=build /usr/bin/chown /usr/bin/chown -COPY --from=build /usr/bin/chmod /usr/bin/chmod -COPY --from=build /usr/bin/ls /usr/bin/ls -COPY --from=build /usr/bin/sed /usr/bin/sed -COPY --from=build /usr/bin/uname /usr/bin/uname -COPY --from=build /usr/bin/cat /usr/bin/cat -COPY --from=build /usr/bin/sleep /usr/bin/sleep -COPY --from=build /usr/bin/pwgen /usr/bin/pwgen -COPY --from=build /usr/local/bin/gosu /usr/local/bin/gosu -COPY --from=build /bin/mount /bin/mount - -# Support files -COPY --from=build /etc/alternatives /etc/alternatives -COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo - -# Libraries for support binaries -COPY --from=build /lib/x86_64-linux-gnu/libtinfo.so.6 \ - /lib/x86_64-linux-gnu/libc.so.6 \ - /lib/x86_64-linux-gnu/libsigsegv.so.2 \ - /lib/x86_64-linux-gnu/libreadline.so.8 \ - /lib/x86_64-linux-gnu/libmpfr.so.6 \ - /lib/x86_64-linux-gnu/libgmp.so.10 \ - /lib/x86_64-linux-gnu/libm.so.6 \ - /lib/x86_64-linux-gnu/libselinux.so.1 \ - /lib/x86_64-linux-gnu/libacl.so.1 \ - /lib/x86_64-linux-gnu/libmount.so.1 \ - /lib/x86_64-linux-gnu/libblkid.so.1 \ - /lib/x86_64-linux-gnu/ - -# Wrapper script -COPY ./wrapper.sh /usr/local/bin/wrapper.sh - -# Mariadb configuration file -COPY ./50-server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf diff --git a/mariadb11.7-volumes/Kraftfile b/mariadb11.7-volumes/Kraftfile deleted file mode 100644 index fba8100e..00000000 --- a/mariadb11.7-volumes/Kraftfile +++ /dev/null @@ -1,12 +0,0 @@ -spec: v0.6 - -runtime: base-compat:latest - -labels: - cloud.unikraft.v1.instances/scale_to_zero.policy: "off" - cloud.unikraft.v1.instances/scale_to_zero.stateful: "false" - cloud.unikraft.v1.instances/scale_to_zero.cooldown_time_ms: 1000 - -rootfs: ./Dockerfile - -cmd: ["/usr/local/bin/wrapper.sh"] diff --git a/mariadb11.7-volumes/README.md b/mariadb11.7-volumes/README.md deleted file mode 100644 index 339aaa2c..00000000 --- a/mariadb11.7-volumes/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# MariaDB with Persistence (as Volumes) - -[MariaDB](https://mariadb.org/) is one of the most popular open source relational databases. -This example deploy MariaDB with persistence storage on Unikraft Cloud (UKC), using volumes. - -To run MariaDB on Unikraft Cloud, first [install the `kraft` CLI tool](https://unikraft.org/docs/cli). -Then clone this examples repository and `cd` into this directory, and invoke: - -```console -kraft cloud volume create --name mariadb-store --size 512 -kraft cloud deploy -M 1Gi --env MARIADB_ROOT_PASSWORD="unikraft" --volume mariadb-store:/var/lib . -``` - -Get the results of the deployment by first forwarding the port: - -```console -kraft cloud tunnel :3306 -``` - -where `` is the name of the instance returned by the `kraft cloud deploy` command, typically `mariadb117-`. - -Then, on another console, run a MariaDB client. -You can use either the `mysql` client: - -```console -mysql -h 127.0.0.1 --skip-ssl -u root -punikraft mysql <<< "select count(*) from user" -``` - -Or you can use the `mariadb` client: - -```console -mariadb -h 127.0.0.1 --ssl=OFF -u root -punikraft mysql <<< "select count(*) from user" -``` - -## Learn more - -- [MariaDB's Documentation](https://mariadb.org/documentation/) -- [Unikraft Cloud's Documentation](https://unikraft.cloud/docs/) -- [Building `Dockerfile` Images with `Buildkit`](https://unikraft.org/guides/building-dockerfile-images-with-buildkit)