DockerコンテナにNFS共有ディレクトリをマウントする実装

DockerコンテナにNFS共有ディレクトリをマウントする実装

以前、https://www.jb51.net/article/205922.htm で、Dockerfile を使用して Ubuntu 16.04 イメージをビルドし、コンテナー内で Messy_Test プロジェクトをコンパイルして実行する方法を紹介しました。ここでは、コンテナー内で NFS サーバー上の共有ディレクトリをマウントする方法を紹介します。

Dockerfile の内容は次のとおりです。

ubuntu:16.04より
ラベル メンテナー="FengBingchun [email protected]" \
   バージョン="1.0" \
   説明="dockerfile テスト"
dep_items='git g++-5 nfs-common make' を実行します。
  && apt-get アップデート \
  && apt-get install -y $dep_items \
  && ln -s /usr/bin/g++-5 /usr/bin/g++ \
  && ln -s /usr/bin/gcc-5 /usr/bin/gcc \
  && mkdir -p /mnt/nfs \
  && rm -rf /var/lib/apt/lists/*

イメージをビルドします。次のコマンドを実行すると、fengbingchun/ubuntu:16.04 という名前のイメージが正常に生成されます。

Ubuntu 16.04 で docker build を実行します。

ホスト ディレクトリをマウントして、新しいコンテナ テストを作成し、次のコマンドのいずれかを実行します。最初のコマンドが推奨されます。

docker run --cap-add sys_admin -it -P --name test --mount type=bind,source=e:\GitCode\docker,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash
docker run --privileged=true -it -P --name test --mount type=bind,source=e:\GitCode\docker,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash

NFS サーバーの IP が 10.107.2.1 であり、共有ディレクトリが共有されていると仮定して、マウントするコンテナーで次のコマンドを実行します。

/etc/init.d/rpcbind 開始
マウント -t nfs 10.107.2.1:/shared /mnt/nfs

ソフト リンクを作成し、cmake 実行可能ファイルのパスを環境変数に追加して、次のコマンドを順番に実行します。

ln -s /mnt/nfs/Ubuntu-16.04/ /usr/local/toolchains
echo "export PATH=/usr/local/toolchains/bin:$PATH" >> /etc/profile
ソース /etc/profile

したがって、イメージの作成時に cmake はインストールされていません。source コマンドを実行した後、cmake --version を実行して、次の図に示すように、cmake のバージョン情報を確認します。

次に、コンテナ内で /home/fengbingchun ディレクトリに移動し、Messy_Test をクローンして、次のコマンドを実行します。

git クローン https://github.com/fengbingchun/Messy_Test

次に、Messy_Test/prj/linux_cmake_CppBaseTest ディレクトリに cd し、次のコマンドを順番に実行します。

./build.sh
./build/CppBaseTest

実行結果は下図の通りで、Dockerfile でビルドしたイメージを NFS 共有ディレクトリのあるコンテナにマウントした後、共有ディレクトリ内の cmake を通じて Messy_Test を正常にコンパイルして実行できることがわかります。

次のコマンドを実行すると、コンテナ内の NFS サーバーによって共有されているディレクトリを表示することもできます。

ショーマウント -e 10.107.2.1

イメージ fengbingchun/ubuntu:16.04 を tarball に保存し、次のコマンドを実行します。

docker save -o ubuntu_16.04.tar fengbingchun/ubuntu:16.04

ubuntu_16.04.tar を Ubuntu システムにコピーし、tarball からイメージをロードして、次のコマンドを実行します。

docker load -i ubuntu_16.04.tar

次に、Windows で同様の操作を実行し、新しく作成されたコンテナー test で Messy_Test をコンパイルして実行し、次のコマンドを順番に実行します。

docker run --privileged=true -it -P --name test --mount type=bind,source=/home/xxxx/Disk/GitHub/docker,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash を実行します。
/etc/init.d/rpcbind 開始
マウント -t nfs 10.107.2.1:/shared /mnt/nfs
ln -s /mnt/nfs/Ubuntu-16.04/ /usr/local/toolchains
echo "export PATH=/usr/local/toolchains/bin:$PATH" >> /etc/profile
ソース /etc/profile
cd /home/fengbingchun/
git クローン https://github.com/fengbingchun/Messy_Test
cd Messy_Test/prj/linux_cmake_CppBaseTest/
./build.sh
./build/CppBaseTest

実行結果は下図の通りです。Windows で生成されたイメージをパッケージ化した後、Ubuntu にロードすると正常に使用できることがわかります。

知らせ:

(1) Ubuntuでは、コンテナを作成するときに「--privileged=true」を使用してください。そうしないと、マウント時に「mount.nfs: access denied by server while mount 10.107.2.1:/shared」というエラーが報告されます。

(2)Windowsでは、コンテナが動かなくなることがあります。コンテナを削除して新しいコンテナを作成してください。

これで、Docker コンテナで NFS 共有ディレクトリをマウントする方法についての記事は終了です。Docker コンテナで NFS 共有ディレクトリをマウントする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker コンテナのマウントディレクトリ操作の表示
  • Docker - コンテナマウントディレクトリを変更する3つの方法のまとめ
  • Dockerはローカルディレクトリとデータボリュームコンテナ操作をマウントします
  • Dockerコンテナでホストディレクトリをマウントする方法
  • Dockerを使用してコンテナディレクトリをホストにマウントする方法

<<:  抽選効果を実現するJavaScript

>>:  HTML チュートリアル: DOCTYPE の省略形

推薦する

JavaScript進捗管理の詳しい説明

目次序文質問原理テスト序文プログラムを作成するときに、読み込みの進行状況やアップロードの進行状況など...

HTML 9グリッドレイアウトの実装方法

ウェブサイトのレイアウトの多様化は、当社のフロントエンドの得意分野です。最近、UC ブラウザのデフォ...

シンプルなウェブデザインコンセプトのカラーマッチング

(I)ウェブページのカラーマッチングの基本概念(1)白黒の言葉は永遠のテーマです。誰もそれを悪く言う...

Centos7でglibcをアップグレードするとシステム異常(起動できない)になる場合の解決方法

目次問題の原因:解決:解決:私は Centos7 を使用しています (理論的にはこの方法は Cent...

MySQL InnoDB ストレージエンジンのメモリ管理の詳細な説明

目次ストレージエンジンのメモリ管理データ ページを LRU キューの先頭に置かないのはなぜですか?ダ...

React Nativeでaxiosを使用してネットワークリクエストを行う方法

フロントエンド開発では、Ajax、jQuery ajax、axios、fetch など、データ要求を...

Hyper-V なしで Windows 10 を動作させるソリューション

Windows10 Home Edition でHyper-vを有効にする方法をまだ探していますか?...

HTML スペースコードの簡単な分析

HTML についてどれくらい知っていますか? 現在、基本的な HTML コードを学習している場合は、...

nginx パニック問題の解決方法の詳細な説明

nginx パニック問題に関しては、まず nginx の起動プロセス中に、マスター プロセスが構成フ...

iframeノードの初期化の問題に関する議論

今日、ふとリッチテキストエディタの制作原理を見直してみようと思いました。それで、彼は何も言わずにそれ...

DIVマスクを使用して、マウスでチェックボックスを直接チェックすることが無効である問題を解決します

フロントエンドの開発過程で、チェックボックスが必要な状況が発生しました。ユーザー操作の利便性を考慮し...

Nginxの仕組みの詳細な説明

Nginxの仕組みNginx はコアとモジュールで構成されています。 Nginx 自体は実際にはほと...

MySQLインストール後のデフォルトデータベースの役割の詳細な説明

MySQL を学習すると、インストール後にいくつかのデフォルトのデータベースが付属していることに気付...

角度付き双方向バインディングの詳細な説明

目次双方向バインディングの原理ngモデルレンダリングカスタム双方向バインディングプロパティコンポーネ...

方言変換のためのApache Calciteコード

意味Calcite は、Sql を SqlNode に解析し、次に SqlNode を特定のデータベ...