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

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

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

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

Docker

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

Q&A

解決済

2回答

6609閲覧

Dockerでbundle installでのGemのインストール先を変更した場合、Dockerの強みが失われるのでは...?

ti1050

総合スコア14

Ruby on Rails

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

Docker

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

2グッド

2クリップ

投稿2019/02/08 02:43

質問内容

Docker初心者です。

DockerでRuby on Railsの開発環境を構築しています。
Gemfileを変更する度に $ docker-compose build を行なって全てのGemのインストールを行うのが時間がかかると思い、以下の記事の方法を元にGemのインストール先を /bundle に変更してみました。

docker-composeでRailsのGemを更新する時、docker buildするのを回避したい

これにより、Gemfileを変更しても $ docker-compose build は必要なくなり、 $ docker-compose run --rm web bundle install でGemのインストールを行えるようになって快適になりました。(アプリケーションのコンテナ名がweb)

しかし、Gemのインストール先がwebコンテナの外に出たことになり(?)、環境をイメージ内に閉じ込めてしまえるというDockerのメリットが失われるのではないかと気になりました。

この場合、Gemのインストール先はwebコンテナのままにした方がDockerの強みを活かせるのでしょうか?

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

※リンク先のQiitaの投稿、ならびに投稿者様を批判する意図はありません。

補足情報

  • macOS Mojave
  • Docker Desktop Community 2.0.0.2
  • docker-compose 1.23.2
  • Bundler 1.16.3
  • ruby 2.5.1p57
  • Ruby on Rails 5.2.2

Dockerfile

1FROM ruby:2.5.1 2ENV LANG C.UTF-8 3 4RUN apt-get update -qq \ 5 && apt-get install -y build-essential \ 6 libpq-dev \ 7 cmake 8 9RUN gem install bundler 10 11WORKDIR /tmp 12 13COPY Gemfile Gemfile 14COPY Gemfile.lock Gemfile.lock 15 16RUN bundle install --path /bundle --jobs 4 17 18ENV APP_HOME /app 19 20RUN mkdir -p $APP_HOME 21 22WORKDIR $APP_HOME 23 24COPY . $APP_HOME 25 26EXPOSE 3000 27CMD bundle exec puma -C config/puma.rb

docker

1version: '2' 2 3services: 4 db: 5 image: mysql:5.7 6 environment: 7 - MYSQL_ROOT_PASSWORD=password 8 9 web: 10 build: . 11 command: bundle exec rails s -b 0.0.0.0 12 volumes: 13 - .:/app 14 - bundle:/bundle 15 ports: 16 - '3000:3000' 17 depends_on: 18 - db 19 environment: 20 - RAILS_ROOT=/app 21 - RAILS_ENV=development 22 23volumes: 24 bundle: 25 driver: local
toushimi, maki_k👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

Gemをいつ・どこにインストールするかは目的に応じて使い分けるべき内容です。

複数人で開発環境を共有する場合や、本番環境でも利用する場合は
コンテナ内にGemをインストールした方が再現性(ポータビリティ)が向上するため便利です。

自分1人で開発しており開発環境を共有する必要がない場合や、
試行錯誤段階でGemの更新頻度が高い場合は
コンテナ外にGemをインストールした方が手間が削減できるため便利です。

目的や何を重視するかによってGemのインストール先を決定すると同時に、
開発フェーズに応じてインストール先を変更するという選択肢を取ってもよいかもしれません。

投稿2019/02/08 17:06

編集2019/02/08 17:10
thaim

総合スコア175

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

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

ti1050

2019/02/09 05:10

非常にスッキリしました!ありがとうございます!
guest

0

Gemのインストール先がwebコンテナの外に出たことになり(?)、環境をイメージ内に閉じ込めてしまえるというDockerのメリットが失われるのではないかと気になりました。

この場合、Gemのインストール先はwebコンテナのままにした方がDockerの強みを活かせるのでしょうか?

Gemのインストール先をホストOSのディスクに配置されるだけでホストやその他の環境が汚染されるわけではありません。
コンテナイメージをpullしてすぐ使えるか、パッケージをインストールする一手間があるかの違いだけかと。

投稿2019/02/08 03:21

t_obara

総合スコア5488

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

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

ti1050

2019/02/09 05:11

ありがとうございます!わかりやすかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問