インフィニットループ 技術ブログ

2015年06月23日 (火)

著者 : nob

boot2docker を使って Windows で docker を体験する

docker というと Linux の世界の出来事のようなイメージがありますが、Windows でも boot2docker というソフトをインストールする事で docker の世界を体験することが出来ます。そんな docker の面白い世界の入り口を紹介して行きたいと思います。

インストール編

  1. VirutalBox インストール
    64ビットの VirutalBox を Windows にインストールします。VT-x が使えるプロセッサで 64 ビット Windows のマシンが必要です。 今となっては敷居高くないと思いますが、持ってない人はごめんなさい。ノートPCで Windoes 8 64bit を使っているのに VirtualBox で仮想サーバー作ったら 32 bit のサーバーしか作れない!という方は BIOS 設定の方をご確認してみてください。エントリーレベルのノートPCですと、たまに AMD の SVM (AMD-V) や Intel の VT-x が BIOS で OFF になっているケースがあります。
  2. Git for Windows https://msysgit.github.io/ のインストール
    cygwin をインストールし既に Windows を Linux 風サーバーとして使っている方もそのまま msysgit を追加でインストール可能です。ここまでの2つはboot2dockerに必要なソフトですが、単独でそれぞれの用途に使えるものですので、事前にインストールして簡単な操作には慣れておくことが望ましいです。
  3. boot2docker http://boot2docker.io/ インストール
    サイトからダウンロードしてインストールし、最初に boot2dockerのアイコンをクリックします。すると VirtualBox のゲストである docker ホストマシンに ssh で入ることになります。この画面が出れば完了です。
                            ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.5.0, build master : a66bce5 - Tue Feb 10 23:31:27 UTC 2015
Docker version 1.5.0, build a8a31ef
docker@boot2docker:~$


 

docker というかコンテナって何?

古い仮想化方式でOS仮想化という方式があります。動いているOSのカーネルは実は1個で、ユーザーのプロセス空間を隔離して、まるでそれぞれ別のマシンで動いているように見せる方式です。ハードウェアをエミュレートしている完全仮想化と違ってエミュレーションの層が薄いため効率的で、OpenVZ などが有名でレンサバやVPSなどで最近まで使われていましたが、昨年までのここ数年は地味な扱いでした。
dockerやコンテナ技術というのは、このOS仮想化を使って、コマンド(プログラム)毎に別仮想マシンで動かしてしまおうというものです。スケールさせたり、出来るだけイメージ化したり、使い棄てたり、といったクラウドの使い方にあっています。

boot2docker って docker と違うの?

docker はコンテナを動かすソフトですが、Linuxカーネルの最新のものが必要です。Windowsで動かすにはVirutalBox で仮想サーバーを作って、そこに最新の Linux を入れて、docker のパッケージを入れて、あれしてこれして、となります。それを一気にやってくれるのが boot2docker です。
VirtualBox の仮想サーバーとして Tiny Core Linux ベースの docker 環境を整えたものを入れてくれます。

使い方

dockerホストであるVirtualBox仮想サーバーへのアクセス方法3種

  • boot2dockerアイコンクリックで仮想サーバーが起動されていなかったら起動しsshしてくれます
  • Git Bash 上で boot2docker.exe ssh で仮想サーバーに ssh してくれます
  • putty など ssh クライアントから ssh -p 2022 docker@localhost で Windows のローカルポート 2022 に向かって ssh することでログインできます。デフォルトパスワードは tcuser です。

基本的な使い方

  • docker run イメージ 実行コマンド でイメージを起動して指定したコマンドを実行するというのが基本的な使い方です。

イメージ作らないと何も出来ないの?

イメージが無いと何も動きませんが、docker 公式の Docker Hub https://registry.hub.docker.com/ に公式イメージが大量にそろっているので困ることはありません。
最初は自動的にダウンロードしてきて、次からはローカルにあるものを使ってくれます。また自前で Docker Hub 同様の registry を立ち上げることが出来ますので、公式イメージをベースに自分のイメージを作成して、自分で自分に配布、というのが docker の本流な使い方になります。

各種公式イメージを試してみよう

何も設定していなくても Docker Hub から取ってきますので、イメージ名だけ指定すれば各種イメージを試すことが出来ます。

hello-world

dockerテスト用のコマンドが何も無い超軽量イメージです

docker@boot2docker:~$ docker run hello-world
Hello from Docker.
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (Assuming it was not already locally available.)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
For more examples and ideas, visit:
 http://docs.docker.com/userguide/

何もなさすぎてコンテナの中身も見れないので面白くないので次

busybox

軽量 Linux で使われている /bin の各種コマンドを1個にまとめたものが busybox で、それだけが動くコンテナです

    • hostname 実行
docker@boot2docker:~$ docker run busybox hostname
5ea404b30cb0
    • os-release 見てみよう
docker@boot2docker:~$ docker run busybox cat /etc/os-release
NAME=Buildroot
VERSION=2014.02
ID=buildroot
VERSION_ID=2014.02
PRETTY_NAME="Buildroot 2014.02"

shell はじめ各種 Linux コマンドは使えますが、やっぱりそれだけなので実用性ないです。次いきましょう

Alpine Linux

knoppix や Puppy Linux に似た構造のサーバー用軽量Linuxで、構成的には Arch Linux に似ています。glibc ではなく musl libc を使っているのが特徴で、バイナリの互換性が無い分、サーバー向けの主要な最新パッケージはディストリビューションがそろえてくれているのでコンテナ向けとして便利です。

docker@boot2docker:~$ docker run alpine cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.1.2
PRETTY_NAME="Alpine Linux v3.1"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"

コマンド1発実行だと楽しくないのでコンテナの中に -i で対話的に入ってみます。
プロンプトが無いのでめんくらいますが、一応対話でシェル操作できます。

docker@boot2docker:~$ docker run -i alpine sh
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
pwd
/
df -h
Filesystem                Size      Used Available Use% Mounted on
none                     18.2G    295.1M     16.9G   2% /
tmpfs                  1004.2M         0   1004.2M   0% /dev
shm                      64.0M         0     64.0M   0% /dev/shm
/dev/sda1                18.2G    295.1M     16.9G   2% /etc/resolv.conf
/dev/sda1                18.2G    295.1M     16.9G   2% /etc/hostname
/dev/sda1                18.2G    295.1M     16.9G   2% /etc/hosts
tmpfs                  1004.2M         0   1004.2M   0% /proc/kcore
date
Wed Mar 18 10:26:51 UTC 2015

イメージを試すのはこれくらいにして

恒久データはどう保管すれば

docker のゲストマシンは使い捨てでファイルは全て消失します。docker ホストのディレクトリをマウントしてゲストデータの恒久保管を行うのが docker の使い方です。ところが boot2docker の場合は docker ホスト自体(ホスト名 boot2docker)が Tiny Core ベースのデータは保存しないライブCD方式の軽量 Linux です。
データを保管するには VirutalBox 自体のホストである Windows のディレクトリを Tiny Core ベースの boot2docker から使う必要がありますが、これは最初から用意されています。/c/Users です。

docker@boot2docker:~$ cd /c/Users/
docker@boot2docker:/c/Users$ ls
All Users     Default/      Default User  Public/       desktop.ini   anata-no-onamae/

これで boot2docker 上で Windows のディレクトリにアクセスしていますので、docker ホスト上でデータを格納する目処が立ちました。
今回のお話はここまでです。皆さんも是非 Windows で docker ライフを満喫してください!!!

ブログ記事検索

このブログについて

このブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。 お仕事で使えるITネタを社員たちが発信します!