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 分割演算子の理解と応用

推薦する

nginxディレクトリパスをリダイレクトする方法

ドメイン名に続くパスがデフォルトの Web ディレクトリではなく、ローカル ディスク上の他のディレク...

React Hook の使用例 (一般的なフック 6 つ)

1. useState: 関数コンポーネントに状態を持たせる使用例: // カウンター impor...

Vueコンポーネント通信方法事例まとめ

目次1. 親コンポーネントが子コンポーネントに値を渡す(props) 2. サブコンポーネントは親コ...

まだ*を選択しますか?

アプリケーションが牛のように遅い理由は数多くあります。ネットワーク、システム アーキテクチャ、または...

CSS で 2 つの固定列と 1 つの適応列を実装するいくつかの方法

この記事では、CSS で 2 つの固定列と 1 つのアダプティブ列を実装するいくつかの方法を紹介し、...

Linux 環境で crontab コマンドを使用して、スケジュールされた定期的な実行タスクを設定します (PHP 実行コードを含む)

この記事では、Linux 環境で crontab コマンドを使用して、タスクの定期的な実行をスケジュ...

Docker の 4 つのネットワーク タイプの主な例

4 つのネットワーク タイプ:なし: コンテナのネットワーク機能を一切設定しません。--net=no...

CSSに基づいてマウス入力の方向を決定する

以前、フロントエンド技術グループに所属していたとき、グループのメンバーが面接中に問題に遭遇したと言っ...

星のきらめき効果を実現するネイティブ js

この記事の例では、星のきらめき効果を実現するためのjsの具体的なコードを共有しています。具体的な内容...

Vue-Routerのルート設定の詳しい説明

目次導入ルート内のオブジェクト属性パス: 文字列コンポーネント: コンポーネント | () =>...

Docker コンテナにデプロイされた Django のタイムゾーンの問題

目次Django でのタイムゾーン設定USE_TZ=真USE_TZ=偽Linux コンテナでのタイム...

Tomcatの各ポートの機能の詳細な説明

tomcat 設定ファイルから、tomcat の起動時にデフォルトで 8080 (8443)、800...

Vue-Element-Adminはログインジャンプを実現するために独自のインターフェースを統合しています

1. まずリクエスト設定ファイルを見て、axios.createメソッドを見てください。baseUR...

MySQL 使用仕様の概要

1. InnoDBストレージエンジンを使用する必要がありますCPU と IO のパフォーマンスが向上...

イメージのアップロードとダウンロードに docker をプロキシするためのプライベート ライブラリとして nexus を使用する

1. Nexusの設定1. Dockerプロキシを作成する外部ネットワーク ウェアハウスからローカル...