Mac OS X

注釈

今回の Docker のリリース(1.9)から、Boot2Docker コマンドライン・ツールに換わり、Docker Toolbox (ツールボックス)が採用されています。Docker Toolbox を使い、Docker Machine のような Docker ツールをインストールします。

Docker を Docker Toolbox を使いインストールします。Docker Toolbox には次の Docker ツールが含まれます。

  • Docker Machine を動かす docker-machne バイナリ
  • Docker エンジンを動かす docker バイナリ
  • Docker Compose を動かす docker-compose バイナリ
  • Docker GUI の Kitematic (カイトマティック)
  • Oracle VM VirtualBox(バーチャルボックス)

Docker デーモンは Linux 固有の kernel 機能を使う為、OS X 上で Docker をネイティブに実行できません。そのかわり docker-machine を使い、仮想マシン(VM)の作成と接続が可能です。このマシンは Linuxの仮想マシンであり、自分の Mac 上の Docker ホストとなります。

動作条件

Docker Toolbox を Mac にインストールするには、 OS X 10.8 “Mountain Lion” 以上が必要です。

インストール前に重要な概念を学ぶ

Linux 上への Docker のインストールにおいて、自分の物理マシンとはローカルホストと Docker ホストの両方を意味します。ネットワークでは、ローカルホストは自分のコンピュータを意味します。Docker ホストはコンテナを実行するためのコンピュータです。

典型的な Linux インストールは、自分のローカルホスト上で直接 Docker クライアント、Docker デーモン、そして、あらゆるコンテナを動かします。つまり、Docker コンテナは localhost:80000.0.0.0:8376 のような一般的なポートを割り当てて使います。

Linux アーキテクチャ図

OS X でのインストールは、 default という名前の Linux 仮想マシン内で docker デーモンを実行します。 default とは軽量な Linux 仮想マシンであり、とりわけ Mac OS X 上で Docker デーモンを実行するために作られました。仮想マシンは RAM から実行され、24MB 程度をダウンロードし、起動まで約5秒です。

OS X でのアーキテクチャ図

OS X では、Docker ホストのアドレスは Linux VM のアドレスです。仮想マシンを docker-machine で開始すると、IP アドレスが割り当てられます。コンテナを起動すると、コンテナ上のポートは仮想マシン上のポートに割り当てられます。このページの練習を通して、この仕組みに慣れましょう。

インストール

VirtualBox を実行中の場合、インストーラを実行する前に停止する必要があります。

  1. Docker Toolbox のページに移動します。
  1. インストーラのリンクをクリックします。
  1. Docker Toolbox をインストールするために、パッケージをダブルクリックするか、右クリックして出てくるポップアップ・メニューから「開く」を選びます。

インストーラーは「Docker Toolbox のインストール」ダイアログを開きます。

Docker Toolbox のインストール
  1. 「続ける」を押して Toolbox をインストールします。

インストーラは標準インストールに対するカスタマイズ用オプションを提供しています。

カスタマイズ画面

デフォルトは、標準 Docker Toolbox の標準インストールです。

  • Docker ツールのバイナリを /usr/local/bin にインストールします。
  • バイナリを全てのユーザが使えるようにします。
  • VirtualBox をインストールします。あるいは、インストール済みであればバージョンアップを行います。

変更したい場合は「カスタマイズ」や「インストール先を変更」します。

  1. 「インストール」を押すと、標準インストールが始まります。

システム・プロンプトがパスワード入力を促します。

パスワード・プロンプト画面
  1. インストールを続けるには、パスワードを入力します。

完了すると、インストーラーは一般的な作業に関する表示を行います。

すべて完了です。
  1. 「閉じる」をクリックすると終了します。

Docker コンテナの実行

Docker コンテナを実行するには、次のようにします。

  • 新しい Docker 仮想マシンを作成(あるいは、既存のものを開始)
  • 環境を新しい仮想マシンに切り替え
  • docker クライアントを使ってコンテナの作成・読み込み・管理

マシンを作成してしまえば、好きなときに再利用できます。VirtualBox の仮想マシンのように、用途に応じた設定で使い分けます。

インストールしたツールを使うには2つの方法があります。Docker Quickstart Terminal (クイックスタート・ターミナル)を使うか、 シェル で操作します。

Docker Quickstart Terminal から使う

  1. 「アプリケーション」フォルダから「Lanchpad」を開きます。
  1. Docker Quickstart Terminal を探し、クリックして起動します。

アプリケーションは次の動作をします:

  • ターミナル用のウインドウを開く
  • default 仮想マシンが無ければ作成し、仮想マシンを起動
  • ターミナルの環境がこの仮想マシンを示す

起動が完了すると、Docker Quickstart Terminal は次のように表示します。

すべて完了です。

