Dockerfileを書く
まず、以下のようにDockerfileを書きます。
FROM mariadb:latest
COPY ./init.sql /docker-entrypoint-initdb.d/
VOLUME [ "/var/lib/mysql" ]
FROMでMariaDBの元のなるイメージを指定します。
次に、COPYでローカルのファイルinit.sqlをコンテナ内のディレクトリ/docker-entrypoint-initdb.d/に送ります。
これの目的は、MariaDBのコンテナを立ち上げた際に、最初にテーブル等を配置しておくことです。
最後にVOLUMEでコンテナ内のMariaDBのデータをローカルに保存します。
これの目的は、MariaDBのコンテナを停止してもデータが消えないように、ローカルにセーブデータを保存することです。
起動時にテーブルを用意しておく
以下のように、init.sqlを用意しておくことで、コンテナ立ち上げ時にテーブルが作成された状態になります。
CREATE DATABASE test;
USE test;
CREATE TABLE test(name varchar(10));
ここでは、まずtestという名前のデータベースを作成しています。
次に、データベースtestを選択します。
最後に、testという名前のテーブルを作成しています。
ここで、列名はnameのみで、その型は可変長文字列としています。
コンテナを立ち上げる
上記のファイルを作成したら、DockerのImageファイルを作成します。
上記のファイルを置いているディレクトリで、以下のコマンドを実行します。
$ 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:/# mariadb -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)]>