まず、この投稿は Docker 初心者向けです。もちろん、ベテランであれば記事中の分割線以降の操作方法もアイディアの一つです。 まず、docker 内でホストマシンの docker 操作を実行する方法、これを docker in docker と呼びます。 なぜホストマシンの Docker を Docker で操作する必要があるかについては、その利点は明らかです。ホストマシンに直接インストールしなくても、コンテナに特定のニーズを展開できます (ホストマシンの Docker を Docker で操作する方法がないと仮定すると、そのようなソフトウェア プログラムはホストマシンに直接インストールすることしかできず、管理と保守に役立たないことは明らかです)。 この要件を満たすのは、実はとても簡単です。Docker ホストの docker ファイルと docker.sock ファイルをコンテナにマウントするだけです。具体的には、次のようになります。
まず、ホスト マシン上の docker と docker.sock の場所を見つける必要があります。これらを間違ってマウントしないでください。標準の Linux では通常、上記の場所が使用されます。 Dockerコンテナを起動したら、上記2つのファイルを正常にマウントした後、Docker内でdocker imagesなどのコマンドを実行できるようになります。 許可が拒否された場合
回避策 コンテナが配置されているホストで、docker.sockに777権限を直接付与し、コマンドchmod 777 docker.sockを実行します。 ゴージャスな境界線 以下はQunhuiシステムに関するものです。このシステムが何であるかをあまり気にする必要はありません。簡単に言うと、このシステムにはDocker特有の問題があり、思い通りに行うことが困難です。そこで、私はそれに対処するための回避策を採用しました(議論を始めるための考え方です)。まずは現状を説明します。 システムは、docker 用の UI 管理ツールを提供します。このツールで通常のマウント操作を実行できますが、上記の docker および docker.sock ファイルをマウントする場合は機能しません。まずはスクリーンショットを見てみましょう。 UI操作の制限について画像で解説します! Qunhui は選択できるファイルを公式に制限しています。/usr/<yyyy-mm-sock>/va/<yyyy-mm-sock> などのシステムレベルのファイルを選択することはできません。つまり、docker および docker.sock ファイルを直接マウントすることはできません。 ln -s ソフトリンクを実行することは可能ですか? 試してみたところ、まずsshコマンドラインを介してjenkinsフォルダに2つのソフト接続を作成し(dockerとdocker.sockをソフト接続)、その後Qunhui UIインターフェースに戻りましたが、それでも選択できませんでした(Qunhuiがソフト接続ファイルを直接ブロックしたため、表示されません)。 それで、どうやって解決するのでしょうか? 私の方法は次のとおりです(ソフトリンク方式は変更されています): 1. jenkinsディレクトリにdockerとdocker.sockの2つのファイルを作成します(適切な名前を付けます)。 2. 次に、docker の [ファイルの追加] ボタンをクリックし、通常どおりにこの 2 つのファイルを選択してマウントします。通常どおりマウントして、その他の構成を完了できます。構成が完了したら、当面は docker コンテナを起動しないでください。 3. ssh 経由で Qunhui にログインし、jenkins ディレクトリに作成した 2 つのファイルを削除し、docker および docker.sock ソース ファイルの jenkins へのソフト リンクを作成します。 root@test:cd /volume1/docker/jenkins/ ルート@テスト:rm -rf docker docker.sock ルート@テスト:ln -s /run/docker.sock /volume1/docker/jenkins/docker.sock ルート@テスト:ln -s /usr/local/bin/docker /volume1/docker/jenkins/docker ルート@テスト:/volume1/docker/jenkins#ll 合計 8 drwxrwxrwx+ 1 ナゲッツ ユーザー 96 6月 6日 11:22 . drwxr-xr-x+ 1 ルート ルート 188 5月30日 19:29 .. lrwxrwxrwx 1 root root 21 6月 6 11:22 docker -> /usr/local/bin/docker lrwxrwxrwx 1 root root 16 6月 6 11:21 docker.sock -> /run/docker.sock drwxrwxrwx+ 1 shanhongyu ユーザー 24 6月 1 11:07 java_home drwxrwxrwx+ 1 ナゲッツ ユーザー 4476 6月 6日 11:00 jenkins_home drwxrwxrwx+ 1 shanhongyu ユーザー 82 6月 1 11:12 maven_home 4. その後、Qunhui UI に戻り、コンテナーを起動すると、完璧になります。 (Qunhui ではソフトリンクを選択できませんが、Linux と Docker では基本的にソフトリンクを直接マウントできます) 追加知識: Docker を使用してイメージ内のホスト プログラムを実行する docker run コマンドは、新しいコンテナ内でコマンドを実行するために使用されます。 docker run コマンドは、まず指定されたイメージ上に書き込み可能なコンテナ レイヤーを作成し、次に指定されたコマンドを使用してそれを起動します。 つまり、docker run は API /containers/create および /containers/(id)/start と同等です。 停止したコンテナは、docker start を使用して、以前の変更をすべてそのままにして再起動できます。 すべてのコンテナのリストを表示するには、docker ps -a を参照してください。 使用法
シェル 例 名前を指定して疑似TTYを割り当てる(-name、-it) $ docker run --name テスト -it debian root@d6c0fe130dba:/# 終了 13 $ エコー $? 13 $ docker ps -a | grep テスト d6c0fe130dba debian:7 "/bin/bash" 26秒前 終了 (13) 17秒前 テスト シェル この例では、debian:latest イメージを使用して test という名前のコンテナを実行します。 - コンテナの stdin に接続された疑似 TTY を割り当てるように Docker に指示します。これにより、コンテナ内に対話型の bash シェルが作成されます。 この例では、exit 13 と入力して bash シェルを終了します。この終了コードは docker run の呼び出し元に渡され、テスト コンテナのメタデータに記録されます。 コンテナ ID をキャプチャする (-cidfile)
シェル これにより、コンテナが作成され、コンソールにテストが出力されます。 --cidfile フラグにより、Docker は新しいファイルを作成し、そこにコンテナ ID を書き込もうとします。ファイルがすでに存在する場合、Docker はエラーを返します。 Docker の実行が終了すると、Docker はこのファイルを閉じます。 完全なコンテナ機能(-privileged) $ docker run -t -i --rm ubuntu bash root@bc338942ef20:/# マウント -t tmpfs none /mnt マウント: 権限が拒否されました シェル これは、潜在的に危険なカーネル機能のほとんどがデフォルトで削除されているため機能しません。これには、cap_sys_admin (ファイルシステムをマウントするために必要) が含まれます。 ただし、--privileged フラグを使用すると実行できます。 $ docker run -t -i --privileged ubuntu bash root@50e3f57e16e6:/# マウント -t tmpfs none /mnt ルート@50e3f57e16e6:/# df -h ファイルシステムサイズ 使用済み 使用可能使用率 マウント先 なし 1.9G 0 1.9G 0% /月 シェル 作業ディレクトリを設定する [-w]
シェル -w は、ディレクトリ (ここでは /path/to/dir/) 内でのコマンドの実行を許可します。 パスが存在しない場合は、コンテナ内に作成されます。 各コンテナのストレージドライバーオプションを設定する
シェル tmpfs をマウントする (-tmpfs)
シェル --tmpfs フラグは、rw、noexec、nosuid、size=65536k オプションを使用して、空の tmpfs をコンテナーにマウントします。 ボリュームをマウントする (-v, --read-only)
シェル -v フラグは、現在の作業ディレクトリをコンテナにマウントします。 -w は、現在の作業ディレクトリでコマンドの実行を有効にし、ディレクトリを pwd によって返された値に変更します。したがって、この組み合わせでは、コンテナを使用してコマンドが実行されますが、現在の作業ディレクトリで実行されます。
シェル バインドされたボリュームのホスト ディレクトリが存在しない場合は、Docker によってホスト上にこのディレクトリが自動的に作成されます。 上記の例では、Docker はコンテナを起動する前に /doesnt/exists フォルダーを作成します。
シェル ボリュームを --read-only と組み合わせて使用することで、コンテナーがファイルを書き込む場所を制御できます。 --read-only フラグは、コンテナのルート ファイルシステムを読み取り専用としてマウントし、コンテナの指定されたボリュームの外部の場所への書き込みを禁止します。 ホストの docker 操作を docker コンテナ内で呼び出して実行する方法については、上記の記事が皆さんにお伝えできるすべてです。この記事が皆さんの参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Vue3.0のさまざまなリスニング方法の包括的な概要
>>: HTML で相対パスを使用してディレクトリのすべてのレベルのファイルを取得する方法の詳細な説明
チェーンプログラミングの実装原理jQuery を使用すると、開発者は常にドット構文を使用して独自のメ...
この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...
Ubuntu コマンドライン ウィンドウで次の操作を実行します。 1. 仮想環境をインストールする...
目次PagodaをインストールするPythonランタイム環境を構成するPythonをインストールする...
目次BOM (ブラウザ オブジェクト モデル) 1. ウィンドウブラウザのウィンドウサイズを取得する...
多くの友人がフォーラムやメッセージエリアで、どのような状況で MySQL をシャーディングする必要が...
MySQL のログには、エラー ログ、バイナリ ログ、一般クエリ ログ、スロー クエリ ログなどが含...
必要なリンクにインライン スタイルを追加します。コードをコピーコードは次のとおりです。 <a ...
方法 1: INSERT INTO t1(field1,field2) VALUE(v001,v00...
テーブルとは何ですか?セルセルで構成されています。表では、<td> の数は、<tr...
HTML の select 要素に関する質問は、さまざまな場所で提起されています。最近のプロジェクト...
導入以前、ある問題に気づきました。学習ビデオを視聴しているとき、動きが遅すぎる、先生が黒板に書くのに...
目次1. ReactとAntdを組み合わせてログイン機能を実現2. ReactとAntdを組み合わせ...
概要: 仕事でも面接でも、Web フロントエンドのパフォーマンスを最適化することは非常に重要です。で...
序文小規模なプログラムの開発では、リストをスクロールして表示する必要性に遭遇することがよくあります。...