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ツールの詳細な説明と実践的な演習(推奨)

推薦する

VMware Workstation のインストール Linux システム

始める段階から初心者になるまで、Linux オペレーティング システムは不可欠です。最初のステップは...

Windows Server 2016 リモート デスクトップ サービスの構成とライセンスのアクティブ化 (2 ユーザー)

Server 2016 のリモート デスクトップ接続のデフォルト数は 2 ユーザーです。2 人以上...

適応的な幅と高さを持つ9つの正方形グリッドの背景画像の切り取りの分析

<br />幅と高さが適応するオリジナルの 9 グリッド レイアウトをベースに、ネットワ...

Vue 2つのフィールドの共同検証によりパスワード変更機能を実現

目次1. はじめに2. ソリューションの実装2.1 実装コード2.2 コードの説明2.3 検証結果1...

vue3.0プロジェクトアーキテクチャを段階的に構築する方法を教えます

目次序文: 1. vue-cliでプロジェクトを作成する2. ルーターをインストールする3. ディレ...

MySQL sql_mode の分析と設定の説明

昨夜、MySQL データベースにデータセットを挿入したときにエラーが発生しました。データベースは容赦...

ウェブページ内でウェブテーブルやdivレイヤーが引き伸ばされる問題の解決策

<br />Web ページをデザインするときには、いつも不快なことに遭遇します。最も一般...

MySQLデータのセキュリティを確保するための提案

データは企業の中核資産であり、企業にとって最も重要なタスクの 1 つです。注意しないと、データが意図...

表には表示したい境界コードが表示されます

テーブルの共通プロパティ基本的な属性は、width (幅)、height (高さ)、border (...

Linux ホスト名設定の詳細な紹介

目次1. Linuxホスト名を設定するクライアントホストを構成するサーバーホストを構成する2. ホス...

最もよく使用されるJavaScriptイベントについて詳しく学ぶ

目次JavaScript イベント:よく使用されるイベント:イベントアクション要約するJavaScr...

Linux で起動時にプログラムを自動的に実行させる最も簡単な方法

たくさん集めましたが、すべて失敗に終わりました。最終的に、この方法は優れており、使用に影響を与えない...

js を使用して年カルーセル選択効果をネイティブに実装する例

序文js を使用して、年の回転選択効果を実現します。では早速、写真を見てみましょう。 1. アイデア...

JS における ES6 継承と ES5 継承の違い

目次継承ES5 プロトタイプ継承ES6 クラス継承両者の違いES5プロトタイプ継承の内部実装ES6 ...

emとは?emとpxの紹介と変換方法

それは何ですか? em はフォントの高さを指し、どのブラウザでもデフォルトのフォントの高さは 16 ...