Docker を使用して Web アプリケーションまたは mysql データベースをデプロイすると、コンテナーが再起動されると、コンテナーの実行中に生成されたログまたはデータベース データがクリアされることがわかります。
解決策:
Docker は、ホスト ディスク ディレクトリをマウントすることでデータを永続的に保存できます。
1. コンテナーの作成時に Docker Volume を実行する
docker run コマンドを使用して Docker コンテナーを実行し、イメージ ubuntu/nginx を使用して、ローカル ディレクトリ /tmp/source をコンテナ ディレクトリ /tmp /destination
docker run -itd --volume /tmp/source:/tmp/destination --name test ubuntu/nginx bash
ubuntu に基づいて Docker コンテナを作成しました/nginx イメージ。
指定されたコンテナーの名前は test であり、––name オプションで指定されます。
Docker ボリュームは ––volume (-v と省略可能) オプションで指定され、ホストの /tmp/source ディレクトリはコンテナ内の /tmp/destination ディレクトリに対応します。
2. Docker ボリュームの表示
docker Inspection コマンドを使用して、Docker コンテナーの詳細情報を表示します:
docker Inspection --format='{{json .Mounts }} 'test | python -m json.tool[{"Destination": "/tmp/destination", "Mode": "", "Propagation": "", "RW": true, "Source": "/ tmp/source","Type": "bind"}]
--format オプションを使用して、必要なコンテナ情報を選択して表示します。 .Mount はコンテナの Docker Volume 情報です。
python -m json.tool は、出力された json 文字列をフォーマットして表示できます。
Source は、ホスト上のディレクトリ、つまり /tmp/source を表します。
Destination はコンテナ内のディレクトリ、つまり /tmp/destination です。
3. ローカル ファイルはコンテナーに同期できます
local/tmp/source ディレクトリに新しい hello.txt ファイルを作成します
touch /tmp/source/hello .txtls /tmp/source/hello.txt
hello.txt ファイルは、container/tmp/destination/ ディレクトリに表示されます
docker exec コマンドを使用して、コンテナ内でコマンドを実行します。
docker exectest ls /tmp/destination/hello.txt
したがって、ホスト マシン上のディレクトリ /tmp/source/ に対する変更は、コンテナ ディレクトリ /tmp/destination/ に同期できます。
4. コンテナ ファイルはホスト マシンに同期できます
container/tmp/destination ディレクトリに新しい world.txt ファイルを作成します
docker exec test touch /tmp /destination/world .txtdocker exec test ls /tmp/destination/hello.txtworld.txt
world.txt ファイルは host/tmp/source/ ディレクトリに表示されます
ls /tmp /source/hello.txt world.txt
関連チュートリアルの詳細については、PHP 中国語 Web サイトの dockertutorial 列に注目してください。
以上がdocker を再起動するとデータは失われますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。