質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

1505閲覧

DockerのMysqlとローカルのLaravelアプリでmigrationが維持されない

kobayashi103

総合スコア3

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/05/16 06:17

###docker-compose downするとmigrationが維持されない
ローカルのLaravelアプリを作成していますDBはDockerのMysqlを使用したいと考えています。
下記に作成したファイルで
$ docker-compose build
$ docker-compose upでdbを立ち上げた後、
$ php artisan migrateでmigrationができたのですが

docker-compose downをするとmigrationした内容がリセットされてしまいます。

$ php artisan migrate:status Migration table not found.

migrationが維持されない状態です。

これは
DBをDockerのmysqlにしているので毎回DBを使用する際にはmigrationをしなければいけないのでしょうか。
それとも
dockerの設定に何かミスがありmigrationが維持されていないのでしょうか。

migrationが維持される方法がある様でしたらご教授いただけますでしょうか。
よろしくお願いいたします。

docker-compose.ymlファイル

version: "3" services: mysql: build: ./mysql/ #Dockerfileからビルドすることを示す image: "mysql" # imageの指定 volumes: - ./mysql/db:/docker-entrypoint-initdb.d #初期データ command: --default-authentication-plugin=mysql_native_password # 環境変数の設定 environment: - MYSQL_DATABASE=mydatabase - MYSQL_USER=myuser - MYSQL_PASSWORD=mypassword - MYSQL_ROOT_PASSWORD=mypassword ports: - "13306:3306"

Dockerfile

1FROM mysql 2 3#ポートを開ける 4EXPOSE 3306 5 6#MySQL設定ファイルをイメージ内にコピー 7#ADD ./my.cnf /etc/mysql/conf.d/my.cnf 8 9#docker runに実行される 10CMD ["mysqld"]

my.cnf

[mysqld] character-set-server=utf8 [mysql] default-character-set=utf8 [client] default-character-set=utf8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Laravel の詳細は分かりませんが、 docker-compose down とは、 docker-compose up で作成したコンテナ(に対して書き込んだ情報)、イメージ、ネットワーク、(明示しない)ボリュームをまとめて削除します(参考:コマンドラインリファレンス)。

おそらく、お考えのようにコマンドを実行した内容は、削除されてしまっています。

一時的にコンテナのプロセス等を停止されたいのでれは、 docker-compose stop を使うべきで(リファレンス)、 停止したコンテナ群は docker-compose start で再開できます。

投稿2021/05/16 06:29

編集2021/05/16 06:30
zembutsu

総合スコア1584

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kobayashi103

2021/05/16 14:10

`docker-compose stop`、`docker-compose start`、`docker-compose down` の知識が深まりました。startとstopはあまり使用していなかったので、使い慣れたいと思います! ご回答ありがとうございます。
guest

0

ベストアンサー

まず、 build, image の両方指定されてますが、どちらかの指定のみでokです。

docker-compose up するとDockerイメージからDockerコンテナを作成します。
docker-compose down するとDockerコンテナは破棄されます。

Dockerイメージから変更されたマイグレーションの内容はDockerコンテナを破棄するとデータは残りません。

データを残したい場合は、ボリュームマウントを使って永続化する必要があります。

MySQLのデータ保存場所はMySQLのdatadirの設定によりますが、デフォルトでは /var/lib/mysqlとなっているはずです。

MySQLのデータを永続化するには、最上位の volumes キーに名前付きボリュームを定義して、mysqlサービスにボリュームマウントを定義します。

yml

1services: 2 mysql: 3 # ... 4 volumes: 5 - db-store:/var/lib/mysql 6 7volumes: 8 db-store:

投稿2021/05/16 08:46

編集2021/05/16 12:04
ucan-lab

総合スコア888

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kobayashi103

2021/05/16 14:08

>MySQLのデータを永続化するには、最上位の volumes キーに名前付きボリュームを定義して、mysqlサービスにボリュームマウントを定義します。 migrationが維持(永続化)される様になりました! volumeに関してのリファレンスを読みます! たびたび教えていただき、どうもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問