DockerでMariaDBを立ち上げる


Dockerfileを書く

まず、以下のようにDockerfileを書きます。

Dockerfile
FROM mariadb:latest

COPY ./init.sql /docker-entrypoint-initdb.d/

VOLUME [ "/var/lib/mysql" ]

FROMMariaDBの元のなるイメージを指定します。
次に、COPYでローカルのファイルinit.sqlをコンテナ内のディレクトリ/docker-entrypoint-initdb.d/に送ります。
これの目的は、MariaDBのコンテナを立ち上げた際に、最初にテーブル等を配置しておくことです。
最後にVOLUMEでコンテナ内のMariaDBのデータをローカルに保存します。
これの目的は、MariaDBのコンテナを停止してもデータが消えないように、ローカルにセーブデータを保存することです。

起動時にテーブルを用意しておく

以下のように、init.sqlを用意しておくことで、コンテナ立ち上げ時にテーブルが作成された状態になります。

init.sql
CREATE DATABASE test;
USE test;
CREATE TABLE test(name varchar(10));

ここでは、まずtestという名前のデータベースを作成しています。
次に、データベースtestを選択します。
最後に、testという名前のテーブルを作成しています。
ここで、列名はnameのみで、その型は可変長文字列としています。

コンテナを立ち上げる

上記のファイルを作成したら、DockerImageファイルを作成します。
上記のファイルを置いているディレクトリで、以下のコマンドを実行します。

$ docker build -t mariadb .

更に、以下のコマンドでコンテナを立ち上げます。

$ docker run --name mariadb -e MYSQL_ROOT_PASSWORD=password -dp 3306:3306 mariadb

ここでは、コンテナ名 をmariadbとしています。
データベースのパスワードはpasswordとしています。これがないと起動に失敗します。
開放するポートはローカル側ポート番号:コンテナ側ポート番号で指定します。ここではどちらも3306を開けることで、localhost:3306でアクセスできるようになります。

因みに

以下のコマンドでコンテナの中に入ることができます(Docker Desktop等からも入れますが)。

$ docker exec -it mariadb bash

さらに、コンテナの中に入り、以下を実行することで、コマンドライン上からSQLを実行することができます。

root@4ec9744dff6e:/# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.5-MariaDB-1:10.5.5+maria~focal mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>