web-dev-qa-db-ja.com

Docker:ホストフォルダーとコンテナーフォルダーをライブ同期する方法は?

Nodeを使用したWebサイトで作業しています。そこで、サイトのファイルをコンテナのFSに追加し、Nodeをインストールし、コンテナを実行するときにアプリを実行し、プライベートポート80を公開する単純なDockerfileを作成しました。

しかし、そのアプリのファイルを変更したい場合は、コンテナイメージを再構築して再実行します。それには数秒かかります。

ホストシステムのアプリファイルを実行中のコンテナのファイルと同期させるために、NFSのような「ライブ同期」を行う簡単な方法はありますか?

これにより、変更を適用するために再起動するだけで済み、さらに良いことに、supervisorのようなものを使用すると、自動的に実行されます。

43
conradkdotcom

これを行うためにボリュームを使用できます。次の2つのオプションがあります。

  1. Docker管理ボリューム:

    docker run -v /src/path nodejsapp
    docker run -i -t -volumes-from <container id> bash
    

2番目のコンテナで編集したファイルは、最初のコンテナを更新します。

  1. ホストディレクトリボリューム:

    docker run -v `pwd`/Host/src/path:/container/src/path nodejsapp
    

ホストで行った変更により、コンテナが更新されます。

41
creack

OSXを使用している場合、特にノードベースのアプリ(多くのファイル)で、この種のボリューム共有が非常に遅くなる可能性があります。この問題については、 http://docker-sync.io が役立ちます。ボリューム共有を使用せずに、同期のようなボリューム共有を提供することにより、通常、コードのコンテナー読み取り/書き込み速度が向上します-使用するdocker-machineに応じて、50〜80回のディレクトリ。

パフォーマンスについては https://github.com/EugenMayer/docker-sync/wiki/4.-Performance を参照してください。使用方法の簡単な例については、ボイラープレートを参照してください https:// github.com/EugenMayer/docker-sync-boilerplate あなたの場合、ユニゾンの例 https://github.com/EugenMayer/docker-sync-boilerplate/tree/master/unison は同期のようなNFSに必要なもの

3
Eugen Mayer