こんにちはDocker for Mac

blog.docker.com

どういう記事なの

内容

Docker社から3/24にDocker for Mac及びDocker for Windowsの2つのベータ版が発表されました。
この発表について知識の確認も兼ねてざっと書こうと思います。
テクい話はあんまりありません。

対象読者

  • Macユーザー
  • dockerあんまりわかんないっていう人

いいわけ

  • 記事執筆時点で私はまだDocker for Macを実際に触ったことがありません
    • 申し込んだけど申込 = 順番待ちリストへの追加なので、その後順次使えるようになるみたいです
  • まだdockerについての理解が浅いため、誤りがありましたら指摘してくださると嬉しいです

ざっくり基礎知識

Dockerとは

Dockerは仮想化技術の1つです。詳細についてはググってください。
もう2016年なのでいろいろ記事があります。

MacでDockerを扱うために必要なこと

Docker imageはLinux上でしかコンテナとして使うことができません。
Macで使うのは諦めてください……とはさすがになりません。
Macで使うときにはLinux層を仮想環境でつくって、その上でコンテナを載せています。

このLinux層を管理するために Docker Machine(docker-machine) というツールがあります。

container1 | contaienr 2...
--------------------------
  Linux(docker-machine)
--------------------------
         OS X

docker-machineがあるおかげで「sshしたLinuxサーバの中でdockerコマンドを打つ」という面倒なことをせず、「OSXのターミナル上でdockerコマンドを打つ」ということができています。

Docker for Mac

Docker for Macとはなんなのか

Docker for MacMacでDockerを扱う際に必要であったDocker Machineの諸課題を解決するためのものです。

docker-machine + Macでの課題

話はいったんもどりまして、先ほど紹介したdocker-machine + Macの組み合わせには実は以下のような課題がありました。

  • docker-machineで使うのでVirtualBoxが必要
  • containerを実行しているのはあくまでLinux側なのでOSX上のリソースに対する権限まわりでトラブルが起こりがち
  • containerはLinuxとの接続はうまくできるがOSXまで接続してくれはしないので、LinuxVMのIPを調べるとかの作業が発生して面倒

どう解決したのか

上述の課題は全てVirtualBoxに起因するものです。
Docker for MacではVirtualBoxではなくxhyveをバックエンドに据えることでこれらの課題を解決しました。
xhyveを使うことでOSX上でVMが動くのではなく、OSXと並列でLinuxが動くようになるはずです(ここ理解あやしいんで間違ってたらすみません……)。そのためOSレベルでの連携が行えるようになり、利便性が向上しています。
図にするとこんな感じになるはずです。

          | container1 | contaienr 2...
----------------------------------------
  OS X    |  Linux(docker-machine)
----------------------------------------

公式のブログではDocker for Macの特徴としては以下のようなものをあげています。

  • VirtualBoxが不要になりました
  • コンテナへのボリュームのマウントがきちんと機能するようになりました
    • ファイルの変更通知(inotify)も動きます
  • ネイティブアプリケーションで自動アップデートするようになりました
    • これには他のDockerツールも含みます
  • DNSサーバを含んでおりLinux層に対して docker.local のようなホスト名でアクセスできるようになりました

docker-machineを操作するのめんどいなーと思っていたんですけどそういうところが解消されそうなのでDocker for Macにはかなーり期待しています。


3/26 12時28分 追記

twitterで指摘を頂いたので訂正します。 「さよならdocker-machine」っていうとDocker for MacがDocker Machineの完全な代替であるかのように見えますがそうではありません。
私はDocker MachineのバックエンドはVirtualBoxのみにして使っていますが、実はDigitalOceanなどを利用することができます。
その場合は新しくインスタンスを作ってくれるんですね。これは普段使ってないので完全に忘れてました。

そしてこれは知らなかったんですけど、プラグインでバックエンドは拡張できるみたいです。
ConoHaやさくらインターネットのもあるとのこと。
ご指摘いただいた @yamamoto_febc さんのさくらインターネットでの例を紹介して頂いたので掲載します。

qiita.com