docker-machineの使い方の詳しい説明

docker-machineの使い方の詳しい説明

Docker-machineはDockerが公式に提供しているDocker管理ツールです。

これは docker-machine で簡単に実行できます。

Windows および MAC プラットフォームに docker をインストールして実行する

複数のDockerホストを構築および管理する

スウォームクラスターの構築

環境は、Win にインストールされた VirtualBox、VirtualBox によってインストールされた CentOS7、ネットワーク モード NAT+hostonly です。

ip:192.168.56.102 (ホストのみ)

1. docker-machineをインストールします。

curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine

2. docker-machineのバージョンを確認します。

# docker-machine バージョン
[root@docker ~]# docker-machine バージョン
docker-machine バージョン 0.13.0、ビルド 9ba6da9

3. Centos7 環境でマシンを作成します。

[root@localhost ~]# docker-machine create -d virtualbox default
CA を作成しています: /root/.docker/machine/certs/ca.pem
クライアント証明書を作成しています: /root/.docker/machine/certs/cert.pem
作成前のチェックを実行しています...
作成前チェックのエラー: 「VBoxManage が見つかりません。VirtualBox がインストールされ、VBoxManage がパス内にあることを確認してください」

しかし、VirtualBoxによってインストールされたcentos7環境がVirtualBoxドライバーをサポートしていると考え、エラーを報告しましたが、環境のインストールはVirtualBoxドライバーをサポートしていることがわかりました。

virtualbox ドライバーを使用するには、virtualbox をインストールする必要があります。Ubuntu の場合の解決策は次のとおりです。

そのため、汎用ドライバーを使用します。詳細については、公式 Web サイトを参照してください: https://docs.docker.com/machine/drivers/generic/

[root@localhost ~]# docker-machine create -d generic --generic-ip-address=192.168.56.102 --generic-ssh-key ~/.ssh/id_rsa --

汎用SSHユーザー=root vm
作成前のチェックを実行しています...
マシンを作成しています...
(vm) SSH キーをインポートしています...
マシンが実行されるのを待っています。これには数分かかる場合があります...
作成されたインスタンスのオペレーティング システムを検出しています...
SSH が利用可能になるまで待機しています...
マシンの作成エラー: OS の検出エラー: SSH が利用可能になるまでの再試行回数が多すぎます。最後のエラー: 再試行回数の上限 (60) を超えました
--generic-ip-address=192.168.56.102: ここでの IP はローカル マシンを指します。他のリモート Docker ホストにインストールする必要がある場合は、他の Docker ホストの IP に変更できます (ここでは docker-machine のローカル作成です)

それでもエラーが発生します。これは、docker-machine がローカル マシン用のマシンを作成するときにも ssh 認証が必要になるためです。

[root@localhost ~]# ssh-keygen
[root@localhost ~]# ssh-copy-id [email protected]

パスワードを自分に送信し、マシンの作成を続行します。

[root@localhost ~]# docker-machine create -d generic --generic-ip-address=192.168.56.102 --generic-ssh-key ~/.ssh/id_rsa --generic-ssh-user=root vm
作成前のチェックを実行しています...
マシンを作成しています...
(vm) SSH キーをインポートしています...
マシンが実行されるのを待っています。これには数分かかる場合があります...
作成されたインスタンスのオペレーティング システムを検出しています...
SSH が利用可能になるまで待機しています...
プロビジョナーを検出しています...
CentOS を使用したプロビジョニング...
証明書をローカル マシン ディレクトリにコピーしています...
証明書をリモート マシンにコピーしています...
リモート デーモンで Docker 構成を設定しています...
Dockerへの接続を確認しています...
Docker が稼働しています!
この仮想マシンで実行されている Docker エンジンに Docker クライアントを接続する方法を確認するには、次のコマンドを実行します: docker-machine env vm

ついにマシンの作成に成功しました

docker-machine をチェックしてください:

