はじめに
以下実施してうまくいかない事象ありました!時間がある時調査する所存です!
上の補足です!ちなみにimageやvolum等削除でもうまくいきませんでした!
=> 調査というか分かったのは上の事象は、プロジェクトでmysqlのデータをマウントしていたのが原因のようでした。なのでdocker stopしてマウントされたローカルデータ削除で問題なく動くようになるかと、、(きっと 確か 再検証はしていません)
DBコンテナ入ってsql直接打つ方が案外シンプルなのでは?等とか思ったりしました!
////////////////////以下は今まで書いていた内容です。//////////////////////////////////////
おっちょこちょい事件でした、、、
結論から言うと、コンテナを最初に作成するときにsqlファイル実行されるので、
コンテナ削除までしましょうってことでした!!
コンテナストップまでではなくコンテナ削除まで!
ちなみに、イメージの削除までは行わなくて良いっぽいですね!
なので行う処理は以下みたいな感じです!
sqlコンテナ削除で再度コンテナ構築まで
a725b2d62fceは自分のものを
$ docker ps
$ docker stop a725b2d62fce
$ docker rm a725b2d62fce
$ docker-compose up --build -d
sqlコンテナ入る
602a4868b08bは自分のものを
$ docker exec -i -t 602a4868b08b bash
sqlログインする
$ mysql -u root -p
パスワード以下のものならexample
コンテナ入っての確認
$ SHOW DATABASES;
$ use mydb01;
$ SHOW TABLES;
本文引用
When a container is started for the first time, a new database with the specified name will be created and initialized with the provided configuration variables. Furthermore, it will execute files with extensions .sh, .sql and .sql.gz that are found in /docker-entrypoint-initdb.d. Files will be executed in alphabetical order. You can easily populate your mysql services by mounting a SQL dump into that directory and provide custom images with contributed data. SQL files will be imported by default to the database specified by the MYSQL_DATABASE variable.
google翻訳
コンテナが初めて起動されると、指定された名前の新しいデータベースが作成され、提供された構成変数で初期化されます。 さらに、/ docker-entrypoint-initdb.dにある拡張子.sh、.sql、.sql.gzのファイルを実行します。 ファイルはアルファベット順に実行されます。 SQLダンプをそのディレクトリにマウントすることでmysqlサービスを簡単に作成し、提供されたデータを含むカスタムイメージを提供できます。 SQLファイルは、デフォルトでMYSQL_DATABASE変数で指定されたデータベースにインポートされます。
大事なところ
コンテナが初めて起動されると、指定された名前の新しいデータベースが作成され、提供された構成変数で初期化されます。さらに、/ docker-entrypoint-initdb.dにある拡張子.sh、.sql、.sql.gzのファイルを実行します。
構成ファイル(必要部分のみ)
docker-compose.ymlの記述。以下ピンポイントのみ
version: '3'
services:
mysql:
container_name: sample-mysql1 #作成されていると出来ないので新しく作成する場合ここの名前を変更
build: ./mysql/ #mysqlのDockerfileを使用してコンテナ
volumes:
- ./mysql/initdb.d:/docker-entrypoint-initdb.d # ./mysql/initdb.dは入れたいフォルダ名パス。
environment:
MYSQL_DATABASE: mydb01 #はじめに作成します!データベース
MYSQL_ROOT_PASSWORD: example # これでmysqlのrootユーザー exampleパスで入れる
restart: always
mysql/initdb.d/Sample.sqlの中 Sample.sqlだけ書いているが複数あっても良い
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
created DATETIME,
modified DATETIME
);
INSERT INTO users (email, password, created, modified)
VALUES
('cakephp@example.com', 'secret', NOW(), NOW());