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

推薦する

Webpack パッケージング CSS 背景画像パスの問題に対する完璧なソリューション

vue コンポーネントのスタイル タグ内には、背景画像を使用する次の CSS コードがあります。 背...

vite2.0 設定学習の詳しい説明(typescript 版)

導入悠宇希の原文です。 vite は Vue CLI に似ています。vite も、基本的なプロジェク...

CentOS8.1 で Gitlab サーバーを構築するための詳細なチュートリアル

Gitlab と Github の違いについては、あまり説明する必要はありません。一言でまとめると、...

Linux の cut コマンドの説明

Linux や Unix の cut コマンドは、ファイルの各行から一部を切り取って標準出力に出力す...

CSS3 ベジェ曲線の例: リンクホバーアニメーション効果の作成

CSS3 アニメーション トランジションを使用して、リンクの上にマウスを移動すると小さなポップアップ...

VMware での Linux CentOS6.9 インストール グラフィック チュートリアル

技術初心者として、初めて Linux システムをインストールするプロセスを記録しています。まず、Wi...

Windows 環境での MySQL 8.0 のインストール、設定、アンインストール

ソフトウェアバージョンウィンドウズ: ウィンドウズ10 MySQL: mysql-8.0.17-wi...

Nginx サービスを使用してサブドメイン環境を構築し、2D マップの読み込みパフォーマンスを向上させる方法を説明します。

1. 背景最近、友人が大規模なマップの読み込みが遅いという問題に遭遇しました。iServer のパ...

HTML はテキストの外側に省略記号を表示します...テキストオーバーフローによって実装されます

div または span に同時に CSS を適用する必要があります。コードをコピーコードは次のとお...

ページに間隔を空けてグリッドレイアウトを完璧に実装する方法

典型的なレイアウト例上の写真のように、正方形の真ん中に一定の隙間があり、その隙間は固定されています。...

MYSQL updatexml() 関数のエラーインジェクション分析

まず、updatexml()関数を理解する UPDATEXML (XML ドキュメント、XPath ...

入力ボックスのプレースホルダーアニメーションと入力検証を実現する純粋なCSS

さらに興味深いコンテンツについては、https://github.com/abc-club/free...

Vue で CSS カスタム変数を使用する方法

目次CSS カスタム変数機能は古くから存在していますが、実際の開発ではあまり使用されていません。その...

MySQL での %% のようなファジークエリの実装

1、%: 0 個以上の任意の文字を表します。あらゆるタイプと長さの文字に一致します。場合によっては、...

SeataがMySQL 8バージョンを使用できない問題を解決する方法

考えられる理由: Seata が MySQL 8 をサポートしない主な理由は、接続ドライバーがバージ...