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

推薦する

CentOS 7.6 への MySQL 5.7 GA バージョンのインストール チュートリアル図

目次環境の準備環境の準備mariadbをアンインストールする rpm -qa | grep mari...

jQueryはシンプルなコメントエリアを実装します

この記事では、参考までに、簡単なコメントエリアを実装するためのjQueryの具体的なコードを紹介しま...

MySQL ロック関連知識のまとめ

MySQL のロックロックは、並行環境におけるリソースの競合を解決する手段です。その中でも、楽観的並...

CentOS のファイルと権限の基本操作チュートリアル

序文始める前に、ファイル属性とファイル属性を変更する方法について簡単に理解しておく必要があります。 ...

HTML における DTD の使用法の概要

DTD はマークアップの文法規則のセットです。これは XML 1.0 仕様の一部であり、HTML フ...

スケルトン スクリーンの読み込みプレースホルダー アニメーション効果を実装するための CSS + HTML (アニメーション付き)

効果上から下へフェードアウト ソースコードhtml、Angular構文を使用して、必要な構文を取得す...

Ubuntu 16.04.5LTS に SVN をインストールする手順

この記事では、UbuntuシステムでSVNを設定するプロセスを簡単に紹介します。ソースを更新sudo...

MySQL 8.0.12 の詳細なインストールおよびアンインストール チュートリアル

1. MySQL 8.0.12 バージョンのインストール手順。 1. ダウンロードhttps://d...

echartsマップカルーセルハイライトを解決するための記事

目次序文やることリストやるだけ地図を準備するインスタンスをバックアップ用に保存するタイマーカルーセル...

Reactでaxiosを使用してリクエストを送信する一般的な方法

目次Reactにaxios依存関係をインストールして導入するGETリクエストにaxiosを使用するa...

Linuxダイナミックリンクライブラリの使用

通常のプログラムと比較すると、ダイナミック リンク ライブラリにはメイン関数がなく、一連の関数の実装...

Ubuntu 20.04でルートアカウントを有効にする方法

Ubuntu 20.04 をインストールした後、デフォルトでは root アカウントのログイン権限が...

MySQLのSeconds_Behind_Masterの詳細な説明

目次マスターの後ろの秒数オリジナルの実装最終マスタータイムスタンプマスターとのクロック差他の実行時間...

Idea の起動速度を改善し、Tomcat ログの文字化けを解決する方法

目次序文アイデアの起動速度Tomcat ログが文字化けしている序文Idea を再インストールしたので...

Ubuntu の空き容量を増やす 5 つの簡単な方法

序文ほとんどの人は、システム ディスク ストレージが少ないときにこの操作を実行するか、Linux シ...