[root@localhost ~]# docker-machine ls 
名前 アクティブ ドライバー 状態 URL Swarm Docker エラー
vm-generic 実行中 tcp://192.168.56.102:2376 v17.09.0-ce 

VM の環境変数を表示します。

[root@localhost ~]# docker-machine env vm
エクスポート DOCKER_TLS_VERIFY="1"
DOCKER_HOST="tcp://192.168.56.102:2376" をエクスポートします
DOCKER_CERT_PATH をエクスポートします。
DOCKER_MACHINE_NAME="vm" をエクスポートします。
# シェルを設定するには、このコマンドを実行します。 
# $(docker-machine env vm) を評価する

環境変数を読み込み:

[root@localhost ~]# eval $(docker-machine env vm)

ssh を使用してマシンにログインします。

[root@localhost ~]# docker-machine ssh --help
使用方法: docker-machine ssh [arg...]
SSH を使用してマシンにログインするか、コマンドを実行します。
説明:
引数は[マシン名] [コマンド]です
[root@localhost ~]# docker-machine ssh vm
最終ログイン: 2017年11月4日土曜日 17:55:53 192.168.56.102から
[root@vm ~]# 

次に、ローカル環境にコンテナを作成して起動します。

[root@localhost ~]# docker run -d --name=nginx nginx
[root@localhost ~]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
6e62975fab90 nginx "nginx -g 'daemon ..." 約 1 分前 59 秒前に起動 80/tcp nginx

次に、docker-machine にリモートで ssh します。

[root@localhost ~]# docker-machine ssh vm   
最終ログイン: 2017年11月4日土曜日 18:13:27 192.168.56.102から
[root@vm ~]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
6e62975fab90 nginx "nginx -g 'daemon ..." 約 1 分前 起動 約 1 分 80/tcp nginx

dockerホストとdocker-machineホストのコンテナIDが同じであることがわかります。

docker-machineを使用してdockerをインストールし、コンテナを作成します。

上記は、ローカルに自分用のマシンを作成する方法です。次に、リモート Docker ホスト用の docker-machine を作成します。
環境: centos7、192.168.101.14、vmware の下に docker と docker-machine がインストールされ、docker ホスト 192.168.56.102 用のマシンを作成します。
(2 つの IP は異なっており、アクセスできるように転送されます (前の IP は VM の下の NAT の静的 IP で、後ろの IP は VirtualBox の 2 つのネットワーク カード (NAT とホストのみ)))

1. まず、192.168.101.14 とホスト 192.168.56.102 間の SSH 接続を認証します。

[root@docker ~]# ssh-keygen
[root@docker ~]# ssh-copy-id [email protected]

2. マシンを作成します。

[root@docker ~]# docker-machine create -d generic --generic-ip-address=192.168.56.102 --generic-ssh-key ~/.ssh/id_rsa --generic-ssh-user=root デフォルト
CA を作成しています: /root/.docker/machine/certs/ca.pem
クライアント証明書を作成しています: /root/.docker/machine/certs/cert.pem
作成前のチェックを実行しています...
マシンを作成しています...
(デフォルト) SSH キーをインポートしています...
マシンが実行されるのを待っています。これには数分かかる場合があります...
作成されたインスタンスのオペレーティング システムを検出しています...
SSH が利用可能になるまで待機しています...
プロビジョナーを検出しています...
CentOS を使用したプロビジョニング...
証明書をローカル マシン ディレクトリにコピーしています...
証明書をリモート マシンにコピーしています...
リモート デーモンで Docker 構成を設定しています...
Dockerへの接続を確認しています...
Docker が稼働しています!
この仮想マシンで実行されているDockerエンジンにDockerクライアントを接続する方法を確認するには、次のコマンドを実行します: docker-machine env default

環境変数を実行し、マシン環境に入ります。

[root@docker ~]# docker-machine env デフォルト
[root@docker ~]# eval $(docker-machine env default)

