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

推薦する

大きなオフセットによる MySQL 制限ページングが遅い理由と最適化ソリューション

MySQL では通常、limit を使用してページ上のページング機能を完了しますが、データ量が大きな...

JavaScript 配列の Reduce() メソッドの構文と例の分析

序文Reduce() メソッドは関数を累積器として受け取り、配列内の各値 (左から右へ) が単一の値...

要素 ui の el-table の列にさまざまなスタイルのデータを動的に実装する例

問題の説明Ele.me UI のフレームワークでは、入力データは el-form であり、出力データ...

MySQL 8.0 のタイムゾーン問題を解決する手順

ソフトウェアバージョンウィンドウズ: ウィンドウズ10 MySQL: mysql-8.0.16-wi...

Reactプロジェクトで要素を使用する方法

React プロジェクトで要素フレームワークを使用するのは今回が初めてです。非常に単純な問題に遭遇し...

年末ですが、MySQL パスワードは安全ですか?

序文:年末です。データベースを検査する時期ではないでしょうか?一般的に、検査では、パスワードの複雑さ...

CSS クロスフェード() を使用して半透明の背景画像効果を実現するサンプルコード

1. 要件の説明特定の要素については、背景background-imageを半透明にしたいが、テキス...

カスタムスクロールバー効果を実現するJavaScript

実際のプロジェクトでは、上下のスクロール バーと左右のスクロール バーは DIV 内にないため、右の...

MYSQLについては、データ型と操作テーブルを知る必要があります

データ型と操作データテーブル1.1 MySQL 型: 整数 1.2 MySQL データ型: 浮動小数...

HTMLフローティングプロンプトボックス機能の実装コード

一般的なフォーム プロンプトは常にフォームのスペースを占有し、フォームが長くなったり広くなったりして...

HTML+CSSプロジェクト開発経験概要(推奨)

ここ数日ブログを更新していませんでした。簡単な HTML+CSS プロジェクトを終えたところです。数...

autoconfを使用してMakefileを生成し、プロジェクトをコンパイルする手順

序文Linux では、コンパイルとリンクには Makefile を使用する必要がありますが、適切な ...

LambdaProbe を使用して Tomcat を監視する方法

導入: Lambda Probe (旧称 Tomcat Probe) は、Apache Tomcat...

MySQL で左結合を使用して where 条件を追加する問題の詳細な分析

現在の需要:グループとファクターの 2 つのテーブルがあります。1 つのグループは複数のファクターに...

MySQL における in と exists の使い方と違いの紹介

まずコードを書いて (int i=0;i<1000;i++){ (int j=0;j<5...