Sign inSign up

sakiladb/mariadb

By sakiladb

•Updated 3 months ago

MariaDB docker image preloaded with Sakila example database.

Image
Developer tools
Databases & storage
0

905

sakiladb/mariadb repository overview

⁠sakiladb/mariadb

A MariaDB⁠ Docker image preloaded with the Sakila⁠ sample database. One of the sakiladb⁠ image family.

These images exist primarily as test fixtures for sq⁠, a command-line tool for querying SQL databases and structured data, but they are free for anyone to use. MariaDB speaks the MySQL wire protocol, so sq connects with its MySQL driver⁠.

Available on Docker Hub⁠ and GitHub Container Registry⁠.

⁠Quick start

docker run -p 3306:3306 -d sakiladb/mariadb:latest

The Sakila data is baked into the image, so there is no initialization step at startup; the container is ready in a few seconds.

The image declares a Docker HEALTHCHECK⁠, so you can wait for readiness rather than guessing. Its status becomes healthy once MariaDB is accepting connections:

docker run -p 3306:3306 -d --name sakila sakiladb/mariadb:latest
until [ "$(docker inspect -f '{{.State.Health.Status}}' sakila)" = healthy ]; do sleep 1; done

In Docker Compose, gate dependents with depends_on: { condition: service_healthy }. (MariaDB also logs its native ready for connections line.)

Tip

Building or testing on GitHub Actions? Pull from GHCR (`ghcr.io/sakiladb/mariadb`). Docker Hub rate-limits pulls and CI runners share IP addresses, so the limit is reached quickly; GHCR isn't throttled the same way, especially from within GitHub's network.

⁠Connection

SettingValue
hostlocalhost
port3306
databasesakila
usersakila
passwordp_ssW0rd

Any MySQL/MariaDB client works with the settings above. For example, with sq⁠ (install⁠). Note the mysql:// scheme, since MariaDB uses the MySQL protocol:

$ sq add 'mysql://sakila:p_ssW0rd@localhost:3306/sakila' --handle @sakila_maria
@sakila_maria  mysql  sakila@localhost:3306/sakila

$ sq '@sakila_maria.actor | .[0:5]'
actor_id  first_name  last_name     last_update
1         PENELOPE    GUINESS       2006-02-15T04:34:33Z
2         NICK        WAHLBERG      2006-02-15T04:34:33Z
3         ED          CHASE         2006-02-15T04:34:33Z
4         JENNIFER    DAVIS         2006-02-15T04:34:33Z
5         JOHNNY      LOLLOBRIGIDA  2006-02-15T04:34:33Z

⁠What's inside

