前書き

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

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

このチュートリアルでは、ホストマシンでアクセス可能なコンテナ内からデータを作成する方法を調べます。

前提条件

この記事を読むには、次のものを備えたUbuntu 18.04サーバーが必要です。

Dockerを初めて使用する場合は、https://www.digitalocean.com/community/tutorials/the-docker-ecosystem-an-introduction-to-common-components [The Docker Ecosystem]シリーズが主要な概念の詳細な概要を提供します。

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

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

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

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

  • `+-name = nginx +`はコンテナに名前を付けるので、より簡単に参照できます。

  • `+ -d +`はプロセスを切り離し、バックグラウンドで実行します。 そうしないと、空のNginxプロンプトが表示されるだけで、Nginxを殺すまでこの端末を使用できません。

  • `+ -v〜/ nginxlogs:/ var / log / nginx `は、Nginxコンテナー内の ` / var / log / nginx `ディレクトリをホストの `〜/ nginxlogs `ディレクトリにリンクするバインドマウントボリュームを設定します機械。 Dockerは「:+」を使用してホストのパスをコンテナパスから分割し、ホストパスが常に最初に来ます。

  • `+ -p 5000:80 `はポートフォワードを設定します。 Nginxコンテナはデフォルトでポート「+80」をリッスンしています。 このフラグは、コンテナのポート「80」をホストシステムのポート「5000」にマッピングします。

  • + nginx +`は、コンテナがNginxイメージから構築されることを指定します。これにより、コマンドhttps://github.com/nginxinc/docker-nginx/blob/8921999083def7ba43a06fabd5f80e4406651353/mainline/jessie/Dockerfile#L27[+nginx- g “daemon off” + `]でNginxを起動します。

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

これで、マシンのDockerコンテナ内でNginxのコピーが実行され、ホストマシンのポート「5000」がNginxのポート「80」のコピーに直接マップされます。

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

image:https://assets.digitalocean.com/articles/docker-host/nginx.png [Nginx Start Page]

さらに興味深いことに、ホストの `〜/ nginxlogs +`ディレクトリを見ると、リクエストを表示するコンテナの ` nginx `によって作成された ` access.log +`が表示されます。

cat ~/nginxlogs/access.log

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

Output203.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データボリュームを作成する方法を示しました。 これは、デバッグのためにログにアクセスする必要がある開発環境で役立ちます。 コンテナ間で永続データを共有する方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-share-data-between-docker-containers [Dockerコンテナ間でデータを共有する方法]をご覧ください。 。