ssh

SSH でマシンにログインするか、コマンドを実行します。

ログインするには、 docker-machine ssh machinename を実行するだけです。

$ docker-machine ssh dev
                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.4.0, build master : 69cf398 - Fri Dec 12 01:39:42 UTC 2014
docker@boot2docker:~$ ls /
Users/   dev/     home/    lib/     mnt/     proc/    run/     sys/     usr/
bin/     etc/     init     linuxrc  opt/     root/    sbin/    tmp      var/

docker-machine ssh コマンドは通常の ssh プログラムが動作するように、リモートで直接実行するコマンドを指定することも可能です。

$ docker-machine ssh dev free
             total         used         free       shared      buffers
Mem:       1023556       183136       840420            0        30920
-/+ buffers:             152216       871340
Swap:      1212036            0      1212036

コマンドに対するフラグも、同様に動作します。

$ docker-machine ssh dev df -h
Filesystem                Size      Used Available Use% Mounted on
rootfs                  899.6M     85.9M    813.7M  10% /
tmpfs                   899.6M     85.9M    813.7M  10% /
tmpfs                   499.8M         0    499.8M   0% /dev/shm
/dev/sda1                18.2G     58.2M     17.2G   0% /mnt/sda1
cgroup                  499.8M         0    499.8M   0% /sys/fs/cgroup
/dev/sda1                18.2G     58.2M     17.2G   0%
/mnt/sda1/var/lib/docker/aufs

「外部の」SSH タイプを使う場合の詳細については、次のセクションで説明します。 ssh バイナリを実行するコマンドには( Docker Machine によって作成されるコマンドと衝突しない限り)追加オプションを設定できます。例えば、次のコマンドは default マシンから自分のホスト・コンピュータ上の localhost に対して、ポート 8080 に転送するコマンドです。

$ docker-machine ssh default -L 8080:localhost:8080

異なったタイプの SSH

Docker Machine が呼び出される時、伝統的な ssh バイナリがローカルにあるかどうか確認し、SSH コマンドを使う必要があれば、これを使おうとします。使う場面とは、create 時のような内部処理か、利用者が必要な時に明示するかどうかに拘わりません。外部の ssh バイナリがローカルに存在しなければ、Go 言語内蔵の crypto/ssh を使おうとします。これは伝統的な UNIX ツールが利用できない環境で便利になるでしょう。例えば、Windows 上で Docker Machine を 使う時に、 msysgit がインストールされていなくても使えます。

多くの場合、実装の詳細について考慮する必要はありません。Docker Machine は難しい設定をしなくても利用できます。しかし、Go ネイティブ・バージョンを敢えて使おうとする場合は、グローバルなコマンドライン上のフラグ、または、環境変数の指定が必要です。

$ docker-machine --native-ssh ssh dev

2つの手法は様々なパターンを伴いますので、何らかの問題や一貫性が無い場合があれば、ご報告ください。