この記事では、Dockerデータボリュームの概念を紹介します。それらは何であるか、なぜ有用であるか、さまざまなタイプのボリューム、それらの使用方法、およびそれらをいつ使用するかです。また、 docker
コマンドラインツールを使用してDockerボリュームを使用する方法の例をいくつか紹介します。
記事の最後に到達したら、あらゆるタイプのDockerデータボリュームの作成と使用に慣れているはずです。
このチュートリアルに従うには、次の条件が必要です。
サーバーをお持ちでない学生は[こちら](https://cloud.tencent.com/product/cvm?from=10680)から購入できますが、個人的には無料のTencent Cloud [Developer Lab](https://cloud.tencent.com/developer/labs/lab/10054?from=10680)を使用して実験し、[サーバーを購入]( https://cloud.tencent.com/product/cvm?from=10680)。
**注:**前提条件はUbuntu 14.04にDockerをインストールするための手順を提供しますが、Dockerがインストールされている限り、この記事のDockerデータボリュームの docker
コマンドは他のオペレーティングシステムで実行できます。
Dockerを使用するには、Docker固有の概念を理解する必要があります。ほとんどのドキュメントでは、Dockerのツールセットの使用方法を説明することに重点を置いており、これらのツールを使用する理由を説明していません。 Dockerを初めて使用する場合、これは混乱を招く可能性があるため、Dockerコンテナの使用を開始する前に、まずいくつかの基本事項を紹介します。以前にDockerを使用したことがあり、データボリュームの使用を開始する方法を知りたい場合は、次のセクションに進んでください。
Dockerコンテナは仮想マシンに似ています。基本的に、事前にパッケージ化された「Linuxボックス」をコンテナ内で実行できます。 Dockerコンテナと一般的な仮想マシンの主な違いは、Dockerは通常の仮想マシンとは異なり、周囲の環境から分離されていることです。 DockerコンテナはLinuxカーネルをホストオペレーティングシステムと共有します。つまり、仮想マシンのように「起動」する必要はありません。
多くのことが共有されているため、Dockerコンテナの起動は迅速で安価な操作です。ほとんどの場合、通常の実行中に完全なDockerコンテナ(通常の仮想マシンと同等)のコマンドラインプログラムを起動できます。これは、複雑なシステムの展開をより簡単でモジュール式にするので良いことですが、通常の仮想マシンのアプローチとは異なり、仮想化された世界の人々に予期しない副作用があります。
Dockerデータボリュームの主な使用例は3つあります。
3番目のケースはわずかに改善されているため、このチュートリアルでは説明しませんが、最初の2つのケースは非常に一般的です。
最初の(そして最も単純な)ケースでは、コンテナを削除した場合でも、データをアイドル状態にしたいだけなので、通常、最も簡単な方法は、データの保存場所をDockerに管理させることです。
「データボリューム」はDockerで直接作成できないため、ボリュームがアタッチされたデータボリュームコンテナを作成しました。このデータボリュームコンテナに接続する他のコンテナについては、Dockerの --volumes-from
オプションを使用して、このコンテナからボリュームを取得し、現在のコンテナに適用してください。これは一見少し珍しいので、このメソッドを使用して、コンテナが削除されても byebye
ファイルを変更しないようにする方法の簡単な例を見てみましょう。
まず、ボリュームを格納するための新しいデータボリュームコンテナを作成します。
docker create -v /tmp --name datacontainer ubuntu
これにより、 ubuntu
イメージと / tmp
ディレクトリに基づいて datacontainer
という名前のコンテナが作成されます。
ここで、 --volumes-from
フラグを指定して新しいUbuntuコンテナを実行し、以前と同じように bash
を再度実行すると、 / tmp
ディレクトリに書き込んだものはすべて datacontainer
コンテナに保存されます。 / tmp`ボリューム。
まず、 ubuntu
イメージを開始します。
docker run -t -i --volumes-from datacontainer ubuntu /bin/bash
- t
コマンドラインオプションは、コンテナ内から端末を呼び出します。 -i
フラグは、接続をインタラクティブにします。
ubuntu
コンテナのbashプロンプトで、 / tmp
の場所にファイルを作成します。
echo "I'm not going anywhere">/tmp/hi
先に進み、「exit」と入力してホストのシェルに戻ります。ここで、同じコマンドを再度実行します。
docker run -t -i --volumes-from datacontainer ubuntu /bin/bash
今回は hi
ファイルがすでに存在します:
cat /tmp/hi
見るべき:
I'm not going anywhere
必要な数の --volumes-from
フラグを追加できます(たとえば、複数のデータコンテナからのデータを使用するコンテナをアセンブルする場合)。必要な数のデータボリュームコンテナを作成することもできます。
この方法の唯一の注意点は、データボリュームコンテナ(この例では / tmp
)を作成するときに、コンテナ内のマウントパスしか選択できないことです。
Dockerコンテナのもう1つの一般的な使用法は、ホストとDockerコンテナ間でファイルを共有することです。これは、前の例の動作とは異なります。最初に「データのみ」のコンテナを作成する必要はありません。 Dockerイメージコンテナを実行して、ディレクトリの1つをホストシステム上のディレクトリの内容で上書きするだけです。
簡単な実例として、公式のDocker Nginxイメージを使用したいが、後で分析するためにNginxログファイルの永続的なコピーを保持したいとします。デフォルトでは、 nginx
Dockerイメージは / var / log / nginx
ディレクトリに記録されますが、これはDockerNginxコンテナの / var / log / nginx
です。通常、ホストファイルシステムからはアクセスできません。
ログを保存するフォルダーを作成し、共有ボリュームを使用してNginxイメージのコピーを実行し、Nginxがコンテナー内の / var / log / nginx
ではなくホストのファイルシステムにログを書き込むようにします。
mkdir ~/nginxlogs
次に、コンテナを起動します。
docker run -d -v ~/nginxlogs:/var/log/nginx -p 5000:80-i nginx
この run
コマンドは、これまで使用してきたコマンドとは少し異なるので、少しずつ分解してみましょう。
- v〜 / nginxlogs:/ var / log / nginx
-Nginxコンテナーの / var / log / nginx
ディレクトリーをホストの〜/ nginxlogs
ディレクトリーにリンクするボリュームをセットアップしました。 Dockerは :
を使用してホストのパスをコンテナパスから分割し、ホストパスは常に最初の場所にあります。- d
-プロセスをデタッチし、バックグラウンドで実行します。それ以外の場合は、空のNginxプロンプトのみが表示され、Nginxを強制終了するまでこのターミナルを使用できません。- p 5000:80
-ポートを前方に設定します。デフォルトでは、Nginxコンテナはポート80でリッスンしています。これにより、Nginxコンテナのポート80がホストシステムのポート5000にマップされます。注意を払うと、前の「run」コマンドとは別の違いに気付くかもしれません。これまで、すべての run
ステートメント(通常は / bin / bash
)の最後にコマンドを指定して、コンテナーで実行するコマンドをDockerに指示してきました。 Nginxイメージは公式のDockerイメージであるため、Dockerのベストプラクティスに従い、イメージの作成者は、Nginxを自動的に起動するコマンドを実行するようにイメージを設定します。ここで通常の / bin / bash
を破棄し、イメージの作成者にコンテナで実行するコマンドを選択させることができます。
これで、マシンのDockerコンテナ内でNginxのコピーが実行され、ホストポート5000がNginxポート80のコピーに直接マップされます。 curlを使用して簡単なテストリクエストを作成しましょう。
curl localhost:5000
Nginxが稼働中であることを示す画面表示HTMLがNginxから取得されます。しかし、さらに興味深いことに、ホストの 〜/ nginxlogs
フォルダーと access.log
ファイルを見ると、Nginxからの要求を示すログメッセージが表示されます。
cat ~/nginxlogs/access.log
次のようなものが表示されます。
172.17.42.1- - [23 /Oct/2015:05:22:51+0000]"GET / HTTP/1.1"200612"-""curl/7.35.0""-"
〜/ nginxlogs
フォルダーに変更を加えると、Dockerコンテナーからリアルタイムでそれらを表示することもできます。
結論として!ここでは、他のコンテナにデータを格納する方法として容量を使用できるデータボリュームコンテナを作成する方法と、ホストファイルシステムとDockerコンテナの間でフォルダを共有する方法を紹介しました。 Dockerデータボリュームに関しては、これは最も高度なユースケースを除くすべてのユースケースをカバーします。
Docker Composeを使用している場合は、 docker-compose.yml
ファイルでDockerデータボリュームを構成できます。詳細については、[Ubuntu14.04にDockerComposeをインストールして使用する方法](https://cloud.tencent.com/developer/article/1352212?from=10680)を参照してください。
頑張って幸せなドッカー!
Dockerデータボリューム関連のチュートリアルの使用の詳細については、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。
参照:「Ubuntu14.04でDockerデータボリュームを操作する方法」
Recommended Posts