2017-02-21 27 views
0

Nginx + php-fpmで実行される単純なWebアプリケーションのDockerベースのセットアップに取り組んでいます。実際のPHPコードを格納するために私が見てきた共通の提案は、ホストにそれを格納し、それをNginxとPHPの両方のコンテナに読み取り専用でマウントすることです。共有されている一時的な読み取り専用のDockerボリューム

しかし、自分の設定を自己完結型にして、Amazon ECSでAuto Scalingを簡単に使用できるようにします。言い換えれば、コードをホストから引き出すのではなく、何らかの形でバンドルしたいと思っています。

これは、2つのDockerコンテナ間で共有できる読み取り専用ボリュームであり、それらのコンテナが破棄された後も保持されないことを私が欲しいと思うようです。これは可能ですか?それとも良い方法がありますか?

答えて

1

ドッカーイメージには、データがあらかじめ入力されたボリュームを含めることができます。これを実現するには、Dockerfileにディレクトリを作成し(たとえばCOPYまたはRUNを使用)、それをボリュームとして宣言します。 、

FROM php:7-fpm 

COPY ./app /var/www/html 
VOLUME /var/www/html 

新しいボリュームを作成します。このイメージから新しいコンテナを作成する画像の/var/www/htmlディレクトリからのデータでそれを初期化し、内部にそれをマウントします。これは、ボリューム内のアプリケーションコードが含まれているイメージを構築することができますあなたの新しいコンテナは同じ場所にあります。

詳細についてはthe documentation比較:

ドッカーrunコマンドは、ベース画像内の指定された場所に存在する任意のデータを新たに作成されたボリュームを初期化します。 /myvolで新しいマウントポイントを作成するには、docker runの原因となる画像で

FROM ubuntu 
RUN mkdir /myvol 
RUN echo "hello world" > /myvol/greeting 
VOLUME /myvol 

このDockerfile結果と新たに作成したボリュームにgreetingファイルをコピーします。たとえば、次のようDockerfileスニペットを考えてみましょう。

これは単にdocker runを使用してアプリケーションイメージを起動することができます:

docker run -d --name app my_application_image 

その後、あなたはnginxのコンテナを実行し、--volumes-fromフラグを使用して、アプリケーションコンテナとして同じボリュームを使用するように設定することができます

docker run -d --name web --link app:app --volumes-from app my_nginx_image 

この後、両方のコンテナに取り付けられたアプリケーションコードを含むDockerボリュームがになります。

+0

これは私の質問の「一時的な」部分をカバーしていますか?私の理解から、このメソッドは、コンテナが終了した後、孤立したボリュームを残していました。私はこれを避けることを望んでいました。 – phu

+0

コンテナのボリュームは、少なくとも['--volumes'または' -v'フラグを使用するときは削除してください(https://docs.docker.com/engine/reference/commandline/rm/# /オプション)。 – helmbert

関連する問題