これで docker コマンドが実行できます。

  1. セットアップの成功を確認するため、 hello-world コンテナを実行します。
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
511136ea3c5a: Pull complete
31cbccb51277: Pull complete
e45a5af57b00: Pull complete
hello-world:latest: The image you are pulling has been verified.
Important: image verification is a tech preview feature and should not be
relied on to provide security.
Status: Downloaded newer image for hello-world:latest
Hello from Docker.
This message shows that your installation appears to be working correctly.

このメッセージ表示にあたり、Docker は次のステップを踏んでいます。

  1. Docker クライアントは Docker デーモンに接続します。
  1. Docker デーモンは「hello-world」イメージを Docker Hub から取得します(まだローカルにイメージがないのを想定しています)。
  1. そのイメージを使い、Docker デーモンは新しいコンテナを作成します。コンテナを実行すると、先ほど見たような出力をします。
  1. Docker デーモンは Docker クライアントに出力を流し込み、自分のターミナル上に送ります。

では、期待を持ちながら Ubuntu コンテナを実行しましょう。

$ docker run -it ubuntu bash

更なる例や考え方については、 ユーザガイド をご覧ください。

もう1つの典型的な Docker ツールを使う方法が、通常のシェル・コマンドラインからです。

シェルから使う

このセクションでは、Bash シェルの実行を想定しています。C シェルのような別のシェルでも、コマンドは同じです。

  1. 新しい Docker 仮想マシンを作成します。
$ docker-machine create --driver virtualbox default
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: docker-machine env default

ここでは VirtualBox に新しい default 仮想マシンを作成します。

また、このコマンドはマシンの設定を ~/.docker/machine/machines/default ディレクトリに作成します。必要なのは、実行時に create コマンドを一度実行するだけです。あとは、 docker-machine を使って開始、停止、問い合わせできます。それだけでなく、コマンドライン上から仮想マシンを管理します。

  1. 利用可能なマシン一覧を表示します。
$ docker-machine ls
NAME                ACTIVE   DRIVER       STATE     URL                         SWARM
default             *        virtualbox   Running   tcp://192.168.99.101:2376

廃止予定の Boot2Docker アプリケーションをインストールしているか、あるいは Docker Quickstart Terminal を実行している場合は dev 仮想マシンが同様に表示されます。 default 仮想マシンを作成したら、 docker-machine コマンドを通して仮想マシンへの接続方法を確認します。

  1. 新しい仮想マシンに対応する環境変数を取得します。
$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.101:2376"
export DOCKER_CERT_PATH="/Users/mary/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval "$(docker-machine env default)"
  1. シェルから default マシンに接続します。
$ eval "$(docker-machine env default)"
  1. hello-world コンテナを実行し、セットアップが正常かどうか確認します。
$ docker run hello-world

Toolbox のインストールを学ぶ

Toolbox は Docker エンジンのバイナリをシステム上にインストールします。Docker Quickstart Terminal を使うか、 default 仮想マシンを(Docker Machine で)手動で作成すると、Docker Machine はシステム上の ~/.docker/machine/machines/default ディレクトリを更新します。このディレクトリに、仮想マシンに関する設定が置かれます。

Docker Machine を使い、システム上に複数の仮想マシンを作成できます。つまり、いくつも仮想マシンを作成すると、複数の仮想マシン用のディレクトリが作られます。仮想マシンを削除するには、 docker-machine rm <マシン名> コマンドを使います。

Boot2Docker からの移行

これまで Boot2Docker を使っていた場合は、既に Dockerの boot2docker-vm 仮想マシンがローカルシステム上に存在しています。Docker Machine で古い仮想マシンを管理する場合は、移行が必要です。

  1. ターミナルか、システム上の Docker CLI を開きます。
  2. 次のコマンドを実行します。
$ docker-machine create -d virtualbox --virtualbox-import-boot2docker-vm boot2docker-vm docker-vm
  1. docker-machine コマンドを使い、対話式に仮想マシンを移行します。

docker-machine サブコマンドは、boot2docker サブコマンドと若干の違いがあります。次の表は docker-machine サブコマンドとの互換性を比較したものです。

boot2docker docker-machine docker-machine の説明
init create 新しい docker ホストの作成
up start 停止しているマシンの起動
ssh ssh コマンドの実行やマシンとの双方向 ssh セッション
save 利用不可
down stop 実行中のマシンの停止
poweroff stop 実行中のマシンの停止
reset restart 実行中のマシンの再起動
config inspect マシン設定詳細の表示
status ls マシン一覧と状態の表示
info inspect マシンの詳細を表示
ip ip マシンの IP アドレスを表示
shellinit env シェルがマシンと対話するために必要なコマンドの表示
delete rm マシンの削除
download 利用不可
upgrade uppgrade マシン上の Docker クライアントを最新安定版に更新

Mac OS X の Docker 実行例

