はじめに
この実験では、docker plugin disable コマンドに焦点を当てて、Docker プラグインの管理方法を学びます。まず、現在インストールされているプラグインを一覧表示し、その状態を把握します。その後、プラグインを無効化する練習を行い、この操作の影響を観察します。
この実験では、プラグインが正常に無効化されたことを確認する方法も説明します。オプションとして、アクティブな参照がある場合など、プラグインの無効化が制限されるシナリオや、アクティブなプラグインを強制的に無効化する方法についても探ってみます。
インストールされたプラグインを一覧表示する
このステップでは、システムに現在インストールされている Docker プラグインを一覧表示する方法を学びます。Docker プラグインは Docker の機能を拡張し、ボリューム管理、ネットワーキング、ロギングなどの機能を提供します。
インストールされているプラグインを一覧表示するには、docker plugin ls コマンドを使用できます。このコマンドは、すべてのインストールされているプラグインの一覧と、その状態(有効または無効)およびその他の関連情報を表示します。
インストールされているプラグインを確認するために、このコマンドを実行してみましょう。
docker plugin ls
環境によって表示される具体的なプラグインは異なりますが、以下のような出力が表示されるはずです。
ID NAME DESCRIPTION ENABLED
デフォルトの LabEx 環境では、デフォルトでプラグインがインストールされていない場合があります。上記の出力は、現在プラグインがインストールされていないことを示しています。プラグインがインストールされている場合は、ここに一覧表示されます。
出力の各列は以下の通りです。
ID:プラグインの一意の識別子。NAME:プラグインの名前。DESCRIPTION:プラグインの機能の簡単な説明。ENABLED:プラグインが現在有効(true)または無効(false)であるかを示します。
どのプラグインがインストールされているか、およびその状態を理解することは、Docker プラグインを管理する最初のステップです。次のステップでは、これらのプラグインを無効化して管理する方法を学びます。
プラグインを無効化する
このステップでは、インストールされている Docker プラグインを無効化する方法を学びます。プラグインを無効化すると、そのプラグインの実行が停止し、Docker からその機能を利用できなくなります。
プラグインを無効化するには、docker plugin disable コマンドの後に無効化したいプラグインの名前または ID を指定します。
この環境ではデフォルトでプラグインがインストールされていないため、まず簡単なプラグインをインストールして、無効化コマンドをデモンストレーションします。vieux/sshfs プラグインをインストールします。このプラグインは、リモートの SSH ファイルシステムを Docker ボリュームとしてマウントできるようにします。
まず、プラグインをインストールしましょう。このコマンドはプラグインのイメージを取得し、有効化します。
docker plugin install vieux/sshfs
プラグインの機能に関する確認を求められます。y と入力して Enter キーを押して続行します。
Plugin "vieux/sshfs" is requesting the following privileges:
- network: [host]
- mount: [/dev/fuse]
- allow-host-dnsserver: true
- allow-other: true
- capability: [CAP_SYS_ADMIN]
Do you grant the plugin these privileges? [y/n] y
インストールが完了したら、再度プラグインを一覧表示することで、プラグインがインストールされて有効化されていることを確認できます。
docker plugin ls
これで、vieux/sshfs が ENABLED が true として一覧表示されるはずです。
ID NAME DESCRIPTION ENABLED
<plugin_id> vieux/sshfs Mount remote SSH filesystem true
では、vieux/sshfs プラグインの名前を使って、このプラグインを無効化しましょう。
docker plugin disable vieux/sshfs
コマンドが成功すると、何も出力が表示されません。これは、プラグインが無効化されたことを示しています。
プラグインの機能が不要になった場合や、問題をトラブルシューティングする際に、プラグインを無効化すると便利です。次のステップでは、プラグインが実際に無効化されていることを確認します。
プラグインが無効化されていることを確認する
このステップでは、前のステップで無効化した vieux/sshfs プラグインが実際に無効化されていることを確認します。
インストールされているプラグインの状態を確認するには、再度 docker plugin ls コマンドを使用できます。このコマンドは、すべてのプラグインの現在の状態を表示します。
コマンドを実行しましょう。
docker plugin ls
vieux/sshfs プラグインの出力を見てください。ENABLED 列には、ここでは false が表示されるはずです。
ID NAME DESCRIPTION ENABLED
<plugin_id> vieux/sshfs Mount remote SSH filesystem false
ENABLED 列に false が表示されていることで、プラグインが正常に無効化されたことが確認できます。プラグインが無効化されている場合、Docker はその機能を使用できません。
この確認ステップは、前のコマンドが意図した通りの効果をもたらしたことを保証するために重要です。次のオプションのステップでは、プラグインの無効化がより複雑になるシナリオを探ってみます。
参照があるプラグインを無効化しようとする(オプション)
このオプションのステップでは、現在使用中またはそれに依存するリソースがあるプラグインを無効化しようとします。これにより、Docker がこのような状況をどのように処理するかを示します。
まず、vieux/sshfs プラグインを再度有効化して使用できるようにしましょう。
docker plugin enable vieux/sshfs
次に、vieux/sshfs プラグインを使用する Docker ボリュームを作成します。これにより、プラグインに依存関係が生じます。
docker volume create --driver vieux/sshfs -o sshcmd=user@host:/path/to/dir -o IdentityFile=~/.ssh/id_rsa sshfs_volume
注意: このコマンドは、有効な SSH ホストとキーが構成されていないため、おそらく失敗します。これは予想されることであり、プラグインを 使用しようとする ボリュームを作成する目的で行われており、参照を作成する役割を果たします。ボリュームの作成に失敗したことを示すエラーメッセージが表示されます。
では、ボリューム sshfs_volume が存在する状態で、ボリュームの作成が失敗したとしても、vieux/sshfs プラグインを再度無効化してみましょう。
docker plugin disable vieux/sshfs
次のようなエラーメッセージが表示されるはずです。
Error response from daemon: plugin vieux/sshfs is in use by volume sshfs_volume
このエラーが発生するのは、Docker がボリュームなどの他の Docker リソースによって現在参照されているプラグインを無効化することを防止するためです。これは、予期しない動作やデータ損失を防ぐための安全機構です。
このシナリオでプラグインを正常に無効化するには、まず依存するリソース(この場合はボリューム)を削除する必要があります。ボリュームを削除しましょう。
docker volume rm sshfs_volume
これで、プラグインを無効化できるはずです。
docker plugin disable vieux/sshfs
今回は、エラーメッセージなしでコマンドが成功するはずです。
このステップは、Docker が依存関係を管理し、アクティブに使用されているプラグインを無効化することを防止することを示しています。
アクティブなプラグインを強制的に無効化する(オプション)
このオプションのステップでは、Docker プラグインを強制的に無効化する方法を学びます。プラグインが固まっている場合や通常の方法で無効化できない場合、これが必要になることがあります。ただし、重要なリソースがアクティブにプラグインを使用している場合、予期しない動作を引き起こす可能性があるため、強制オプションの使用には注意してください。
まず、vieux/sshfs プラグインが有効になっていることを確認しましょう。
docker plugin enable vieux/sshfs
次に、-f または --force フラグを使用して、プラグインを強制的に無効化してみましょう。
docker plugin disable -f vieux/sshfs
強制フラグを使用しても、実行中のコンテナや他の重要なリソースがアクティブにプラグインを使用している場合、Docker はシステムの不安定性を避けるために無効化操作を妨げることがあります。ただし、実行中のコンテナをアクティブに管理していない vieux/sshfs のような単純なプラグインの場合、前のステップでボリューム参照を削除したとしても、強制フラグは通常成功します。
強制オプションは主に、プラグインが応答しない場合や標準的な方法で無効化できない状況を処理するために設計されています。このオプションは、プラグインの現在の状態や軽微な参照に関係なく、プラグインプロセスをシャットダウンして無効化しようとします。
強制的に無効化しようとした後、プラグインの状態を確認できます。
docker plugin ls
vieux/sshfs プラグインは、ENABLED が false に設定されて一覧表示されるはずです。
ID NAME DESCRIPTION ENABLED
<plugin_id> vieux/sshfs Mount remote SSH filesystem false
これで、プラグインの依存関係の処理と強制的な無効化に関するオプションのステップは終了です。Docker プラグインの一覧表示、無効化、状態の確認方法、および参照があるプラグインを無効化しようとしたときの Docker の処理方法を学びました。
まとめ
この実験では、Docker プラグインの管理方法、特に無効化する方法を学びました。まず、docker plugin ls を使用してインストールされたプラグインを一覧表示し、その状態を把握し、どのプラグインがアクティブかを特定しました。次に、docker plugin disable コマンドを使用してプラグインを無効化する練習を行い、プラグインの機能を停止する方法を実証しました。最後に、プラグインが正常に無効化されたことを確認しました。



