#はじめに
前提:以下の記事どおりに環境構築をしてポートフォリオアプリを作成中です
サーバー接続時や、コンテナ起動時に時間を要しすぎる状況だったので、
改善のためにMac、Dockerに対して試してみたことを記します。(自分用メモ)
- 「そもそも環境構築が原因だよ!」
- 「ここも確認しておきなよ!」
そんなご意見ありましたら、教えていただけると幸いです。
#結論 「試したこと」
- PC 再起動
- 不要なディレクトリを docker volume から外す
- 不要な dockerコンテナ や ボリューム を削除する!
- 初期データ変更時は、変更部分のみDB反映させる
#環境
- macOS Catalina
- Docker version 20.10.2
- docker-compose version 1.27.4
(その他は上記リンクの環境です)
#MacBookの容量
-
アクティビティモニタ
で CPU や メモリ の確認 - とりあえず再起動してみる
#Docker
##1. docker-compose.yml の記述を見直す
マウント不要なディレクトリを Anonymous Volume で上書きし永続化から外す
web:
build:
env_file:
command:
volumes:
- .:/myapp
- bundle-data:/usr/local/bundle
#-------以下を追記-------
# 1. exclude volumes
- /app/vendor
- /app/tmp
- /app/log
- /app/.git
##2. Dockerディスクの使用状況確認
-
docker system df
コマンド - dockerデーモンが使用するディスク容量に関する情報を表示
- クライアントとデーモンのAPIが両方とも1.25以上で使える(
docker version
コマンドで調べる) - 公式ドキュメント(docker system df)
###①docker のディスク使用量を表示
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 5 2 16.43 MB 11.63 MB (70%)
Containers 2 0 212 B 212 B (100%)
Local Volumes 2 1 36 B 0 B (0%)
Build Cache 0 0 0B 0B
###②より詳細情報を表示
docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
my-curl latest b2789dd875bf 6 minutes ago 11 MB 11 MB 5 B 0
my-jq latest ae67841be6d0 6 minutes ago 9.623 MB 8.991 MB 632.1 kB 0
<none> <none> a0971c4015c1 6 minutes ago 11 MB 11 MB 0 B 0
alpine latest 4e38e38c8ce0 9 weeks ago 4.799 MB 0 B 4.799 MB 1
alpine 3.3 47cf20d8c26c 9 weeks ago 4.797 MB 4.797 MB 0 B 1
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
4a7f7eebae0f alpine:latest "sh" 1 0 B 16 minutes ago Exited (0) 5 minutes ago hopeful_yalow
f98f9c2aa1ea alpine:3.3 "sh" 1 212 B 16 minutes ago Exited (0) 48 seconds ago anon-vol
Local Volumes space usage:
NAME LINKS SIZE
07c7bdf3e34ab76d921894c2b834f073721fccfbbcba792aa7648e3a7a664c2e 2 36 B
my-named-vol 0 0 B
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED
###③不要なLocal Volumesを削除
docker volume prune #未使用volume(どのコンテナからも参照されていないvolume)を削除
rails db:seed_fu
コマンドを何度か実行していると、volumeが100個を超えていました。
このコマンドで14個にまで減りました!軽量化できてたらいいな。。
###④ビルドキャッシュを削除する
docker builder prune
###⑤いろいろ削除する
docker container prune #停止コンテナを一括削除
docker image prune #未使用のイメージを一括削除
docker network prune #未使用のネットワークを一括削除
docker system prune #未使用のコンテナ、イメージ、ネットワークを一括削除
##3. 初期データ投入方法
Railsデフォルトのseed
ではなく、seed-fu
というgemを使う
- テーブル別にファイル管理ができる
- 初期データを変更した際、該当ファイルのみDBへ反映できる
seed-fuに関するファイルが複数ある場合、
db / fixtures / development /shop.rb
db / fixtures / development /area.rb
rails db:seed_fu FILTER=shop.rb #選択したファイルのみDBへ反映される
== Filtering seed files against regexp: /shop.rb/
...
rails db:seed_fu #これだと全てのファイルがDBへ反映される
変更してない初期データまで反映してしまうと、不要なdocker volumeが増えてしまうかな?と感じただけです。実際にはよく分かりません。
完成した初期データを投入し、変更しないのが一番効率的だと思います。
#さいごに
見えない部分に無駄なものが溜まっているのでしょうか?
遅くなる原因になり得そうなものを一つ一つ潰していく作戦を実行しています。
どの処理がどの程度効果があるのか分かりませんが、とりあえず重くて動かない現象は無くなりました。
新策が増えたら追加します。改善策あれば教えてください。