私は、次のファイル構造を持つプロジェクトがあります。新しい画像から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 2
とfile.txt
の
- 更新内容:
こんにちは今、1
、私は次の手順を実行したとし。
- は私のアプリの新しいイメージを構築する(そのコピー
file.txt
の新バージョン) - タグをバージョン
0.2.0
としてドッカーハブに押し込みます。 - 私のアプリケーションに
michaelperrin/app-test:0.2.0
を使用していることを伝えるために私のdocker-compose.yml
ファイルをサーバに変更してください。 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
コンテナ内に作成されている可能性が他のすべてのファイルを削除するということです。
ありがとう、ありがとう、私はその点を理解しています。アップロードをホストと共有してそれらを保持する必要がありますか? –
コンテナの背後にある哲学は、あなたがいつもそれを捨てることができるということです。だから私はそれらを保存しておくために別の場所にアップロードを保存します。ホストは1つの解決策([ボリューム](https://docs.docker.com/engine/tutorials/dockervolumes/)を考えてください)である可能性があります。 – n2o
ランタイム/アプリケーション・コンテナは、ボリューム・コンテナが入っている更新/アップグレード時に削除されるはずです。 – ASR