WindowsでDocker(Docker for Windows)
かつて、Windowsマシン上でDockerを使用するには、
Vagrant、VirtualBox、DockerをプロキシするLinux(coreos など)を 自力で組み合わせて環境構築する必要がありました。
「Docker for Windows Installer」(Docker公式)を使うと、それだけでDockerが利用できるようになった模様です。
メンバーに同じテスト環境を配布できたらうれしいので、ちょっとやってみます。
「Docker for Windows Installer」 インストール
- Docker公式サイトで配布されている 「Docker for Windows Installer」 をつかってインストールする。
最新版にたどり着くためには 「Windows用インストーラの説明サイト」 から”Docker for Windows Installer”のリンクをたどってインストーラを探すのがよいかと思う。 - インストーラ
docker-install.exe
を実行して、インストールウィザードに従うと、 「Boot2Docker For Windows本体」「VirtualBox」「MYSYS-git」 がセットでインストールされる。
「VirtualBox」「MYSYS-git」がすでにインストール済の場合は、 インストールしなおすかそのまま使うか選択できる。 - インストールが完了すると、 「Boot2Docker Start」というショートカットがデスクトップにできる。
boot2docker 最新化
Windowsのコマンドとして、以下を実行。 (コマンドプロンプトやPowerShellのプロンプトで実行)
boot2docker download
boot2docker の開発は活発で、はまだまだ頻繁にアップデートされそう。たまにったほうがよさそう。
ちなみに、 boot2docker
コマンドは、「Docker for Windows Installer」 によって、Windowsの環境変数にパスが通る。
Dockrのホスト役のVM作成・起動・停止
Dockrのホスト役のVM boot2docker-vm を作成する
C:\hoge > boot2docker init
VMのディスクサイズを指定したければ以下 (単位はMB。あまり巨大なサイズを指定すると時間がかかる傾向にある)
C:\hoge > boot2docker init --disksize=100000
init
により、Virtualbox にVMが作成される。
boot2docker-vm を起動する
boot2docker start
(20015-03-28 時点 C:\Users
が VM上の /c/Users/
としてアクセスできるように共有設定されていた)
boot2docker-vm を停止する
boot2docker stop
boot2docker-vm を削除するする
作った boot2docker-vm
を作り直したかったら以下を実行。
boot2docker delete
Boot2Dockerで使用するターミナルについて
boot2docker を使用するにあたっては、「Windows のコマンド」、 「ssh コマンドで Linux VM に接続」 「Linux ターミナル内で、linux のコマンド操作」と 色々なコマンド操作が必要になる。
私は、「GitHubForWindows のシェル」だけで、全部操作してしまうのをお奨めする。
(別途 GitHubForWindows をインストールする必要あり)
以下、使えそうなターミナルの特徴をいくつかご紹介する。
-
GitHubForWindows のシェル (PowerShellのターミナルベース)
- 「windows コマンド」・・・ 可
- ssh接続 ・・・ 可
boot2docker ssh
とするとssh接続できる。- ssh接続してしまえば、linux コマンドが普通に操作できる
-
コマンドプロンプト
- 「windows コマンド」・・・ 可
- ssh接続 ・・・ 不可
-
MYSIS GIT Bash
- 「windows コマンド」・・・ 一部可。 (boot2docker コマンドは使用できる)
- ssh接続 ・・・ 可
boot2docker ssh
とするとssh接続できる。- ssh接続してしまえば、linux コマンドが普通に操作できる
-
ターミナルソフト (“teraterm”、”putty” など)
- 「windows コマンド」・・・ 不可
- ssh接続 ・・・ 可
%USERPROFILE%\.ssh\id_boot2docker
にboot2docker用の秘密鍵が 作成されているので、これを使ってSSH接続する。- IPアドレスは
boot2docker ip
で調べられる。 - linuxターミナルに限った使い勝手としては、一番良いと思われる。
-
Boot2Docker Start (boot2dockerをインストールするとデスクトップにできるショートカットから起動)
- 「windows コマンド」・・・ 不可
- ssh接続 ・・・ 可
起動すると、ssh接続した状態になる。このターミナルからは、boot2docker-vm
を停止させられない。 いけてない。
Dockeコンテナ動作確認
GitHubForWindows のシェルを使用するのを前提に以下説明します。 別のターミナルを使う場合は適当に読み替えてください。
Docker が用意しているサンプルイメージ hello-world
を使って動作確認。
C:\hoge > boot2docker ssh $ 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 n ot be relied on to provide security. Status: Downloaded newer image for hello-world:latest Hello from Docker. This message shows that ... 以降省略 ...
問題なければ上ようにdockerのimageがダウンロードされて動作し、 Hello from Docker.
が表示されるはず。
Docker Compose について
複数の DockerコンテナをYAMLファイルで管理するツール。 (Docker Compose は fig の後継)
2015-03-28 時点では、boot2docker-vm
上で動かすことができない。
使用したい場合は、別途 Linux VM を立てて、 Docker Composeをインストールする必要があると Docker の issue 管理の回答では述べられている。 VM boot2docker-vm
に色々ライブラリをインストールしてやると、動かせるかもしれないが不明。 (Docker Compose は fig の後継) 今後に期待。
関連URL
- Docker Compose — http://docs.docker.com/compose/
- Fig — http://www.fig.sh/
- 動かないことを説明している issue
- https://github.com/docker/compose/issues/1032
- https://github.com/docker/compose/issues/599
- 「Windows で動かしたいね」という issue
- https://github.com/docker/compose/issues/1085
感想
- 同じ環境を何度も簡単に作り直せそう。
- Doker hub には、Docker公式のイメージもたくさんあり、使えそう。
Docker Compose
が現時点使えないので、 複数サーバを組み合わせた環境を作るには面倒。意図通りのテスト環境を配布するのは少し苦労しそう。
(Vagrant の Provider を利用して dockerコンテナを作る方法も検討したい。)
おしい。
特記事項: プロキシ
プロキシが必要な環境では、 docerコンテナがインタネットアクセスする際に失敗してまう。 以下対応策。
- boot2docker-vm にsshログインして作業する。
$ sudo vi /var/lib/boot2docker/profile
- 設定する内容
export HTTP_PROXY=http://your.proxy.url:8080 export HTTPS_PROXY=http://your.proxy.url:8080
http://your.proxy.url:8080
部分はご自分の環境の値に設定してください。
- 設定後、Dockerコンテナを再起動
$ sudo /etc/init.d/docker stop $ sudo /etc/init.d/docker start
- 参考
/etc/init.d/docker
スクリプト内で、/var/lib/boot2docker/profile
を実行するようになっている。
このため、これで解決できるのは、docker コンテナからのアクセスだけ。 VMboot2docker-vm
から直接、インターネットアクセスするには、 いちいち環境変数設定したり、プロキシーのパラメータを設定しないと解決しない。