docker というと Linux の世界の出来事のようなイメージがありますが、Windows でも boot2docker というソフトをインストールする事で docker の世界を体験することが出来ます。そんな docker の面白い世界の入り口を紹介して行きたいと思います。
インストール編
- 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 になっているケースがあります。 - Git for Windows https://msysgit.github.io/ のインストール
cygwin をインストールし既に Windows を Linux 風サーバーとして使っている方もそのまま msysgit を追加でインストール可能です。ここまでの2つはboot2dockerに必要なソフトですが、単独でそれぞれの用途に使えるものですので、事前にインストールして簡単な操作には慣れておくことが望ましいです。 - 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 ライフを満喫してください!!!