Dockerボリュームのファイルマッピング方法

Dockerボリュームのファイルマッピング方法

背景

ブロックチェーン ログ モジュールで作業しているときに、コンテナーが実行されている場合は、ログ ファイルをホスト マシンにマップして簡単に表示できるようにする必要があります。これを実装する方法は次のとおりです。

成し遂げる

docker-compose設定ファイルのボリュームパラメータを通じて

設定ファイルの例:

 ボリューム:
   - /var/run/:/host/var/run/
   - ./channel-artifacts:/var/hyperledger/configs
   - ./fabric_logs:/tmp/fabric_logs/

コンテナ内の /tmp/fabric_logs ディレクトリを、ホストの現在のディレクトリ内の ./fabric_logs ディレクトリにマップします。これら 2 つのディレクトリはデータを共有します。

コンテナを作成するときは、コード内の関連パラメータを設定します。

コード内でコンテナを作成するときは、以下を追加します。

func (vm *DockerVM) createContainer(ctxt context.Context, クライアント dockerClient,
 imageID文字列、containerID文字列、args[]文字列、
 env []文字列、attachStdout bool) エラー{
 ボリューム:= make(map[文字列]構造体{})
 var マウント []docker.Mount
 var ソース文字列
 var 宛先文字列
 var fabricCfgPath = os.Getenv("FABRIC_CFG_PATH")
 var configName 文字列
 _, エラー:= os.Stat(ファブリック構成パス)
 エラー == nilの場合{
  configName = strings.ToLower(ピアプレフィックス)
  config := viper.New()
  config.SetConfigName(configName)
  config.AddConfigPath(ファブリック構成パス)
  config.ReadInConfig()
  config.SetEnvPrefix("CORE")
  config.AutomaticEnv()
  置換子 := strings.NewReplacer(".", "_")
  config.SetEnvKeyReplacer(置換子)
  config.SetConfigType("yaml")
  宛先 = config.GetString("logging.logpath")
  //fmt.Println(出力先)
 }
 宛先 == "" の場合 {
  保存先 = "/tmp/fabric_logs/"
 }
 ソース = "/tmp/chaincode_logs/" + コンテナID
 ボリューム[宛先] = 構造体{}{}
 マウント:=docker.Mount{
  名前: "bind",
  出典: 出典、
  目的地: 目的地、
  モード: "rw"、
  RW: そうですね。
  ドライバー: "rprivate",
 }
 マウント = append(マウント、マウント)
 config := docker.Config{Cmd: args、イメージ: imageID、Env: env、ボリューム: volumes、マウント: mounts、AttachStdout: attachStdout、AttachStderr: attachStdout}
 ホスト構成:= getDockerHostConfig()
 ホストConfig.Binds = []文字列{
  ソース + ":" + 宛先 + ":rw"、
 }
 copts := docker.CreateContainerOptions{名前: コンテナID、構成: &config、ホスト構成: hostConfig}
 dockerLogger.Debugf("コンテナを作成: %s", コンテナID)
 _, エラー = client.CreateContainer(copts)
 err != nil の場合 {
  エラーを返す
 }
 dockerLogger.Debugf("コンテナを作成しました: %s", imageID)
 nilを返す
}

ボリューム、マウント、および Hostconfig.Binds パラメータは、独自のマッピング関係に従って入力する必要があります。

この道を通って:

1. Docker-compose 設定ファイルの起動

2. またはdocker -vパラメータのコマンドラインから開始します

同じ効果が得られます。

補足: Docker フォルダ マッピングの 2 つの方法 --- ホスト ボリューム マッピングと共有フォルダ マッピング

Dockerコンテナはデータを保存しない

重要なデータ(データ永続性)には外部ボリュームストレージを使用してください

コンテナは実際のマシンディレクトリまたは共有ストレージをボリュームとしてマウントできる

ホストボリュームマッピング

[root@docker1 ~]# mkdir /var/data
[root@docker1 ~]# docker run -it -v /var/data:/abc myos
[root@f1fb58b85671 /]# cd /abc/
[root@f1fb58b85671 abc]# f1 をタッチ
[root@f1fb58b85671 abc]# ls
1 1 1
[root@docker1 ~]# cd /var/data/
[root@docker1 データ]# ls
1 1 1
[root@docker1 データ]# touch zhy

共有ストレージを使用したマッピング

アイデア:

1 つのホストを NFS ホストとして使用し、対応するフォルダーを作成して、2 つの Docker ホストと共有します。2 つの Docker ホストは共有フォルダーをコンテナーにマップし、対応するコンテナーが NFS ホストのコンテンツを共有できるようにします。この形式では、http と他のサーバーの対応するページ フォルダーを使用できるため、複数のコンテナーで 1 つの業務を実行できます。

nfsホスト構成 [192.168.6.77]

