4

ドッカーの使い方を学ぶので、ご容赦ください。私は使用していますv1.11.1

Dockerfile を作成しており、コンテナーのフォルダーを永続化する必要があることを指定したいと考えています。これは、ユーザー (コンテナーを実行しているコンピューター) ごとにのみ永続化する必要があります。私は当初、以下を含むと考えていました:

VOLUME /path/to/dir/to/persist

で十分ですが、コンテナを起動しdocker run -t -i myimage:latest bashて手動でファイルを追加するとexit、ファイルを再び見つけることができると期待しています。しかし、(上記のように)イメージを再度実行すると、追加されたファイルはもう存在しません。

私は読んだことがありますが、回答はVOLUMESの使用に関して時代遅れのように見えるか、または私がやりたくないことを示唆しています。

  • -v実行コマンドで使用したくない
  • ボリューム コンテナーを作成したくありません (私の 1 つの小さなフォルダーにはやり過ぎのようです)。

私が間違っているのは何ですか?どんな助けでも大歓迎です。

乾杯。

更新:名前付きボリュームを使用してデータを永続化できます。つまり:docker run -v name:/path/to/persist -t -i myimage:latest bashただし、Dockerfile を含むビルドはVOLUME name:/path/to/persist機能しません。

4

1 に答える 1

9

あまり明白ではないのは、「docker run」を実行するたびに新しいコンテナーを作成していることです。これにより、新しいコンテナーごとに新しいボリュームが作成されます。

したがって、データは永続化されていますが、書き込み先のコンテナーからデータを読み取っていません。

問題を説明する例

サンプル Dockerfile

FROM ubuntu
VOLUME /data

普通に建てた

$ docker build . -t myimage
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu
 ---> bd3d4369aebc
Step 2 : VOLUME /data
 ---> Running in db84d80841de
 ---> 7c94335543b8

これで2回実行

$ docker run -ti myimage echo hello world
$ docker run -ti myimage echo hello world

そして、ボリュームを見てください

$ docker volume ls
DRIVER              VOLUME NAME
local               078820609d31f814cd5704cf419c3f579af30672411c476c4972a4aad3a3916c
local               cad0604d02467a02f2148a77992b1429bb655dba8137351d392b77a25f30192b

「docker rm」コマンドには、コンテナーに関連付けられたすべてのボリュームをクリーンアップする特別な「-v」オプションがあります。

$ docker rm -v $(docker ps -qa)

データ コンテナーの使用方法

前の例で作成した同じ docker イメージを使用して、ボリュームを介してデータを永続化することを唯一の目的とするコンテナーを作成します。

$ docker create --name mydata myimage

一部のデータを「/data」ボリュームに保存する別のコンテナを起動します

$ docker run -it --rm --volumes-from mydata myimage bash
root@a1227abdc212:/# echo hello world > /data/helloworld.txt
root@a1227abdc212:/# exit

データを取得する 2 つ目のコンテナーを起動する

$ docker run -it --rm --volumes-from mydata myimage cat /data/helloworld.txt
hello world

クリーンアップ: コンテナーを削除し、「-v」オプションを指定して、そのボリュームが確実にクリーンアップされるようにします。

$ docker rm -v mydata

ノート:

  • 「volumes-from」パラメータは、すべてのデータが「mydata」コンテナに関連付けられた基本ボリュームに保存されることを意味します
  • コンテナーを実行するときに、「rm」オプションを使用すると、それらが自動的に削除されることが保証されます。これは、1 回限りのコンテナーに役立ちます。
于 2016-09-04T16:51:07.700 に答える