MySQLのアプリケーションをDocker上で動かせるようにしました。Sequelizeを使ってマイグレーションを実行するところまでメモしています。devdocker-compose.ymlではMySQLの「db」とNode.jsの「api」の2つのサービスを定義しています。8.0のバージョンのイメージを使用します。environmentでMySQLに接続する際のパスワードと生成するDBを指定します。portsでポートフォワーディングの設定をしており、今回はホスト側のポート3306からコンテナ側のポート3306に繋がります。volumesで「data_volume」というボリュームをコンテナの/var/lib/mysql/ディレクトリにマウントすることで、コンテナが削除されてもデータが保持されます。MySQL8.0からはログイン認証方式のデフォルトがcaching_sha2_passwordになったことにより、接続時にエラーが発生するため、旧来の認証方法にするためのコマンドを追加しています。「api」サービスの定義apiというimageを指定しています。env_fileでapiコンテナからdbコンテナに接続する際の環境変数が定義されているapp.envファイルを読み込むようにしています。buildでapiを起動するためのビルドを実行します。今回はDockerfileを指定し、そこでNode.jsのアプリケーションをDocker化しています。upでコンテナの作成・起動を成功するが、APIからDBに接続する際にエラーになったことです。depend_onでDBが起動が終わったタイミングで接続すると思っていたのですが、よくよく調べてみるとdepends_onは起動順を担保しているだけで、稼働順を担保していないことがわかりました。DBから起動していたのですが、DBの起動が完了する前にAPIがDBに接続しようとしていたのです。dev」で1秒するスリープさせるようにしました。調べてみると公式とかですとシェルを使ってみるとかかいてあったのですが、とりあえずこの方法でやっています。upで問題なくコンテナ作成・起動・接続できたらSequelizeを導入していきます。SequelizeはNode.jsのORMでマイグレーション機能があり、これを使ってマイグレーションしていきます。以下のコマンドでSequelizeとその依存パッケージをインストールと初期化を行います。init次に以下のコマンドでモデルとマイグレーションファイルを作成します。今回はToDoアプリを想定しており、tasksというテーブルをつくります。content:string,status:integer実行するとモデルとマイグレーションファイルが作成されます。マイグレーションファイルを少し修正しておきます。CURRENT_TIMESTAMPにしました。queryInterface.dropTable('tasks')}}先ほど起動したMySQLのコンテナの接続情報をconfigファイルに設定して、マイグレーションを実行していきます。正常に実行されれば完了です。db:migrateあとはseedersフォルダで初期データを投入することができます。シードファイルを作成して投入したいデータをセットし、以下のコマンドを実行することでシードできます。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。