2017-01-13 21 views
0

私は、次のファイル構造を持つプロジェクトがあります。新しい画像からDockerコンテナを更新するには?

- Dockerfile 
- app/ 
    - file.txt 
    - uploads/ 

file.txtファイルがこんにちは1が含まれています。

Dockerfileアプリ画像を生成し、非常に簡単である:

FROM busybox 

COPY ./app /var/www/app 
VOLUME /var/www/app/uploads 

生成された画像をmichaelperrin/app-testリポジトリにドッカーハブに押し込まれます。アプリが展開されている私のサーバー上で

、私は次のようdocker-compose.ymlファイルがあります。

  • アプリの画像:

    version: '2' 
    services: 
        app: 
        image: michaelperrin/app-test:0.1.0 
        working_dir: /var/www/app 
        volumes: 
         - /var/www/app 
    
        nginx: 
        image: nginx:1.11 
        volumes_from: 
         - app 
        working_dir: /var/www/app 
    

    をこれは、2個のコンテナを定義します。

  • アプリファイルにアクセスできるNginxサーバー。

アプリはdocker-compose up -dコマンドで実行されます。

実行docker-compose exec nginx cat test-file.txtため、表示されます:私のローカルマシン上でHello 2file.txt

  1. 更新内容:

    こんにちは今、1

    、私は次の手順を実行したとし。

  2. は私のアプリの新しいイメージを構築する(そのコピーfile.txtの新バージョン)
  3. タグをバージョン0.2.0としてドッカーハブに押し込みます。
  4. 私のアプリケーションにmichaelperrin/app-test:0.2.0を使用していることを伝えるために私のdocker-compose.ymlファイルをサーバに変更してください。
  5. docker-compose up -d(確かにdocker-compose restart)を実行してください。

次に、端末出力:

Status: Downloaded newer image for michaelperrin/app-test:0.2.0 
Recreating apptest_app_1 
Recreating apptest_nginx_1 

そしてここでは私の問題である:私はdocker-compose exec nginx cat test-file.txtを実行する場合

それはまだこんにちは1が表示され、ないこんにちは2。私が見つけた

唯一の解決策は、次の操作を実行することでした。

docker-compose stop app 
docker-compose rm app 
docker-compose up -d 

は、任意のより良い解決策はありますか?

rm解決策の問題は、それが/var/www/app/uploadsディレクトリ(事実にもかかわらず、それがDockerfileでボリュームとして宣言されている)で、私のアプリでappコンテナ内に作成されている可能性が他のすべてのファイルを削除するということです。

答えて

2

これはできないと思います(本当に願っています)。イメージからインスタンス(コンテナ)を作成し、作成時の状態を作成します。新しいイメージの作成がコンテナに影響を及ぼす場合は、意図しない副作用があります。

したがって、古いコンテナを削除し、新しいコンテナで新しいコンテナを作成する必要があります。

+0

ありがとう、ありがとう、私はその点を理解しています。アップロードをホストと共有してそれらを保持する必要がありますか? –

+1

コンテナの背後にある哲学は、あなたがいつもそれを捨てることができるということです。だから私はそれらを保存しておくために別の場所にアップロードを保存します。ホストは1つの解決策([ボリューム](https://docs.docker.com/engine/tutorials/dockervolumes/)を考えてください)である可能性があります。 – n2o

+1

ランタイム/アプリケーション・コンテナは、ボリューム・コンテナが入っている更新/アップグレード時に削除されるはずです。 – ASR

関連する問題