DockerのDBコンテナを高速化(こうそくか)する

Docker上でPHPUnitを(まわ)してたら滅茶苦茶(めちゃくちゃ)(おそ)かったので (なに)高速化(こうそくか)する方法(ほうほう)がないか調(しら)べたときの副産物(ふくさんぶつ)です。

DBのファイルをメモリ(じょう)格納(かくのう)させる

tmpfs を使用(しよう)することでホストのメモリをコンテナのストレージとしてマウントできます。
(よう)はRAMディスクなので、当然(とうぜん) volume と(ちが)ってデータの永続化(えいぞくか)はできないです。
Docker Compose での指定(してい)仕方(しかた)はPostgreSQLを(れい)にすると下記(かき)(とお)りです。

version: '3.7'

services:
  postgres-test:
    image: postgres
    environment:
      TZ: Asia/Tokyo
    tmpfs:
        - /var/lib/postgreql/data

実際(じっさい)計測(けいそく)

tmpfsなしの場合(ばあい)

$ phpunit
PHPUnit 8.5.2 by Sebastian Bergmann and contributors.

...............................................................  63 / 563 ( 11%)
............................................................... 126 / 563 ( 22%)
............................................................... 189 / 563 ( 33%)
............................................................... 252 / 563 ( 44%)
............................................................... 315 / 563 ( 55%)
............................................................... 378 / 563 ( 67%)
............................................................... 441 / 563 ( 78%)
............................................................... 504 / 563 ( 89%)
...........................................................     563 / 563 (100%)

Time: 21.37 minutes, Memory: 223.50 MB

OK (563 tests, 27596 assertions)

tmpfsありの場合(ばあい)

$ phpunit
PHPUnit 8.5.2 by Sebastian Bergmann and contributors.

...............................................................  63 / 563 ( 11%)
............................................................... 126 / 563 ( 22%)
............................................................... 189 / 563 ( 33%)
............................................................... 252 / 563 ( 44%)
............................................................... 315 / 563 ( 55%)
............................................................... 378 / 563 ( 67%)
............................................................... 441 / 563 ( 78%)
............................................................... 504 / 563 ( 89%)
...........................................................     563 / 563 (100%)

Time: 2.23 minutes, Memory: 223.50 MB

OK (563 tests, 27335 assertions)

NVMeのSSDを搭載(とうさい)したマシンを使用(しよう)しているのでストレージへの()()みも そこまで(おそ)くないはずですが、それでも10(ばい)ぐらい(はや)くなってます。

注意点(ちゅういてん)

メモリ不足(ぶそく)には()をつけてください。((ため)していないのでどんな挙動(きょどう)をするのかは()らないですが・・・)
あと、公式(こうしき)サイトによると"Docker on Linux"でしか動作(どうさ)しないと()かれています。 が、macOS(じょう)(ため)した(とき)(すこ)しは(はや)くなってました。

参考(さんこう)

Use tmpfs mounts | Docker Documentation