The standard Sakila sample database: 16 tables and 7 views, all owned by the sakila user. It is loaded from the same schema and data as sakiladb/mysql⁠ (the family's reference variant), so the object set, row counts, and data are identical.

sq inspect⁠ shows the whole schema (tables, views, row counts, and columns) at a glance:

$ sq inspect @sakila_maria
SOURCE         DRIVER  NAME    FQ NAME     SIZE   TABLES  VIEWS  LOCATION
@sakila_maria  mysql   sakila  def.sakila  6.5MB  16      7      mysql://sakila:xxxxx@localhost:3306/sakila

NAME                        TYPE   ROWS   COLS
actor                       table  200    actor_id, first_name, last_name, last_update
address                     table  603    address_id, address, address2, district, city_id, postal_code, phone, last_update
category                    table  16     category_id, name, last_update
city                        table  600    city_id, city, country_id, last_update
country                     table  109    country_id, country, last_update
customer                    table  599    customer_id, store_id, first_name, last_name, email, address_id, active, create_date, last_update
film                        table  1000   film_id, title, description, release_year, language_id, original_language_id, rental_duration, rental_rate, length, replacement_cost, rating, special_features, last_update
film_actor                  table  5462   actor_id, film_id, last_update
film_category               table  1000   film_id, category_id, last_update
film_text                   table  1000   film_id, title, description
inventory                   table  4581   inventory_id, film_id, store_id, last_update
language                    table  6      language_id, name, last_update
payment                     table  16049  payment_id, customer_id, staff_id, rental_id, amount, payment_date, last_update
rental                      table  16044  rental_id, rental_date, inventory_id, customer_id, return_date, staff_id, last_update
staff                       table  2      staff_id, first_name, last_name, address_id, picture, email, store_id, active, username, password, last_update
store                       table  2      store_id, manager_staff_id, address_id, last_update
actor_info                  view   200    actor_id, first_name, last_name, film_info
customer_list               view   599    ID, name, address, zip code, phone, city, country, notes, SID
film_list                   view   997    FID, title, description, category, price, length, rating, actors
nicer_but_slower_film_list  view   997    FID, title, description, category, price, length, rating, actors
sales_by_film_category      view   16     category, total_sales
sales_by_store              view   2      store, manager, total_sales
staff_list                  view   2      ID, name, address, zip code, phone, city, country, SID

⁠Differences from other sakila variants

sakiladb/mariadb is built from the same 1-sakila-schema.sql / 2-sakila-data.sql as sakiladb/mysql⁠ (the family's reference variant), byte for byte. MariaDB runs that MySQL Sakila unmodified, so there is nothing to "port": the fixture shape, row counts, and faithful data (including the restored Unicode accents in place names) are identical to the MySQL image. Two engine-level notes:

  • sq uses its MySQL driver. MariaDB speaks the MySQL wire protocol, so the connection scheme is mysql:// and sq inspect reports DRIVER: mysql.
  • address has no location column. Same as the MySQL reference: upstream MySQL Sakila ships a spatial GEOMETRY column there, which the reference removes so address is the same 8 columns across the whole family.

Like the MySQL image, film_text here is a real, trigger-populated table (kept in sync with film).

⁠Available versions

Each MariaDB version is published as its own image tag. latest tracks the newest version (currently 12).

MariaDBsakiladb ReleaseArchitectureDocker HubGitHub Container Registry
12v12.0.1amd64, arm64sakiladb/mariadb:12⁠, :latest⁠ghcr.io/sakiladb/mariadb:12⁠, :latest⁠
11v11.0.0amd64, arm64sakiladb/mariadb:11⁠ghcr.io/sakiladb/mariadb:11⁠
10v10.0.0amd64, arm64sakiladb/mariadb:10⁠ghcr.io/sakiladb/mariadb:10⁠

The tags follow MariaDB's bare-major scheme, and each moving major tracks the newest release in that series: 12 is the newest line (gets :latest), 11 tracks the 11.8 LTS, and 10 tracks the 10.11 LTS (the oldest line still in healthy support). All three publish amd64 + arm64.

sakiladb Release is the git tag the current image was built from (see releases⁠). The version is v{MARIADB_MAJOR}.{MINOR}.{PATCH} with the major tracking MariaDB and the minor/patch tracking sakiladb's own revisions (e.g. v12.0.0 → v12.0.1).

Every version is published to both Docker Hub⁠ and GitHub Container Registry⁠, and is signed with cosign⁠.

⁠Releasing a new version

Maintainers: releases are tag-driven. Pushing a semver tag vN.x.y builds and publishes that MariaDB version; the version is derived from the tag, so there are no per-version branches. See CLAUDE.md⁠ for the full, repeatable procedure.

⁠Changelog

⁠2026-06-28
  • Maintenance release (v12.0.1): Dependabot updated the pinned GitHub Actions, plus documentation updates. The Sakila dataset and schema are unchanged.
  • Initial release: MariaDB 10, 11, 12, each multi-arch (amd64 + arm64), published to Docker Hub and GHCR and cosign-signed. The fixture is loaded from the same Sakila schema and data as sakiladb/mysql (16 tables + 7 views, faithful original data), and each image declares a Docker HEALTHCHECK (mariadb-admin ping).

⁠License

BSD 3-Clause⁠.

Tag summary

Content type

Image

Digest

sha256:ed95db143…

Size

112.7 MB

Last updated

3 months ago

docker pull sakiladb/mariadb