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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

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

Docker

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

Q&A

解決済

1回答

1638閲覧

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

PartyKids

総合スコア65

Ruby on Rails

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

Docker

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

0グッド

0クリップ

投稿2017/04/04 16:07

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

前回の質問で、dockerを使うにあたって、ホストとゲストの関係を意識しろとのご指摘を頂きましたので、それに従って下記のコマンドを打ったら、すんなりとデーターベースにマイケルを登録する事ができました。
しかし、よくよく考えて見ると、自分が起動したのはdocker内のアプリケーション&webサーバーであり、データーベースサーバーではありません。
なんでマイケルは、登録されたの?っと疑問に思い質問させて頂きました。
###疑問点
なぜ下記のコマンドでデーターベースに保存できるのですか?
データーベースのコンテナを起動させる必要性があるのでは?

linux

1workspace$ docker-compose run --rm web rails console 2Loading development environment (Rails 5.0.0.1) 3irb(main):002:0> User.new 4=> #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil> 5irb(main):003:0> User.create(name: "Michael Hartl", email: "mhartl@example.com",password: "foobar", password_confirmation: "foobar") 6 (0.6ms) BEGIN 7 User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER($1) LIMIT $2 [["email", "mhartl@example.com"], ["LIMIT", 1]] 8 SQL (0.8ms) INSERT INTO "users" ("name", "email", "created_at", "updated_at", "password_digest") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["name", "Michael Hartl"], ["email", "mhartl@example.com"], ["created_at", 2017-04-04 14:22:37 UTC], ["updated_at", 2017-04-04 14:22:37 UTC], ["password_digest", "$2a$10$sbk6FvQggm2GC8s/GStglOwf55soHk3jKxtW2HkEeXfAFbO6JoU7e"]] 9 (11.4ms) COMMIT 10=> #<User id: 1, name: "Michael Hartl", email: "mhartl@example.com", created_at: "2017-04-04 14:22:37", updated_at: "2017-04-04 14:22:37", password_digest: "$2a$10$sbk6FvQggm2GC8s/GStglOwf55soHk3jKxtW2HkEeXf..."> 11irb(main):004:0> exit 12

###前提
mac os:sierra
IDE : Rubymine(お試し)

linux

1**Dockerfile** 2FROM ruby:2.3.3 3RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs 4RUN mkdir /myapp 5WORKDIR /myapp 6ADD Gemfile /myapp/Gemfile 7ADD Gemfile.lock /myapp/Gemfile.lock 8RUN bundle install 9ADD . /myapp 10 11**Gemfile** 12source 'https://rubygems.org' 13gem 'rails', '5.0.0.1' 14 15**docker-compose.yml** 16version: '2' 17services: 18 db: 19 image: postgres 20 web: 21 build: . 22 command: bundle exec rails s -p 3000 -b '0.0.0.0' 23 volumes: 24 - .:/myapp 25 ports: 26 - "3000:3000" 27 depends_on: 28 - db 29 30**config/database.yml** 31development: &default 32 adapter: postgresql 33 encoding: unicode 34 database: myapp_development 35 pool: 5 36 username: postgres 37 password: 38 host: db 39 40test: 41 <<: *default 42 database: myapp_test 43 44workspace $ docker ps 45CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 46337461c6d6fb workspace_web "rails console" 2 hours ago Up About an hour workspace_web_run_9 47cf9a7bfa1c63 postgres "docker-entrypoint..." 2 days ago Up About an hour 5432/tcp workspace_db_1

###考えた事等
run web で起動はアプリ&webサーバーであるが、その前がdocker-compose run なので、docker-compose.ymlが起動して自動的にpostgresに接続された。なので、docker-composeでアプリ&webサーバーを立ち上げれば、三層全てが立ち上がる?ですか?

よろしくお願いいたします!

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

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

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

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

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

guest

回答1

0

ベストアンサー

docker-compose はそもそも複数コンテナを管理するためのツールです。

db: image: postgres web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" depends_on: - db

上記設定の中に db がありますが。これがデータベース用のコンテナです。 なのでdocker-compose runを実行すると、データベース用のコンテナが立ち上がります。

db: image: postgres

その下に depends_on という記述があります。これはコンテナの起動順を制御するもので 「web コンテナよりも先に db コンテナを立ち上げる」 という意味です。

depends_on: - db

参考: http://docs.docker.jp/compose/startup-order.html#compose

投稿2017/04/05 00:02

編集2017/04/05 00:04
tell_k

総合スコア2120

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

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

PartyKids

2017/04/05 12:14

返信遅くなって、すみません。 回答ありがとうございます!! とんでもない勘違いをしていたみたいです。。。 データーベースに何も登録していなかったので、 docker run --name "***" webコンテナID テスト処理 を実行した所、test successが出たので、compose使う必要あるの?っと思い質問させて頂きました。 先程、同じテストを実行してみた所 could not translate host name "db" to address: Name or service not known (PG::ConnectionBad) っというエラーが出たので、先日の質問からデーターベースに接続する必要がある事が分かりました。(なぜテストが成功したのかわかりませんが。。。。) run webとwebコンテナを起動するが、DBに接続する必要があるため、docker-composeっと打ってdocker-compose.ymlの設定を読み込んでいるんですね? 日本語ドキュメントがあるなんて知らなかったです。頭を掻きむしりながら、難しい英語をずっと読んでました笑
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問