Docker コンテナとホスト間でデータを共有するにはどうすればよいでしょうか?

Docker コンテナとホスト間でデータを共有するにはどうすればよいでしょうか?

[51CTO.com クイック翻訳] Docker コンテナを使用すると、企業は大規模かつ迅速にアプリケーションとサービスを提供できます。コンテナ化されたアプリケーションのデプロイは非常に簡単なので、すぐに始めることができます。

Docker を使い始めてすぐに気付くことの 1 つは、デプロイされたコンテナーはデータの保存方法と格納方法が制限され、この制限はコンテナー ファイル システムにあるということです。 Docker コンテナは、一連の読み取り専用レイヤーとその上に最終的な読み取り/書き込みレイヤーを含む、Union File System (UFS) を使用します。コンテナがデータを保存する必要がない場合、システムは最適に実行されます。しかし、データを永続化する必要があるサービス (データベースに接続するアプリケーションなど) をデプロイする場合はどうすればよいでしょうか?

ようこそ本へ

Docker ボリュームは、ホスト ファイル システム上に存在し、コンテナーの UFS の一部ではないディレクトリ (またはファイルのコレクション) です。コンテナはこれらのボリューム内にデータを保存できます。 docker volume コマンドを使用すると、ボリュームを簡単に管理して、コンテナを基本機能を超えて拡張できます。

コンテナがボリューム内のデータと同期された状態を保つように、ホスト上の特定のディレクトリに接続されたボリュームを含む新しいコンテナをデプロイする方法を学びましょう。ここでは Ubuntu Server 18.04 でデモンストレーションを行いますが、プラットフォームが Docker をサポートしている限り (ディストリビューションに関係なく)、プロセスは同じです。 Docker が起動して実行されており、コンテナをデプロイできることが前提となります。

ホストデータボリュームを作成する

最初のステップは、ボリュームを保持するための新しいディレクトリを作成することです。これを行うには、ターミナル ウィンドウを開いて次のコマンドを実行します。

  1. mkdir ~/コンテナデータ

作成したディレクトリが Docker ユーザーがアクセスできる場所 (読み取りおよび書き込み権限がある場所) にあることを確認する必要があります。

ディレクトリが作成されると、その中にボリュームをマウントできます。 /data というディレクトリを含む公式 Ubuntu イメージに基づいてコンテナをデプロイするとします。内部の /data ディレクトリをホスト ディレクトリ ~/container-data 内のボリュームに接続するコンテナをデプロイするには、次のコマンドを実行します。

  1. docker run -dit -P --name ubuntu-test -v ~/container-data:/data ubuntu

上記のコマンドは次のように分解されます。

  • docker run はメインコマンドであり、新しいコンテナでコマンドを実行することを意味します。
  • -dit の d は分離モードを意味し、bash または sh を疑似端末に割り当てることができることを保証します。
  • -P コンテナ ポートをホストに公開します。
  • -name は、その後に続くものが新しいコンテナの名前であることを示します。
  • -v は、後に続くものがボリュームであることを示します。
  • ubuntu はコンテナに使用されるイメージです。

コマンドが完了すると、コンテナ ID が取得されます (図 A)。コンテナの bash プロンプトにアクセスするときに必要となるため、ID の最初の 4 文字を必ず覚えておいてください。

図A. デプロイしたコンテナ

これで、ホスト ボリュームの ~/container-data に /data ディレクトリがマウントされた、公式 Ubuntu イメージに基づくコンテナーがデプロイされました。

テストペーパー

このボリュームをテストしてみましょう。コンテナ ID を忘れた場合は、コマンド docker ps -a を実行して表示します (図 B)。

図B: デプロイしたコンテナのリスト

新しくデプロイされたコンテナにアクセスするには、次のコマンドを使用します。

  1. docker アタッチ ID

ID は、デプロイされたコンテナの最初の 4 文字です。これで、コンテナ内に bash プロンプトが表示されるはずです (図 C)。

図C: 新しいコンテナのbashプロンプト

ls / コマンドを実行すると、/data ディレクトリが Ubuntu コンテナに追加されたことがわかります。次のコマンドを使用して、そのディレクトリにテスト ファイルを作成しましょう。

  1. タッチ/データ/テスト

テスト ファイルを作成したら、ホスト上で別のターミナル ウィンドウを開き、ls ~/container-data コマンドを実行します。そのディレクトリにテスト ファイルが表示されます (図 D)。

図 D: コンテナ内に作成したテスト ファイルは、ホスト上のボリュームに表示されます。

ホスト上のボリュームを介して永続ストレージを備えたコンテナをデプロイしました。

データベースボリューム

