Docker CLIのコンテキストは、複数のDockerエンドポイントと対話するための合理化されたメカニズムを提供します。各ホストのコンテキストを設定し、その場でそれらを切り替えることができます。
コンテキストがアクティブな場合、Dockerはすべてのコマンドをそのホストに転送します。主にローカルのDockerインストールを使用しているが、本番環境でコンテナーを開始する必要がある場合は、Dockerコンテキストを使用できるオプションの1つです。
有効なDockerエンドポイントはすべてコンテキストに変換できます。通常のDockerEngineインストール、Docker Swarmクラスター、Kubernetesクラスターをクラウドに接続できます。保存されている各コンテキストには、参照されているホストのすべての接続情報が含まれています。
コンテキストはdocker context
で管理されます 指図。 docker context create
を使用して新しいコンテキストを作成します 。コンテキストの名前とそのエンドポイント構成を指定する必要があります。
リモートホスト上のTCPを介して公開されたDockerソケットに接続するコンテキストを作成する方法は次のとおりです。
docker context create remote-host --docker host=tcp:///my-remote-host:2735
コンテキストは、デフォルトのコンテナーオーケストレーターとしてDockerSwarmを使用します。フラグを使用してこれを明示的に設定できます:
docker context create remote-host
--default-stack-orchestrator=swarm
--docker host=tcp:///my-remote-host:2735
Kubernetesへの接続を作成するには、オーケストレーターのタイプを変更します。 --kubernetes
も追加する必要があります フラグを立てて、Kubernetes構成ファイルへのパスを指定します:
docker context create kubernetes-host
--default-stack-orchestrator=kubernetes
--kubernetes config-file=/home/username/.kube/config
--docker host=unix:///var/run/docker.sock
アクティブなコンテキストは、docker context use
を使用して切り替えられます 。アクティブにするコンテキストの名前を渡します。
docker context use remote-host
以降のすべてのCLIコマンドは、新しいコンテキストで指定されたエンドポイントを使用して実行されます。アクティブなコンテキストは、変更するまで自動的に保持されます。別のコンテキストに切り替えるには、docker context use
を実行します また。 default
を渡すことで、ローカルDockerソケットを使用してデフォルトのコンテキストに戻すことができます。 コンテキスト名として。
--context
を追加することで、選択したコンテキストをいつでもオーバーライドできます Dockerコマンドへのフラグ:
docker run ubuntu:latest --context remote-host
DOCKER_CONTEXT
環境変数は、--context
の代替としても機能します 国旗。どちらのメカニズムでも、docker context use
を実行して元に戻すことなく、別のコンテキストへの一時的な切り替えが容易になります。 コマンド。
DOCKER_HOST
を使用する 環境変数もアクティブなコンテキストを上書きします。この変数は、Dockerにコンテキストによって提供されるものではなく特定のデーモンエンドポイントを使用するように強制します。
docker context ls
を実行すると、アクティブなコンテキストを検査できます。 。このコマンドは、CLI構成で使用可能なすべてのコンテキストを一覧表示します。アクティブなコンテキストはアスタリスクで強調表示されます。コンテキストを削除するには、docker context rm
を実行します 、コンテキスト名を指定します。 default
を削除することはできません コンテキスト。
コンテキストファイルは、DockerCLIの構成ディレクトリに保存されます。これは通常、$HOME/.docker
です。 Linuxの場合。コンテキストはcontexts
にあります サブディレクトリ。各コンテキストは、一意のハッシュで名前が付けられた独自のフォルダーを取得します。中には、meta.json
があります。 コンテキストを説明するファイル。作成されたコンテキストのみがファイルをディスクに保存します。 default
コンテキストは、Dockerデーモン構成から設定を継承します。
コンテキスト構成を同期する場合は、contexts
をバックアップできます 別のマシンに移動するためのフォルダ。 Rsync転送またはGitリポジトリを使用して、定期的な更新を簡素化できます。要件によっては、フォルダをネットワーク共有にシンボリックリンクすることもオプションになる場合があります。
Dockerを使用すると、CLIを介してコンテキストをエクスポートおよびインポートすることもできます:
docker context export my-context
これにより、my-context.dockercontext
が作成されます 作業ディレクトリ内のファイル。このファイルには、meta.json
が含まれています コンテンツと、コンテキスト名などの追加情報。このファイルを別のマシンに転送し、docker context import my-context.dockercontext
を実行します コンテキスト構成をロードします。
または、Kubernetesコンテキスト用のスタンドアロンKubernetes構成ファイルをエクスポートすることもできます:
docker context export kubernetes-context --kubeconfig
これにより、kubectl
などのKubernetesエコシステムツールと互換性のある通常の「kubeconfig」ファイルが生成されます。 。 Dockerコンテキストからkubeconfigファイルを取得する機能により、ツールチェーンの相互運用性が向上します。ファイル内には、DockerCLIに固有のものはありません。
コンテキストを編集する必要がある場合は、docker context update
を使用してください 指図。これは、docker context create
と同じフラグを受け入れます 。一括更新を行う場合は、meta.json
を編集できます コンテキストを直接操作するファイル。コンテキストのmeta.json
を検査できます docker context inspect my-context
を使用したCLIからのファイル 。
Dockerコンテキストは、複数の独立した環境にコンテナーをデプロイする必要がある場合に役立ちます。ローカルのDockerソケット、共有チームのステージングサーバー、本番のKubernetesサーバーのコンテキストを設定できます。
Dockerには、MicrosoftAzureおよびAmazonECSコンテナークラウドのサポートが組み込まれており、コンテキストとして追加することもできます。作成できるコンテキストの数に制限はないため、ホスト間を移動する際に優れた汎用性があります。
おそらく、コンテキストに関する最大の機能上の問題は、間違ったコンテキストに対して誤ってコマンドを実行する可能性です。 production
にいることを忘れた場合 コンテキスト、docker rm database-container
を実行 壊滅的な結果をもたらす可能性があります。疑わしい場合は、docker context ls
を実行してください 最初に選択したものを確認します。