LoginSignup
31
35

More than 3 years have passed since last update.

【Docker】Railsでgemをcacheする

Last updated at Posted at 2019-06-10

概要

以下のようなスタンダードなdocker-compose.ymlが存在するとします。
このままではgemを追加する度にdocker-compose buildをする必要があり、buildの度にかなりの時間がかかります。これは、buildの度にgemファイルを一からインストールし直すためです。

そこで、gemを追加する際に追加したgemのみインストールする方法を紹介します。

docker-compose.yml
version: "3"
services:
  app:
    build: .
    volumes:
      - .:/app
    depends_on:
      - postgres
  postgres:
    image: postgres
    ports:
      - "5432:5432"
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

設定

以下の手順で対応を行います。

  • (1) environmentを使用し、BUNDLE_PATHを設定。
  • (2) 名前付きvolumeのbundle_pathを設定し、トップレベルのvolumesに追加します。

実際に書き換えたdocker-compose.ymlは以下のようになります。

docker-compose.yml
version: "3"
services:
  app:
    build: .
    volumes:
      - .:/app
      - bundle_path:/bundle # 追加箇所
    environment:
      - BUNDLE_PATH=/bundle # 追加箇所
    depends_on:
      - postgres
  postgres:
    image: postgres
    ports:
      - "5432:5432"
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  bundle_path: # 追加箇所
  postgres-data:

使用方法

gemのcache作成

docker-compose.ymlを以下のように変更したらgemのキャッシュを作成する為に以下のコマンドを実行します。

$ docker-compose app bundle install

新しいgemの追加

  • (1) 使用しているコンテナがあれば停止します。
$ docker-compose down
  • (2) gemをGemfileに追加し、インストールします。(新たに追加されたgemの更新のみ実行されます。)
$ docker-compose run app bundle install
  • (3) 再びコンテナを立ち上げます。
$ docker-compose up

以上でgemを追加する度にdocker-compose buildを実行する必要がなく、より効率的に開発を行うことができます。

参考

31
35
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
35