3. 作成されたマシンを表示します。

[root@docker ~]# docker-machine ls
名前 アクティブ ドライバー 状態 URL Swarm Docker エラー
デフォルト - 汎用 tcp://192.168.56.102:2376 v17.09.0-ce を実行中 

192.168.101.14環境でリモートホスト192.168.56.102用に作成されたマシンを確認できます。

4. コンテナを作成します。

[root@docker ~]# docker run -d --name=nginx nginx (ローカルに nginx イメージはありません)
b1f08986f6d5dbb1ede699e915bde734bab278fbe70f93af06ec2267fae2fef3
[root@docker ~]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
b1f08986f6d5 nginx "nginx -g 'daemon ..." 4 秒前 3 秒前にアップ 80/tcp nginx
5. マシンにSSH接続します。
[root@docker ~]# docker-machine ssh デフォルト
最終ログイン: 2017年11月4日土曜日 18:51:49 192.168.56.1から
[root@default ~]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
b1f08986f6d5 nginx "nginx -g 'daemon ..." 23 秒前 22 秒前にアップ 80/tcp nginx

次に、リモート ホスト上にコンテナーが作成されているかどうかを確認します。

[root@localhost ~]# docker ps -a
CA 証明書 "/root/.docker/machine/machines/default/ca.pem" を読み取れませんでした: /root/.docker/machine/machines/default/ca.pem を開いてください: そのようなファイルまたはディレクトリはありません

エラーの原因:

192.168.56.102 に自分用のマシンをセットアップしたばかりなので、以前のマシンの環境変数を保持しています。今は削除しましたが、環境変数を設定しています。設定した環境変数をキャンセルします。

[root@localhost ~]# DOCKER_TLS_VERIFY の設定を解除
[root@localhost ~]# DOCKER_CERT_PATH の設定を解除する
[root@localhost ~]# DOCKER_MACHINE_NAMEの設定を解除
[root@localhost ~]# DOCKER_HOSTの設定を解除

次に再度確認します:

[root@localhost ~]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
b1f08986f6d5 nginx "nginx -g 'daemon ..." 8 分前 8 分前にアップ 80/tcp nginx

リモートホストのコンテナが正常に作成されたことがわかります

現在、イメージ centos_nginx:v4 は 192.168.101.14 に存在しますが、リモート ホスト 192.168.56.102 にはこのイメージがありません。コンテナを作成して、リモート ホストが正常に作成できるかどうかを確認します。

