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

推薦する

TypeScript のユニオン型、交差型、型ガード

目次1. ユニオンタイプ2. クロスオーバータイプ3. 型保護3.1 カスタム型保護3.2 保護の種...

Quill エディタでカスタム HTML レコードを挿入する詳細な例

もう2020年です。飢えた人間は単純なテキストでは満足できなくなり、さまざまなスタイルの派手なテキス...

Linux でジャンプ サーバー経由でリモート サーバーに接続し、ファイルを転送する方法

最近、Linux ホストに環境を展開する際に多くの問題に遭遇しました。最初の問題は、ジャンプ サーバ...

EclipseのプロジェクトをTomcatに追加できない問題を解決する方法

1. プロジェクトを右クリックしてプロパティを選択します2. プロジェクトファセットをクリック3. ...

Vue のスロットの使用法と適用シナリオの詳細な分析

スロットとは何ですか? Vue では、子コンポーネント タグの中央に何もラップできないことはわかって...

64 ビット CentOs7 ソース コードのインストール mysql-5.6.35 プロセス共有

インストールプロセス中に問題が発生しないように、まず依存パッケージをインストールします。 [root...

JavaScript キャンバスは影付きのグラフィックとテキストを実装します

キャンバスを使用して、参照用の影付きのグラフィックとテキストを作成します。具体的な内容は次のとおりで...

CentOS7 で yum ソースをインストールし、コマンド rz と sz をアップロードおよびダウンロードする方法 (画像付き)

** CentOS7 で yum ソースをインストールし、rz および sz コマンドをアップロー...

Reactコンポーネントのライフサイクル機能についての簡単な説明

React コンポーネントのライフサイクル機能とは何ですか?ライフサイクル関数は、ES6 構文クラス...

LinuxでIPアドレスが表示されない問題の解決方法

目次序文解決:ステップ1ステップ2序文環境: VMware Workstation 上に Linux...

Webpackプラグインを書いてnpmに公開するための80行のコード

1. はじめに最近、 Webpackの原理を勉強しています。これまでは Webpack の設定方法し...

scss で mixin が動作しない問題の解決方法 (ブラウザでコンパイルできない)

ミックスインメソッド: ブラウザはコンパイルできません: 以前のバージョンのsassでは上記の記述方...

JS の querySelector メソッドと getElementById メソッドの違い

目次1. 概要1.1 querySelector() と querySelectorAll() の使...

Linux コマンド クエリ アプレットでの WePY クラウド開発の実践

みなさんこんにちは。今日は Linux コマンド クエリ アプレットでの WePY クラウド開発の実...

MySQL がデータの削除と挿入に非常に時間がかかる問題の解決策

会社の開発者がテスト環境で挿入ステートメントを実行すると、正常に実行されるまでに 10 秒以上かかり...