Docker ADD vs VOLUME 質問する

Docker ADD vs VOLUME 質問する

ADD私は Docker を学習中ですが、と をいつどこで使用するべきか疑問に思っていますVOLUME。これら 2 つの機能は、次のようになっていると思います。

追加

ビルド時にファイルをイメージにコピーします。イメージにはすべてのファイルが含まれているため、簡単にデプロイできます。一方、毎回ビルドする必要があるのは、開発においては良いアイデアとは思えません。ビルドには、開発者がコマンドを実行してコンテナを再構築する必要があり、さらにコンテナのビルドには時間がかかる可能性があるからです。

音量

コンテナー内にホスト フォルダーをマウントして、ファイルを簡単に変更し、コンテナー内のアプリが変更に反応するのを確認できると理解しています。docker run -v開発中は素晴らしいように見えますが、この方法でファイルをデプロイする方法がわかりません。

ベストアンサー1

追加

これら2つの基本的な違いは、ADD追加するものがフォルダであろうとファイルであろうと、実際にはあなたのイメージの一部. その後、あなたがビルドしたイメージを使用する人は誰でも、あなたが作成したものすべてにアクセスできますADD。これは、後でイメージを削除した場合でも当てはまります。Docker はレイヤーで動作し、レイヤーADDはイメージの一部として存在し続けるためです。明確に言うと、ビルド時にのみ何かを行うことができ、実行時にADD行うことはできません。ADD

使用したいケースの例をいくつか挙げますADD:

  • requirements.txtファイルにいくつかの要件があり、それを参照してDockerfileにインストールしたいとします。その後、次ADD ./requirements.txt /requirements.txtのようにします。RUN pip install -r /requirements.txt
  • アプリ コードを Dockerfile 内のコンテキストとして使用したい場合、たとえば、アプリ ディレクトリをイメージ内の作業ディレクトリとして設定し、イメージから実行されるコンテナー内のデフォルト コマンドで実際にアプリを実行する場合は、次のようにします。

    ADD ./ /usr/local/git/my_app

    WORKDIR /usr/local/git/my_app

    CMD python ./main.py

音量

一方、ボリュームは、イメージから実行されるコンテナが、コンテナが実行されているローカルマシン上のパスにアクセスできるようにするだけです。VOLUMEDockerfile 内のディレクトリのファイルを使用できませんボリュームディレクトリ内のものはビルド時にアクセスできないしかし実行時にアクセス可能

使用したいケースの例をいくつか挙げますVOLUME:

  • コンテナ内で実行されているアプリは にログを記録します/var/log/my_app。これらのログがホストマシン上でアクセス可能であり、コンテナが削除されたときに削除されないようにする必要があります。これを行うには、 をDockerfile に/var/log/my_app追加してにマウントポイントを作成しVOLUME /var/log/my_app、コンテナを次のように実行します。docker run -v /host/log/dir/my_app:/var/log/my_app some_repo/some_image:some_tag
  • コンテナ内のアプリがアクセスできるようにしたいローカル設定ファイルがいくつかあります。おそらく、それらの設定ファイルはローカルマシン、開発環境、本番環境で異なります。特にそれらの設定ファイルが秘密である場合は、絶対にあなたのイメージには入れたくないその場合の良い戦略は、VOLUME /etc/settings/my_app_settingsDockerfile に を追加し、 を使用してコンテナを実行しdocker run -v /host/settings/dir:/etc/settings/my_app_settings some_repo/some_image:some_tag、アプリが実行される予定のすべての環境に /host/settings/dir が存在することを確認することです。

おすすめ記事