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)]>