Passenger と Apache を使用して Rails アプリを提供するための完全な機能を備えたコンテナーがあり、コンテナー内に /var/www/app/public にルーティングする vhost があるとします。コンテナーはプロセスのようなものであると想定されているため、Rails コードが変更された場合はどうすればよいでしょうか? が Git で複製され、レポに保留中の変更がある場合、これらの変更app
のコンテナをどのようにpull
自動的に変更できますか?
3 に答える
docker v0.8では、稼働中のコンテナで新しいコマンドを起動できるようになるので、やりたいことができるようになります。
当面の解決策の 1 つは、ボリュームを使用することです。
オプション 1: Docker マネージド ボリューム
FROM ubuntu
...
VOLUME ["/var/www/app/public"]
ADD host/src/path /var/www/app/public
CMD start rails
コンテナーを起動して実行すると、git pull が必要になったときに、次のように簡単に実行できます。
$ docker ps # -> retrieve the id of the running container
$ docker run -volumes-from <container id> <your image with git installed> sh -c 'cd/var/www/app/public && git pull -u'
これにより、最初に実行中のコンテナーでソースが更新されます。
オプション 2: ホスト ボリューム
次の方法でコンテナを開始できます。
$ docker run -v `pwd`/srcs:/var/www/app/public <yourimage>
次にgit pull
、ホストのソース ディレクトリで、コンテナーのソースを更新します。
このシナリオでは、イメージをビルドし、このイメージをコンテナで実行しているように聞こえます。
実行中のコンテナーの元になったイメージを使用して、別のビルド ステップを追加して、最新のコードを git pull することができます。これは、既存のイメージに基づいた構築としての増分更新と見なします。(プライベート インデックスを使用していると仮定して) 適切にタグ付けしてプッシュすることをお勧めします。新しいイメージを実行できるようになります。
必要に応じて、ソフトウェアの基本イメージを再構築することもできます。Dockerfileを使用して、ソフトウェアの git チェックアウトを含む元のイメージを構築することを想定しています。その後、タグを付けてインデックスにプッシュし、適切に使用できます。