[root@nfs ~]# yum -y nfs-utilsをインストールします
[root@nfs ~]# vim /etc/exports
/パブリック*(rw)
[root@nfs ~]# systemctl nfs-serverを再起動します
nfs-serve.service の再起動に失敗しました: ユニットが見つかりません
[root@nfs ~]# mkdir /public
[root@nfs ~]# cd /public/
[root@nfs public]# nfs.txt をタッチします
[root@nfs パブリック]# ls
テキスト

Docker1ホスト構成

[root@docker1 ~]# vim /etc/fstab 
192.168.6.77:/public /mnt/nfs nfs デフォルト、_netdev 0 0
[root@docker1 ~]# mkdir /mnt/nfs 
[root@docker1 ~]# systemctl nfs-serverを再起動します
[root@docker1 ~]# マウント -a
[root@docker1 ~]# df -h
192.168.6.77:/public 17G 3.2G 14G 19% /mnt/nfs
[root@docker1 ~]# docker run -it -v /mnt/nfs/:/zhuhaiyan 192.168.6.153:5000/myos
[root@c7c376e3755a /]# cd /zhuhaiyan 
[root@c7c376e3755a 珠海燕]# ls
テキスト

Docker2ホスト構成

[root@docker2 ~]# vim /etc/fstab 
192.168.6.77:/public /mnt/nfs nfs デフォルト、_netdev 0 0
[root@docker2 ~]# mkdir /mnt/nfs 
[root@docker2 ~]# systemctl nfs-serverを再起動します
[root@docker2 ~]# マウント -a
[root@docker2 ~]# df -h
192.168.6.77:/public 17G 3.2G 14G 19% /mnt/nfs
[root@docker2 ~]# docker run -it -v /mnt/nfs/:/zhuhaiyan 192.168.6.153:5000/myos
[root@cdd805771d07 /]# cd /珠海燕/
[root@cdd805771d07 珠海燕]# ls
テキスト

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • Docker のコンテナ データ ボリュームの概要
  • Dockerでボリュームを管理する2つの方法
  • Dockerボリューム削除操作
  • Dockerボリュームマウントの実装方法
  • Docker データ ストレージ ボリュームの詳細な説明
  • Docker ボリュームの使用の詳細と例
  • Dockerはデータボリュームにデータを書き込む

<<:  CSS3 とテーブルタグを使用して円軌道アニメーションを実装するためのサンプルコード

>>:  MysqlチューニングExplainツールの詳細な説明と実践的な演習(推奨)

推薦する

JSはスネークゲームを実装する

目次1. 初期化構造2. 蛇の色のレンダリング3. ヘビの動き4. ヘビの死を判定する方法 ヘビの死...

HTML と埋め込み Flash の両方におけるスクロールバーの分析と処理

開発を行う際に、次のような状況に遭遇することがよくあります。 a.swf が Web ページに追加さ...

Linux 7.7 でスワップ パーティション SWAP を設定する方法

Linux システムの Swap パーティション、つまり swap パーティションは、一般に仮想メモ...

MySQL MGR の利点は何ですか?

MGR (MySQL グループ レプリケーション) は、バージョン 5.7 で追加された新しい機能...

Vue で Openlayer を使用して読み込みアニメーション効果を実現する

注意: スコープアニメーションは使用できません。 ! ! ! GIF経由 <テンプレート>...

Linux システムコマンドのメモ

この記事では、Linux システム コマンドについて説明します。ご参考までに、詳細は以下の通りです。...

TomcatコンポーネントはWebサーバーのアーキテクチャの進化を示しています

1. tomcat とは誰ですか? 2. Tomcat は何ができますか? Tomcat は Web...

element-uiのアップロードコンポーネントでファイルやその他のパラメータを転送する際の問題を分析する

最近、element-ui を統合したプロジェクトで vuethink を使用しました。以前は bo...

JSネイティブ2列シャトル選択ボックスの実装例

目次いつ使うか構造的ブランチコードいつ使うか選択動作を完了するには、2 つの列間で要素を直感的に移動...

node.jsのインストールとHbuilderXの設定の詳細な説明

npm インストールチュートリアル: 1. Node.jsインストールパッケージをダウンロードする公...

初心者向け入門チュートリアル: ドメイン名の解決とバインディング

では、ドメイン名を登録して仮想ホストを購入した後、IE でドメイン名を入力して Web サイトを開く...

CentOS に MySQL 8.0 をインストールして設定するための詳細な手順

序文CentOS に MySQL をインストールして設定する手順は次のとおりです。文章yumソースか...

Nginx での Frp による https への強制リダイレクト設定の詳細な説明

自宅のルーターが300Mの帯域幅を80Mに強制的に減らしたため、3205Uソフトルーターを購入しまし...

MySQL の異常なエラー ERROR: 2002 を解決する方法

最近、MySQL の起動中にエラーが発生しました。エラー メッセージは次のとおりです。 エラー 20...

Dockerはコード検出プラットフォームSonarQubeを構築し、Mavenプロジェクトのプロセスを検出します

1 はじめに優れたコーディング習慣は優れたプログラマーが備えるべき資質ですが、コードの品質を保証する...