[root@docker ~]# docker pull registry.cn-hangzhou.aliyuncs.com/wadeson/jsonhc:v4
[root@docker ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
nginx 最新 b72d63324dbb 13 時間前 108MB
registry.cn-hangzhou.aliyuncs.com/wadeson/jsonhc v4 6c5128aaff05 2日前 464MB

次に、リモート ホストを確認します。

[root@localhost ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
nginx 最新 b72d63324dbb 13 時間前 108MB
registry.cn-hangzhou.aliyuncs.com/wadeson/jsonhc v4 6c5128aaff05 2日前 464MB

2 つのホストのイメージが同期され、コンテナも同期されていることがわかります。

VMのDockerはVirtualBoxのDocker用のコンテナを作成でき、さらにローカルではdocker-machineを介してクラウドなどの他の環境用のコンテナを作成することができます。

以前は、マシン環境変数の設定により、192.168.101.14 のイメージが消えていました。

DOCKER_TLS_VERIFY の設定を解除
DOCKER_CERT_PATH の設定を解除する
DOCKER_MACHINE_NAME の設定を解除
DOCKER_HOST の設定を解除

上記を実行してマシン環境変数をキャンセルし、元の環境に戻します。

[root@docker ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
centos_init v1 383ff3502443 26 時間前 448MB
centos_nginx v8 6f792dc07c35 2日前 464MB
centos_nginx v7 9e875385d6be 2日前 464MB
centos_nginx v6 959fdf4d4288 2日前 464MB
centos_nginx v5 5c1131306686 2日前 464MB
registry.cn-hangzhou.aliyuncs.com/wadeson/jsonhc v4 6c5128aaff05 2日前 464MB
192.168.101.14:5000/centos_nginx v4 6c5128aaff05 2日前 464MB
centos_nginx v4 6c5128aaff05 2日前 464MB
centos_nginx v3 0e49a2c0562f 2日前 464MB
centos_nginx v2 2031faf8894a 2日前 464MB
centos_nginx v1 78d18f16e757 3日前 464MB
レジストリ最新 2ba7189700c8 9日前 33.3MB
ubuntu 最新 747cb2d60bbe 3 週間前 122MB
centos 最新 196e0ce0c9fb 7 週間前 197MB

マシン環境に戻る必要がある場合は、マシン環境変数の実行を続けます。この方法により、ローカルとリモートのイメージとコンテナが適切に分離されます。

docker における docker-machine の詳しい使い方については以上です。docker machine の使い方についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker Machine を使用して Docker をリモートでデプロイする方法
  • Docker Machine は Azure 仮想ホストを作成します
  • Docker マシン ディープラーニング
  • Docker Machine とは何ですか?
  • Docker Machineの詳細な説明

<<:  Mysql sql スロークエリ監視スクリプトコード例

>>:  JavaScript ES6 分割演算子の理解と応用

推薦する

Mysql関数呼び出しの最適化の詳細な説明

目次関数呼び出しの最適化関数呼び出しの最適化MySQL 関数は、内部的に決定論的または非決定論的とし...

リクエスト数を制限するために Ajax 同時リクエストを実装するために js を使用するサンプル コード

問題の説明: 非同期リクエストの数が不確定な場合、数百の http リクエストが瞬時に発生したときに...

PC/Pad/Phoneデバイスに自動的に適応するCSSウェブページレスポンシブレイアウト

序文最近は、PC、iPad、携帯電話、スマートウォッチ、スマートテレビなど、さまざまなデバイスが存在...

MySQLパラダイムの使用に関する詳細な説明

1. パラダイムこのパラダイムの英語名は Normal Form であり、1970 年代にリレーショ...

CentOS の環境変数と設定ファイルの詳細な説明

序文CentOS 環境変数設定ファイル システムは階層型システムであり、他のマルチユーザー アプリケ...

シンプルなデータ応答システムを実装する

目次1. デップ2. 観察者を理解する3. 監視と観察者を理解する4. トリガーの依存性5. プロセ...

Vue実戦記録のログインページの実装

目次1. 事前準備1.1 Node.jsをインストールする1.2 webpackをインストールする1...

シェルで文字列内のスペースや指定された文字を削除する方法

インターネット上には、正しい方法であっても、使用しても正しい結果が得られない方法が数多くあります。正...

React イベントバインディングの詳細

目次クラスコンポーネントイベントバインディング関数コンポーネントイベントバインディング要約するRea...

MySQLアカウントのパスワード変更方法(概要)

序文:データベースを日常的に使用すると、パスワードが単純すぎて変更する必要がある場合、パスワードの有...

モバイルデバイス上のぼやけた小さなアイコンの問題を解決する方法

序文以前、画像とテキストの垂直方向のずれの問題について説明しました。ここで示した小さな例では、小さな...

vue の v-bind を理解する

目次1. v-bindの主要ソースコードの分析1. v-bind属性はどこに均一に保存されるか: a...

WeChatアプレット学習ノート: ページ構成とルーティング

最近、小さなプログラムの開発を勉強して見直しており、学習結果のいくつかをメモしています。公式の We...

MySQL のキーとインデックスの違い

まずはコードを見てみましょう: ALTER TABLE reportblockdetail ADD ...

クールな充電アニメーションを実現する純粋なCSS

CSS のみを使用してどのような充電アニメーション効果を作成できるかを見てみましょう。バッテリーを...