序章

一般に、Dockerコンテナーは一時的なものであり、コンテナーで発行されたコマンドが完了するまで実行されます。 デフォルトでは、コンテナー内で作成されたデータは、コンテナー内からのみ、コンテナーの実行中にのみ使用できます。

Dockerボリュームを使用して、ホストシステムとDockerコンテナー間でファイルを共有できます。 たとえば、公式のDocker Nginxイメージを使用し、後で分析するためにNginxのログファイルの永続的なコピーを保持したいとします。 デフォルトでは、 nginx Dockerイメージはにログインします /var/log/nginx DockerNginxコンテナのディレクトリinside。 通常、ホストファイルシステムからは到達できません。

このチュートリアルでは、コンテナ内のデータをホストマシンでアクセスできるようにする方法について説明します。

前提条件

この記事をフォローするには、次のUbuntu18.04サーバーが必要です。

Dockerを初めて使用する場合は、 Dockerエコシステムシリーズで、主要な概念の詳細な概要を説明します。

注:前提条件には、Ubuntu 18.04にDockerをインストールするための手順が記載されていますが、 docker この記事のDockerデータボリュームのコマンドは、Dockerがインストールされている限り、他のオペレーティングシステムでも機能するはずです。

ステップ1—ボリュームのバインドマウント

次のコマンドは、というディレクトリを作成します nginxlogs 現在のユーザーのホームディレクトリにあり、バインドマウントします。 /var/log/nginx コンテナ内:

  1. docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx

このコマンドを詳しく調べてみましょう。

  • --name=nginx コンテナに名前を付けて、より簡単に参照できるようにします。
  • -d プロセスを切り離し、バックグラウンドで実行します。 そうしないと、空のNginxプロンプトを監視しているだけで、Nginxを強制終了するまでこの端末を使用できません。
  • -v ~/nginxlogs:/var/log/nginx をリンクするバインドマウントボリュームを設定します /var/log/nginx Nginxコンテナ内から ~/nginxlogs ホストマシン上のディレクトリ。 Dockerは : ホストのパスをコンテナパスから分割し、ホストパスが常に最初に来ます。
  • -p 5000:80 ポートフォワードを設定します。 Nginxコンテナがポートでリッスンしています 80 デフォルトでは。 このフラグは、コンテナのポートをマップします 80 ポートへ 5000 ホストシステム上。
  • nginx コンテナをNginxイメージから構築する必要があることを指定します。このイメージは、コマンド nginx -g “daemonoff”を発行してNginxを起動します。

注: -v フラグは非常に柔軟です。 構文を少し調整するだけで、ボリュームをバインドマウントまたは名前付けできます。 最初の引数が / また ~/、bindmountを作成しています。 それを削除すると、ボリュームに名前を付けることになります。

  • -v /path:/path/in/container ホストディレクトリをマウントし、 /path/path/in/container
  • -v path:/path/in/container 名前の付いたボリュームを作成します path ホストとは関係ありません。

名前付きボリュームの詳細については、Dockerコンテナ間でデータを共有する方法を参照してください。

ステップ2—ホスト上のデータへのアクセス

これで、マシンのDockerコンテナ内で実行されているNginxのコピーと、ホストマシンのポートができました。 5000 Nginxのポートのそのコピーに直接マップします 80.

サーバーのIPアドレスまたはホスト名とポート番号を使用して、Webブラウザにアドレスをロードします。 http://your_server_ip:5000. 君は見るべきだ:

さらに興味深いことに、 ~/nginxlogs ホスト上のディレクトリ、私たちは見るでしょう access.log コンテナによって作成された nginx これは私たちの要求を示します:

  1. cat ~/nginxlogs/access.log

これは次のように表示されます。

Output
203.0.113.0 - - [11/Jul/2018:00:59:11 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" "-"

に変更を加えた場合 ~/nginxlogs フォルダを使用すると、Dockerコンテナ内からもリアルタイムでそれらを確認できます。

結論

このチュートリアルでは、コンテナとホストファイルシステム間で情報を共有するためのDockerデータボリュームを作成する方法を示しました。 これは、デバッグのためにログにアクセスする必要がある開発環境で役立ちます。 コンテナー間で永続データを共有する方法の詳細については、Dockerコンテナー間でデータを共有する方法を参照してください。