docker-machine

docker-machineを使ってみよう

More than 1 year has passed since last update.

はじめに

docker初心者として調べ物をすると、docker, docker-machine, docker-toolboxとかdockerナンチャラが溢れていて訳がわからなくなりました。取り急ぎ、調査できたdocker-machineについてまとめようと思います。

docker-machineとは

  • docker-machineは、DockerがインストールされたDockerホストを作ったり、削除したりできる。
  • Dockerホストの作成はローカル環境であったりリモート環境であったりと選べる。
  • Dockerホストの作成先を選ぶにはdocker-machine create--driver引数で宛先の環境を選択する。
$ docker-machine ls                                                                                                                                   20:17:16
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
test   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.07.0-ce
aws    -        aws          Running   tcp://192.168.99.101:2376           v17.07.0-ce

virtualboxの場合は下記のようなコマンドライン

$ docker-machine create --driver virtualbox \
  --virtualbox-memory <メモリのサイズ(MB)> \
  <マシン名>

awsの場合は下記のようなコマンドラインになる。らしい。

$ docker-machine create --driver=amazonec2 \
  --amazonec2-access-key=<アクセスキー> \
  --amazonec2-secret-key=<シークレットキー> \
  --amazonec2-vpc-id=<VPC ID> \
  <マシン名>

メリット

  • 各クラウド環境に自動でDocker環境を作れてしまう。
  • ローカル環境のCLIからリモートを含む全てのdocker-machineが前述の様に一望できる。
  • docker-machineに相当するリソースに対して色々と操作ができる(前述のawsの行は想像)。

操作

  • start マシン開始
    • docker-machine start <マシン名>
  • stop マシン停止
    • docker-machine stop <マシン名>
  • restart マシン再起動
    • docker-machine restart <マシン名>
  • active マシン有効化
    • eval (docker-machine env <マシン名>|source)
  • remove マシン削除
    • docker-machine rm <マシン名>
  • create マシン作成
    • docker-machine create <オプション> <マシン名>
  • ls マシン一覧表示
    • docker-machine ls
  • ssh SSH接続
    • docker-machine ssh <マシン名>
  • scp ファイル転送
    • docker-machine scp <マシン名>
  • ip パブリックIP表示
    • docker-machine ip <マシン名>
  • inspect 詳細表示
    • docker-machine inspect <マシン名>

実際にやってみる

マシン名はtestで、

$ docker-machine create --driver virtualbox --virtualbox-memory 2048 test

$ docker-machine env test                                                                                                                             20:16:02
set -gx DOCKER_TLS_VERIFY "1";
set -gx DOCKER_HOST "tcp://192.168.99.100:2376";
set -gx DOCKER_CERT_PATH "/Users/positrium/.docker/machine/machines/test";
set -gx DOCKER_MACHINE_NAME "test";
# Run this command to configure your shell:
# eval (docker-machine env test)

$ eval (docker-machine env test|source)

$ docker-machine ssh test

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/

Boot2Docker version 17.07.0-ce, build HEAD : 24e9d2f - Wed Aug 30 00:04:56 UTC 2017
Docker version 17.07.0-ce, build 8784753

docker@test:~$ docker -v
Docker version 17.07.0-ce, build 8784753

docker@test:~$ docker<TAB>
docker                  docker-containerd       docker-containerd-ctr   docker-containerd-shim  docker-init             docker-proxy            docker-runc             dockerd

docker@test:~$ exit

$ docker-machine ls                                                                                                                                   20:17:16
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
test   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.07.0-ce

docker-composeは入ってない。

用途(憶測)

  1. docker-machine createする
  2. eval (docker-machine env <マシン名>|source)して環境変数でカレントマシンを設定
  3. docker-machine scp <マシン名>でDockerfileなりdocker-compose.ymlなりをアップロードする
  4. docker-machine ssh <マシン名>でログインする
    • (必要ならdocker-composeをインストールするとか)
  5. ssh先でdocker buildするなり、docker-compose buildするなりしてコンテナを生成、実行する。
  6. カレントマシン=ローカルマシンになるっぽいので、そこで自由にdocker buildするなりすればいいみたい。
    • docker runした時のIPとdocker-machine ip <マシン名>が同一だったことから。

ローカルであってもリモートであっても、マシン名で識別できるようになるのが便利でいい。接続先IPアドレスとか一々調べなくても良さそう。多分、sshも鍵認証だと思うし、その辺も自動でセットアップしてくれるとしたら、いつものルーチンワークが無くていい。

TODO

  1. docker-machineがあればDocker入りホストが作れるというなら、ローカル環境用のホストを作れば、ローカル環境にDockerをインストールしなくてよかった?
  2. docker-machine sshの用途ってってなんだろ・・?
  3. Aさんのローカル環境からdocker-machine createしたリモートDockerホスト環境を、Bさんのdocker-machineにimportするとかどうするんだろう?複数人で管理したいかというより、作業の引き継ぎが難しいのは嫌だし。