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

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

ただいまの
回答率

90.47%

  • Ruby on Rails

    7511questions

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

  • MySQL

    6034questions

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

  • Docker

    769questions

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

  • MongoDB

    251questions

    MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Dockerについて複数のイメージのリンク

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,352
退会済みユーザー

退会済みユーザー

Docker を用いてRails,MongoDB,Mysqlが必要なサービスの快適な環境を複数のサーバに構築したいです.
以前それぞれのイメージを作り, Docker-composeで一つにすればいいのではないかとお聞きしましたが実際にやってみるとよくわからないことが多数です.
Mongo on Docker
Rails + Mysql on Docker

これらのサイトを用いてイメージは複数ダウンロードしました.
その後docker-composeを使うために

# mysql
mysql:
  image: mysql
  volumes_from:
    - data-mysql
  ports:
    - "3306:3306"
  environment:
    MYSQL_ROOT_PASSWORD: password

#mongodb
mongo:
  image: mongo
  ports:
    - "27017:27017"

web:
  image: takashioshikawa/ruby-native-2.2.4
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  ports:
    - "3000:3000"
  links:
    - mysql, mongo

のような記述をしてみましたがダメでした.
どなたかお力をお貸しください

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

 docker-composeのversion

docker-compose のversionは、どうでしょうか?
mac版のdokcer-toolsを利用していたところ、docker-composeのversionが1.6.0以上
ならないと、linksの機能が十分(version2)に動きませんでした。
うまくいったのは、現時点で以下のバージョンです。

$ docker-compose -v
docker-compose version 1.7.0, build 0d7bf73

 docker-compose.yml

docker-compose.ymlで、私がはまったのは、2つです。

 1) versionの記述

下記のように先頭にバージョンを記述します。
また、web containerから以下のようにアクセスするためには、exposeも大事です。

mysql -h mysql -p 3306 -u ...
version: '2'
services:
  mysql:
    image: mysql
    ports:
      - "3306:3306"
    expose:
      - "3306"
    environment:
      MYSQL_ROOT_PASSWORD: rootのパスワード

linksの記述は、1行1個にして、alias名をきちんと書きましょう。
そうしないと、mysql_xxxx みたいな、他のcontainerとぶつからないホスト名で
web containerの/etc/hostsに記述されてしまいます。

web:
    image: takashioshikawa/ruby-native-2.2.4
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    ports:
      - "3000:3000"
    links:
      - mysql:mysql
      - mongo:mongo

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

docker composeを使ってコンテナを管理する前に それぞれのコンテナとdockerホストとの関係を理解するため直接コンテナを立ち上げて、目的の環境を作ってみることをオススメします。

docker images(サーバ)を、それぞれ立ち上げるように見えますが、dockerコンテナ内のミドルウェア(mysql等)をdockerホスト(dockerコマンドを叩くコンテナを立ち上げる側)で直接実行しているというイメージを持った方が良いです。dockerホストから topコマンド等でプロセスを見ると、mysql等それぞれのコンテナのミドルウェアのプロセスを直接確認できます。


1コンテナ1ミドルウェアのイメージでコンテナを立ち上げてみてください。

[docker ホスト](想定している環境をvagrant等で構築 - docker コマンドを叩く側のOS)
 - mysql コンテナ (以下、コンテナはlinuxディストリビューションの種類を問いません)
 - mongodb コンテナ
 - web-rail コンテナ
 - web-storage コンテナ (dockerホスト側と共有ディレクトリを作っておくと後で便利です)


webコンテナからそれぞれのコンテナにlinkをはってやることで web-rail コンテナからmysql, mongodbのコンテナに通信できます。

#事前に、mysql,mongodb,web-storageそれぞれのコンテナを run しておく
# <version>部分は別途指定する
sudo docker run --privileged --name web-rails --link mongodb:27017 --link mysql:3306 --volumes-from web-storage:rw -d -p 3000:3000 docker.io/rails:<version> /sbin/init

# railsを実行するコンテナにexec で接続
sudo docker exec -it web-rails /bin/bash

上記の方法で、想定した環境内で rails, mongodb, mysqlを動かすのと同等のことが実現できます。
見た目、複数のサーバにそれぞれ環境を構築したように見えますが、厳密には違っている点は注意です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

  • 解決済

    service mongod --dbpath /[PATH]/ で起動できない

    MongoDBについて質問です。 起動するとき、dbpathを指定したうえで起動しっぱなしにしてやりたいのですが、 service mongod --dbpath /[PA

  • 解決済

    Docker上でMongoDBが動かせない

    Dockerを使って、MongoDBを動かそうと思っているのですが、なかなかうまくいきません。 具体的には、 $ service mongod start を実行しよう

  • 解決済

    なぜデーターベースに保存できるの?docker

    「イラスト図解式 この一冊で全部わかるサーバーの基本」を理解出来る所だけ読んだレベルの者です。 読んだだけで、だから必要なのか!といった理解はありません。 前回の質問で、d

  • 解決済

    dockerで立てたrailsのコンテナからmysqlのコンテナに接続できない

    この記事を参考にdockerでrails + mysql + springな環境を作ろうとしています。 その時にrailsコンテナとmysqlコンテナの接続がうまく行きません。

  • 受付中

    docker-compose buildでエラー

    実現したいこと Docker-composeにてnode.jsをインストールしようとしたら以下のエラーがでてしまいました。 プロキシ環境のためプロキシ設定が誤っているのかと思っ

  • 受付中

    Dockerを用いたコンテナ間通信

     Dockerコンテナ上でDBサーバのアドレスが解決出来ない 1つのサーバ上でweb,dbコンテナの2つを動かしているのですが webコンテナからdbに接続出来ません webコ

  • 解決済

    docker-composeによるMySQLの設定

    dockercomposeを使ってWebアプリの開発環境を作っています。 下記のようなymlファイルを作成し,upコマンドでを実行したところエラーが発生してMySQLのコンテナが停

  • 解決済

    docker-composeで立ち上げたMySQLに接続できない

    docker-composeでMySQLを立ち上げるテストをしています. 以下のdocker-compose.ymlを用意,upします. version: '3' servic

同じタグがついた質問を見る

  • Ruby on Rails

    7511questions

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

  • MySQL

    6034questions

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

  • Docker

    769questions

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

  • MongoDB

    251questions

    MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。