あなたのDockerを半分にしてください


私は本当にDockerとコンテナ化の概念が大好きです.私は1年以上のMampのdevの設定に触れていないし、私のローカルPHP CLIをかろうじて使用します.しかし、常に一つの問題があった.Laravelアプリのための第2の応答時間とより大きなWordPressスタックのための3 - 7秒は、全く一般的です.ありがたいことに、この問題に対する解決策があります.

どのようなDocker同期ですか?
Mac用のDocker(Windows用)のパフォーマンス問題は、DockerとOSの間のOSファイルシステム層にルーツがあります.Linux上では、Dockerはファイルシステムからファイルやフォルダを直接マウントすることができますが、Mac Dockerではファイルをディスクに書き込むのを気にするOSにリクエストを渡す必要があります.MacOSの場合、OSXFSは部屋の象です.これは大きな取引のように聞こえないが、それは本当にです.ミリ秒の違いも、あなたの全体のアプリの半分に1秒を積むことができます場合は、500のソースファイルを読む必要があります.
ありがたいことに、Dockerはボリュームをファイルにして、Linuxカーネルによって処理された場合、ネイティブのマウントを使用することができます.そして、これは正確にDockerの同期は何です.これは、すべてのアプリケーションのソースファイルを保持するボリュームを作成し、それを読むことができますし、ボリュームにかなり高速書き込みをあなたのアプリに利用可能になります.ボリュームが通常外の世界(すなわち、あなたのファイルシステム)に縛られないので、Docker Syncはあなたのホスト・ファイルシステムでコンテナーの内部を同期させるのを気にかける異なったツールを実装します.これは、エディタ内の任意のファイルを編集することができます、彼らはボリュームに同期され、あなたのアプリはそれにアクセスすることができます.

Dockerシンクベンチマーキング
私はベンチマークドッカーの同期は、要求が高速かどうか推測の代わりにハード番号を見てみたかったので.中には次の2つのアプリはラーラベルとWordPressに基づいていますimages from Bitnami 両方を実行するために使用されます.ここで使用されている主なメトリックは、TMFB、または最初のバイトへの時間です.私は、特定のページキャッシングなしで、行で10回、両方のアプリからページを開けました.両方のアプリケーションはPHP 7.3で実行しています.
アプリ
ドッカーシンク

マックス
メディアン
差異
ラーラベル5.8
オフ
1035 ms
2158 MS
1386 MS
on
234 MS
303 MS
251 ms
- 81 %
ワードプレス5.2
オフ
2467 ms
3942 ms
2722 ms
on
881 ms
1589 MS
1271 ms
- 53 %

Docker同期を使う方法
私はあなたがフックされていることをかなり確信していますか?応答時間の80 %までの節約は、全くばかげています.本当だ.では、どのようにしてDocker Syncを設定するのですか?

1 .インストール
あなたがRubyバージョンをアップグレードしなかったとしても(v 2.3は現在MacOSで出荷されます).インストールするには、次のコマンドを実行します.
gem install --user-install docker-sync
# or globally via
sudo gem install docker-sync

2 .新しいdocker syncを追加します.プロジェクトへのYMLファイル
この設定ファイルはファイルを保存したり同期したりするファイルをDocker Syncに指示します.ここでは、基本的な設定ファイルをルートフォルダにドロップします.
version: "2"
syncs:
  your-app-files:
    notify_terminal: true
    src: './'
    sync_excludes: ['.git', '.idea', 'node_modules']
まず、下にsyncs オプションを作成するボリュームを指定します.注意してくださいボリュームの名前your-app-files ここでは、マシン全体で一意でなければなりません.The src オプションはどのファイルをデフォルトでボリュームにコピーするかを定義します.sync_excludes オプション.私は、git、phpstormとnodeilesモジュールフォルダをここで除外しました.GitもIDEフォルダもアプリケーション自体とは関係がないので、コンテナには必要ありません.彼らはまた、通常のPHPアプリのために必要とされていないので、特に、それは4596895ファイルやフォルダが同期されるまで多くの時間がかかる可能性がありますので、このように削除することができますNODERANモジュールが除外されます.
ボリュームの追加の設定paramsを見つけることができますofficial documentation .

dockor - dev . ymlファイルを追加します.
現在のバージョンのDockerを使用すると、以前のDocker構成の特定の設定を上書きすることができます.YMLファイル.これは非常に便利です.なぜなら、現在のDockerを使うことができるからです.YMLファイルはそのままです.あなたがしばらくの間にDocker同期を使用しないように衝動を感じるならば、あなたはレギュラーであなたのアプリを始めることができましたdocker-compose up コマンド.
以下に例を示します.
version: "2"
services:

  php:
    volumes:
      - your-app-files:/app:nocopy

  nginx:
    volumes:
      - your-app-files:/app:nocopy

volumes:
  your-app-files:
    external: true
このファイルはDockerの構成に対してDockerの構成からの通常のマウントを使用しないように指示します.ただし、your-app-files 容器にボリュームを入れる.ファイルへのアクセスを必要とするすべてのコンテナにボリュームを追加する必要があることに注意してください.それは基本的にそれです.

4 . Docker sync stackを開始する
実際には、2つの方法があります.
  • 使用によってdocker-sync-stack or
  • 使用によってdocker-sync and docker-compose .

  • ドッキングシンクスタック
    docker-sync-stack start
    
    このコマンドは、最初にボリュームを作成して、それを使用のために準備して、次に、呼び出しによってコンテナを動かすDocker Syncを始めますdocker-compose -f docker-compose.yml -f docker-compose-dev.yml up , Dockerはコンフィギュレーションファイルの両方を構成するDockerを起動します.
    ここでの欠点は、同期とDockerスタックがフォアグラウンドで実行されることです.私は個人的には1つのアプリのための複数の端末のウィンドウを開く必要があるとして、これは嫌いですが、それは高速かつ効率的です.
    スタックを停止するにはCMD + C .

    Dockerの同期
    docker-sync start
    # wait until the command finishes creating the volume, then:
    docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d
    
    これは私が現在使用する方法です.私はbash関数または別名を後で書くかもしれません.端末で作業を続けることができますKitematic コンテナの高速ログ表示.( ps : KatematicはMacインストールパッケージ用のDockerに組み込まれています.

    許可問題を解決する方法
    あなたが私のような許可問題に走るならば、Laravelがアップロードを保存することができないログとWordPressを書くことができないならば、あなたは多分もう一つのユーザーIDを指定しなければなりませんdaemon ユーザ.これはファイルの保存中に競合します.これを防ぐためにsync_userid: '1' あなたのDocker同期に.設定ファイル1 コンテナ内のデーモンユーザのユーザIDです.
    その行を追加した後、すべての問題が即座に消え、私はセットアップで動作することができた.

    結論
    完全なスタックを走らせるのにかなり時間がかかった.私は、ドキュメントが理解するのが簡単でないとわかります、しかし、私はいろいろなものを調べることによってきれいなスタックを準備することができましたexamples プロジェクト管理者自身によって提供されます.許可の問題を考え出す追加の時間を費やした後、私はDockerシンクスタックで私のアプリを実行することができたし、巨大な生産性の向上を得た.ページはとても速く今すぐ読み込まれている、それは信じられないほどの違いは、この小さなツールになります.
    管理者Eugenマイヤーとこの素晴らしいツールを出版するためのすべての貢献者に多くの巨大な感謝.
    この投稿は当初公表されたBlog.Kovah.de