GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Dockerコンテナの外部のファイルにアクセスする方法

コンテナが分離されている場合、おそらくデータを保存するために、どのようにホストマシンと通信できますか?画像からコンテナを作成する場合、コンテナを削除すると、生成されたデータはすべて失われるためです。

したがって、永続的なストレージを用意する方法が必要です。

バインドマウントを使用してこれを行うことができます およびボリューム

バインドマウントがホストコンピューター上の任意のフォルダーを指すことができ、Dockerによって直接管理されないことを除いて、2つの間に大きな違いはありません。

それらから始めましょう。 1つの典型的な例はログです。アプリがコンテナ内の/usr/src/app/logsにログファイルを作成するとします。 。 -vを使用して、これをホストマシン上のフォルダーにマップできます。 (--volumeと同じ )docker runでコンテナを実行するときにフラグを立てます 、次のように:-v ~/logs:/usr/src/app/logs

これにより、そのフォルダがユーザーのホームディレクトリのlogsサブフォルダにマップされます。

ノード:-m または--mount フラグは非常によく似た方法で機能します

これは、examplenodeで使用されるフラグです。 以前に作成した画像:

docker run -d -p 80:3000 -v ~/logs:/usr/src/app/logs --name node-app examplenode

これで、Nodeアプリを実行できるようになり、ログはDockerコンテナー内ではなく、ホストコンピューターに保存されます。

examplenodeに注意してください appは/usr/src/app/logsにログを生成しません 、これは単なる例であり、最初にそのロギングを設定する必要があります。

docker inspectを実行すると、ボリュームに関する詳細が一覧表示されます。 コンテナ名の「マウント」の下:

"Mounts": [
    {
        "Type": "bind",
        "Source": "/Users/flavio/logs",
        "Destination": "/usr/src/app/logs",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],

"Type": "bind"が表示されますか ?これは、バインドマウントを作成したことを意味します 。

それでは、ボリュームについてお話ししましょう。 。

バインドマウントとボリュームの違いは、ボリュームを作成することにより、Dockerが管理するフォルダーにデータを保存することです。つまり、ファイルのアクセス許可と所有権を処理し、それらのボリュームを管理するためのツールを提供します。バインドマウントはファイルシステムパスに基づいていますが、Dockerはそれらを回避するツールを提供できません。

たとえば、Dockerでは、docker volume pruneを実行して、未使用のボリュームをすべて削除できます。 またはdocker system prune --volumes

ボリュームを作成するには、最初にdocker volume createを実行する必要があります :

docker volume create logs

これで、docker volume lsを使用できます およびdocker volume inspect システムボリュームに関する詳細データを取得するには:

次に、docker runを実行します オプション-v logs:/usr/src/app/logs (フォルダではなくボリューム名を教えてください)

docker run -d -p 80:3000 -v logs:/usr/src/app/logs --name node-app examplenode

現在、docker inspectを実行しています 画像上にマウントされたボリュームが表示されます:

"Mounts": [
    {
        "Type": "volume",
        "Name": "logs",
        "Source": "/var/lib/docker/volumes/logs/_data",
        "Destination": "/usr/src/app/logs",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": ""
    }
],

見る?これで、ログは/var/lib/docker/volumes/logs/_dataに保存されます。 フォルダ。

たとえば、クラウドサービスにコンテナをデプロイするときは、ボリュームが不可欠になります。

docker volume rm <name>を実行しているボリュームを削除できます 。


Docker
  1. Dockerを使用してWordPressをインストールする方法

  2. Dockerコンテナ内でプログラムを実行する方法は?

  3. Dockerコンテナに静的IPを割り当てる方法

  1. DockerコンテナでMySQLを実行する方法

  2. DockerコンテナにSSHで接続する方法

  3. Dockerコンテナを終了する方法

  1. DockerコンテナにVimをインストールする方法

  2. Dockerコンテナを一覧表示する方法

  3. ホストから Docker コンテナのネットワーク名前空間にアクセスする方法