このセクションを通して、仮想マシン上に実践的なコンテナ・タスクに挑戦しましょう。この時点では、仮想マシンが実行中であり、シェル上から接続している状態でしょう。確認するには、次のコマンドを実行します。

$ docker-machine ls
NAME                ACTIVE   DRIVER       STATE     URL                         SWARM
default             *        virtualbox   Running   tcp://192.168.99.100:2376

ACTIVE なマシン、この例では default に対する環境変数が指定されています。

コンテナのポートに接続

  1. DOCKER_HOST 上で NGINX コンテナを開始します。
$ docker run -d -P --name web nginx

通常の docker run コマンドは、コンテナを起動し、実行して、終了します。 -d フラグは docker run コマンドを実行したあとも、バックグラウンドでコンテナを実行し続けます。 -P フラグはコンテナ内の露出用ポートをローカルのホスト上に公開します。つまり、自分の Mac からアクセスできるようにします。

  1. 実行中のコンテナを docker ps コマンドで表示します。
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                                           NAMES
5fb65ff765e9        nginx:latest        "nginx -g 'daemon of   3 minutes ago       Up 3 minutes        0.0.0.0:49156->443/tcp, 0.0.0.0:49157->80/tcp   web

今まさに nginx がデーモンとして実行中なのが分かります。

  1. コンテナのポートを表示します。
$ docker port web
443/tcp -> 0.0.0.0:49156
80/tcp -> 0.0.0.0:49157

この表示の意味は、 web コンテナのポート 80 番を Docker ホスト側のポート 49157 に割り当てています。

  1. ブラウザで http://localhost:49157 アドレス( localhost0.0.0.0 )を開きます。
エラー画面

これは動作しません。理由は、 DOCKER_HOST のアドレスはローカルホストのアドレス(0.0.0.0)ではないためです。そのかわり Docker 仮想マシンのアドレスを使います。

  1. default VM のアドレスを取得します。
$ docker-machine ip default
192.168.59.103
  1. ブラウザのアドレスに http://192.168.59.103:49157 を入力します。
正しいアドレス

成功です!

  1. 実行している nginx コンテナを停止・削除するには、次のように実行します。
$ docker stop web
$ docker rm web

コンテナにボリュームをマウント

コンテナを実行すると、自動的に /Users/ユーザ名 ディレクトリを仮想マシンと共有します。この共有ポイントを使い、コンテナの中にディレクトリとしてマウントできます。以下の例では、実際に動くのを確認します。

  1. $HOME ディレクトリに移動します。
$ cd $HOME
  1. 新しく site ディレクトリを作成します。
$ mkdir site
  1. site ディレクトリに移動します。
$ cd site
  1. 新しく index.html ファイルを作成します。
$ echo "my new site" > index.html
  1. 新しく nginx コンテナを開始し、 html ディレクトリを site ディレクトリに置き換えます。
$ docker run -d -P -v $HOME/site:/usr/share/nginx/html \
  --name mysite nginx
  1. mysite コンテナのポートを取得します。
$ docker port mysite
80/tcp -> 0.0.0.0:49166
443/tcp -> 0.0.0.0:49165
  1. サイトをブラウザで開きます。
../../_images/newsite_view.png
  1. $HOME/site ディレクトリに新しいページをリアルタイムに追加します。
$ echo "This is cool" > cool.html
  1. 新しいページをブラウザで開きます。
../../_images/cool_view.png
  1. 実行している mysite コンテナを停止・削除します。
$ docker stop mysite
$ docker rm mysite

Docker Toolbox のアップグレード

Docker Toolbox をアップグレードするには、 Docker Toolbox インストーラ をダウンロードし、再度実行します。

Docker Toolbox のアンインストール

アンインストールは次のように行います。

  1. マシン一覧を表示ます。
$ docker-machine ls
NAME                ACTIVE   DRIVER       STATE     URL                         SWARM
dev                 *        virtualbox   Running   tcp://192.168.99.100:2376
my-docker-machine            virtualbox   Stopped
default                      virtualbox   Stopped
  1. 各マシンを削除します。
$ docker-machine rm dev
Successfully removed dev

マシンの削除とは、VirtualBox から自身の仮想マシンを削除し、 ~/.docker/machine/machines からも削除します。

  1. Docker Quickstart Terminal と Kitematic を「アプリケーション」フォルダから削除します。
  1. /usr/local/bin ディレクトリから dockerdocker-composedocker-machine を削除します。
$ rm /usr/local/bin/docker
  1. システム上の ~/.docker ディレクトリを削除します。

更に詳しく

docker-machine help を実行すると、Docker Machine の全てのコマンド一覧を表示します。SSH や SCP で仮想マシンにアクセスするなど詳細な情報は、 Docker Machine ドキュメント をご覧ください。

Docker ユーザガイド を読み続けられます。 Kitematic GUI の使用に興味があれば、 Kitematic ユーザガイド をご覧ください。