當在 docker container 中使用 rails 時, rails s/c 的啓動速度會異常的緩慢,有時候甚至要等上5分鐘,已經超出可以忍受的範圍了。
爲了避免每次啓動 container 的時候還要重新跑 bundle install ,所以除了程式碼本身是掛在外面的 volumn 之外,所有 bundle 的資料也同樣放到 volumn 裡,這會導致啓動 rails 的時候進行 volumn 存取的次數更頻繁,而 docker 本身在讀取 volumn 因爲要進行同步的關係本來就會有緩慢的問題,詳情請參考下面連結。
docker 在掛載 volumn 的時候可以設定掛載的方式,有 consistent, cached, delegated 三種可以選擇。
設定的方式也很簡單,只要在 volumn 的設定後加上:cached
即可,如下所示:
version: "3"
services:
oauth_server:
image: ruby:2.4.2
stdin_open: true
tty: true
env_file:
- ./rails/server.env
ports:
- "3000:3000"
volumes:
- ./shared_folder/app:/app
- ./shared_folder/bundle/gems:/usr/local/bundle/gems:cached
- ./shared_folder/bundle/extensions:/usr/local/bundle/extensions:cached
- ./shared_folder/bundle/bin:/usr/local/bundle/bin:cached
- ./shared_folder/bundle/cache:/usr/local/bundle/cache:cached
- ./shared_folder/bundle/specifications:/usr/local/bundle/specifications:cached