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

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

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

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

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

MySQL

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

Docker

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

Q&A

2回答

1269閲覧

docker-compose.ymlにおけるMySQLの環境変数について

da_ast

総合スコア7

docker-compose

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

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

MySQL

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

Docker

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

0グッド

0クリップ

投稿2021/01/27 13:08

編集2021/01/28 12:48

Rails6で開発中のアプリの開発環境にdockerを導入しました。なんとか無事に動かすことができたのですが、MySQLの環境変数を設定している部分が理解できていません。なので詳しい方説明していただけませんでしょうか!

##MySQLのenvironment記述のルールがわからない

わからないことは具体的には以下の点です。
・どのような場合にどの環境変数を設定しなければいけないのか
・自分のdocker-compose.ymlがなぜ下記のような記述の仕方でないと動かないのか

  
いろいろな方のQiitaの記事を参考にdocker-compose.ymlを書いたのですが、大体の方は以下のような記述をしています。 (値は適当です。)

services: db: . . . environment: MYSQL_DATABASE: 'app_development' MYSQL_ROOT_PASSWORD: 'password' MYSQL_USER: 'appuser' MYSQL_PASSWORD: 'dev_password' web: . . .

もしくはMYSQL_ROOT_PASSWORDだけや、それに加えてMYSQL_DATABASEだけしか設定していなかったりなど皆さんまちまちです。(MYSQL_ROOT_PASSWORDだけは必須であることは把握しています。)


一方私の場合は以下のように記述しないと正しく動きません。

version: '3' services: db: image: mysql:8.0.22 ports: - '3306:3306' volumes: - mysql_data:/var/lib/mysql # データの永続化 command: --default-authentication-plugin=mysql_native_password # 認証方式を8系以前のものにする。 environment: MYSQL_ROOT_PASSWORD: 'password' web: build: . # Dockerfile のあるディレクトリのパスを指定 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" ports: - '3000:3000' # localhostの3000ポートでアクセスできるようにする volumes: - .:/app # アプリケーションファイルの同期 depends_on: - db - test environment: MYSQL_DATABASE: 'app_development' MYSQL_USER: 'app-user' MYSQL_HOST: db stdin_open: true tty: true volumes: mysql_data: driver: local

ちなみにdatabase.ymlはこのようになっています。

default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: 'appuser' password: 'password' host: db development: <<: *default database: app_development host: <%= ENV.fetch("MYSQL_HOST") { 'localhost' } %> test: <<: *default database: app_test host: <%= ENV.fetch("MYSQL_HOST") { 'localhost' } %>

いろいろと試行錯誤してなんとか上記の記述に辿り着き今開発環境は動いているのですが、Rspecでテストを回そうとしてテスト環境のdbがうまく設定できずに苦戦しています。
なのでdockerでの正しいmysqlの設定の仕方を理解し、自分で考えて設定できるようになりたいです。

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

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

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

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

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

hentaiman

2021/01/28 12:09

省略されてて分かりづらいので全部載せられるならのせてください。service以外の項目すべてとservice配下のmysqlの設定箇所すべて
da_ast

2021/01/28 12:49

docker-compose.ymlを全部載せました。よろしくお願いします。
hentaiman

2021/01/28 13:19

質問者のアレンジバージョンは分かりました。 参考元のyamlは再現出来ますか?起動自体しないって事はありえないと思うので、「正しく動きません。」の正しい動きとは具体的にどういう動作で、正しくないとはどのような動作を指しているかを追記してください。 また、database.ymlはどこで使っていますか?webの配下ですか? 情報がまとまっていないので理解し辛いです。 質問者のdocker関連の設定と、参考にした情報の全容と、正しくない動作が明確になれば何かしら分かるかもしれません。
hentaiman

2021/01/28 13:20

あとports3306の記載はやめましょう。
da_ast

2021/01/28 14:46

いろいろと動かしてみてまた混乱したので少しお時間ください。整理してまた状況をお伝えします。親身にお付き合いくださりありがとうございます。 ports: 3306:3306はdocker-compose.ymlに記載しない方が良いのですか?調べるとどなたも書いてらしたのでそのまま参考にしておりました.…
hentaiman

2021/01/28 15:58 編集

dockerのwebコンテナとdbコンテナの接続をしたいだけのようなので不要です。 dockerの同一ネットワーク内での接続にportsは必要ありません。 webのportsの3000はdocker外(今回の場合はホストPC)から接続する為に必要ですが、docker外からdbに直接繋がないのなら不要です。 例えば、mysqlworkbenchなどで直接dockerのdbに繋ぎたいという場合には必要です。 > 整理してまた状況をお伝えします。 先のコメントに書いた通り、参考元のyamlとの比較を出来るのが一番ですが、難しい場合は質問者の言う「正しい動き」の定義をしてください。 起動しない、AからBに接続できないなど、可能な限りで良いので分かるように。
guest

回答2

0

例えば image: mysql なら、デフォルトのイメージ共有サービスである
Docker Hub で、mysql を探せばよいです。

で、出てくるのはここ。
https://hub.docker.com/_/mysql/

例えば MYSQL_ROOT_PASSWORD は必須 (mandatory) とか書いてあります。

細かいところを見たければ、例えば image: mysql:5.7 であれば、上記ページの 5.7 をクリックすれば Dockerfile 等が見られます。
https://github.com/docker-library/mysql/tree/3fde29717aea785d4e37a97c9990ff0fda37e544/5.7

投稿2021/01/28 12:04

68user

総合スコア2022

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

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

da_ast

2021/01/28 12:51

以前Docker hubでイメージを探してみたのですがあまりきちんと読みこんでいませんでした。少し時間をかけて読み込んでみようと思います!ありがとうございました!
guest

0

正しい設定というか、どのイメージが何を参照しているのかを把握するのが良いのでは無いでしょうか。
利用するイメージのDockerfileやEntrypointで指定されているシェル、DBなど内部で利用している設定ファイルなどを確認すると理解が深まるのでは無いかと思います。

投稿2021/01/27 13:46

t_obara

総合スコア5488

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

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

da_ast

2021/01/28 11:40

そうですね…もう少し勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問