たのしい工学

プログラミングを学んで、モノをつくりたいひと、効率的に仕事をしたい人のための硬派なブログになりました

【Docker 入門】Docker machine

   

Docker Machine

  • Docker Engineを搭載した仮想マシンの作成、起動、停止、再起動などをコマンドラインから実行できるツールです。

  • ローカルPCだけでなく、リモートのクラウドプロバイダでDockerホストを立ち上げ管理することも可能です。

Docker MachineはいわばDockerによる仮想化技術なので、どこかのホストプラットフォーム上で実行することが必要になります。windowsなら、Hyper-Vもしくは、Virtual boxなどを起動して、そこで仮想マシン版のDockerを起動します。

Docker machineを使用したDockerホストの管理コマンド

  • 現在立ちあがっている仮想Dockerマシン名を表示

docker-machine ls
  • docker-machineを作成

docker-machine create <作成したい仮想マシンDockerの名前>
  • 作成したdocker-machineにssh接続

docker-machine ssh <接続したい仮想マシンDocker>
  • 操作したいdocker-machineの環境変数の設定

docker-machine env <接続したい仮想マシンDocker>
  • docker-machineの停止

docker-machine stop <停止させたい仮想マシンDocker>
  • docker-machineの削除

docker-machine rm <削除したい仮想マシンDocker>

GCPのGCEへDockerホストをプロビジョニングする方法

dokcer-instanceをGCP上に立ち上げる

プロジェクトの作成

IAMと管理>サービスアカウント>サービスアカウントを作成>このサービスアカウントにプロジェクトへのアクセスを許可する(サービスアカウントの権限を「オーナー」に)

プロジェクトにオーナー権限を付与し忘れると、仮想マシンが立ち上がらないので注意!!

キーの作成jsonでこれをGOOGLE_APPLICATION_CREDENTIALSとしてあとで環境変数に設定します


export GOOGLE_APPLICATION_CREDENTIALS="/c/Program Files/Docker Toolbox/docker-test-219312-c298954a4db6.json"


APIサービスの有効化
https://console.developers.google.com/apis/api/compute.googleapis.com/overview?project=<プロジェクトID>

インスタンスの立ち上げ


docker-machine create --driver google --google-project <プロジェクトID> --google-zone asia-northeast1-a <仮想Dockerコンテナ名>

--diriver google : ドライバーにGoogleを指定して、Google Compute Engine上にホストを作成することを意味しています。

--google-project : GCPのproject名

--google-zone:GCPの利用地域指定

操作対象のホストマシンをさきほど立ちあげたDocker仮想コンテナに切り替えます。
<仮想Dockerコンテナ名>はvm01とします

下記コマンドで、環境変数の設定します


docker-machine env vm01

下記で、操作対象のホストマシンに切り替えます。


eval $(docker-machine env vm01)

docker-machine lsすると、vm01がACTIVEになっていることが確認できます。

Image from Gyazo

では下記コマンドで、dockerコンテナを起動してみましょう。


docker run -d -p 8080:80 --name webserver kitematic/hello-world-nginx

ポート8080番、webserverという名前でkitematic/hello-world-nginxコンテナを起動します。

ファイアウォールルールは以下のように設定します
設定したポート8080番を解放します。
Image from Gyazo

docker-machine ip vm01でvm01のホストマシンに振られているIPアドレスを確認します。

ブラウザからそのIPと先ほど解放したポート8080番でアクセスします。


(docker-machine ip vm01で確認したIP):8080

Image from Gyazo

このよう画面が表示されれば成功です。

ちなみに、この画面は


/var/lib/docker/volumes/390297c140c89575f4b2699e459d86af844b8d6b1cd90f3ab5d97f9e10fc78b5/_data/index.html

のファイルですので、ここを書き換えると、
Image from Gyazo
こんな風に編集できてしまいます。

ホストの停止は


docker-machine stop vm01

ホストの削除は


docker-machine rm vm01

で行えます。

いちど、DockerToolboxを閉じて、ふたたびホストに接続する場合には、もういちど


export GOOGLE_APPLICATION_CREDENTIALS="/c/Program Files/Docker Toolbox/docker-test-219312-c298954a4db6.json"

の操作が必要になります。
接続時に自動でよみこませるためには、この設定をbash_profileなどに書き込む必要があるでしょう。

全般、こちらにくわしくまとまっています
Docker Machine をローカル VM で始めるには — Docker-docs-ja 1.11.0 ドキュメント

独学するには?

もっとDockerを詳しく学びたいひとは、Udemyの「ゼロからはじめる Dockerによるアプリケーション実行環境構築」がおすすめです。本も読んで学んでもいますが、動画教材ならではの手を動かしながらの学びやすさがあります。

本ならこちらがおすすめ
Dockerのみならず、Kubernetesまでを見据えて書かれているところもよいです。弊部署の大先輩も7冊くらいDocker本を読んでみた結果、これが一番まとまっていてよかったといってました。

ではでは!

 - Docker