データベース用のボリュームを作成するとします。これを行うには、まず MySQL データベース Docker コンテナをデプロイし、mysql-data という名前の永続ストレージ ボリュームを使用するように指示します。これを実行するには、次のコマンドを使用します。

  1. docker run --name mysql-test -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD = passwd -d mysql:latest

上記のコマンドでは、-e パラメータ オプションは、後続が環境変数であることを Docker に伝えます。

次のコマンドを使用してコンテナの bash プロンプトにアクセスします。

  1. docker exec -it ID /bin/bash

ここで、ID は、デプロイしたコンテナの ID の最初の 4 文字です。

コンテナの /var/lib/mysql ディレクトリの内容を一覧表示するには、次のコマンドを使用します。

  1. ls /var/lib/mysql

内容をメモし、次のコマンドでコンテナを終了します。

  1. 出口

次に、次のコマンドを使用して、ホストにマウントされたボリュームの内容を確認します。

  1. sudo ls /var/lib/docker/volumes/mysql-data/_data

両方のディレクトリに同じ内容がリストされているはずです (図 E)。

図E: MySQLデータはホストボリュームと同期されています

これで、ホスト上のボリュームに永続ストレージがマウントされた MySQL ベースのコンテナができました。

これは、Docker コンテナとホスト マシン間でデータを共有する全体的な方法です。ロールの助けにより、このタスクは簡単であるだけでなく、非常に柔軟になります。

原題: Docker の基礎: Docker コンテナとホスト間でデータを共有する方法、著者: Jack Wallen

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください。

<<:  Red Hat、オープンハイブリッドクラウドの新時代を計画

>>:  VDI 災害復旧オプションを調べる

推薦する

vestacp パネルの SS ポートの変更に関する詳細

サーバーのセキュリティのため、ブルートフォース クラッキングを防ぐために、SS のデフォルト ポート...

実用的な情報: Baidu のランキングにはキーワードデータの分析のみが必要です

Baidu ランキングは常に SEOER の焦点です。検索エンジン最適化は以前ほど重要ではなく、人気...

Kubernetes アプリケーションの問題に対する一般的なトラブルシューティングのアイデア

[[428799]]この記事はWeChatの公開アカウント「Mingge's IT Essa...

Hostflyte: VPS IPの変更はわずか2ドル、4Gメモリ/20g SSD/4Tトラフィックの場合は年間11ドル

hostflyte からの最新ニュース: 公式が VPS コントロール パネルに「IP アドレスの変...

コレクター向け電子商取引ウェブサイトを運営するための 5 つのステップ

電子商取引は無意識界で最もホットな話題です。今日の電子商取引は、インターネット上で非常に人気のある産...

【2017年最新版】モバイルインターネット業界の専門用語を完全網羅!

StarNet の以前の生徒からのフィードバックに基づいて、同様によく使用される単語をいくつか追加し...

2024年のクラウドコンピューティングの4つの主要トレンド

クラウド コンピューティングは、インターネット経由でコンピューティング サービスを提供するテクノロジ...

クラウド コンピューティング サービス プロバイダーは、どのような無料サービスを段階的に提供していくのでしょうか?

世界があらゆる面でコロナウイルス危機に取り組んでいる中、世界中のクラウド コンピューティング サービ...

フォグコンピューティングについて知っておくべきことすべて

モノのインターネットの台頭により、これらのデバイスによって生成される膨大な量のデータをサポートできる...

825から904までの観察から百度のアルゴリズムアップデートに疑問を呈する

数日間観察し、さまざまなフォーラムでコミュニケーションをとった結果、Baiduのアルゴリズム調整によ...

NetEase Games、26の新製品+「神のような」ゲームソーシャルプラットフォームをリリース

2018年はNetEaseにとって重要な年です。財務報告によると、NetEaseの第1四半期のオンラ...

企業の CEO への手紙: 長期的な痛みと短期的な痛み、どちらを望みますか?

年末になり、SEO担当者の中には早期退職して帰宅する人もいます。会社の同僚は帰国の切符を「掴んで」い...

第一回美団クラウド人工知能サミットが開幕、エコパートナーと協力して最もオープンなAIプラットフォームを構築

10月31日、中関村サイエンスパーク管理委員会の指導の下、美団クラウドが主催し、「AIの力で共存とW...

新しいアルゴリズムに挑戦するためのSEOのヒント

6月以前のBaidu検索エンジンのアルゴリズムは旧アルゴリズムと呼ばれ、6月から8月までのアルゴリズ...

WordPress の見落とされがちな SEO のヒントをご存知ですか?

多くの場合、Web サイトを構築するときは、Web サイト自体が完全に構築される前に、いわゆる SE...