connpass
http://8a1-apc.connpass.com/event/12381/
場所は神田の株式会社エーピーコミュニケーションズ ECHOオフィスです。
参加者は20人くらいでしょうか。
さすが流行りネタということで、補欠待ちの方もかなりいらっしゃったようです。
ちなみに私、この日が初Dockerです。
見せてもらおうか、Dockerのコンテナ型仮想化技術の性能とやらを!
■ Docker技術概要/導入事例
APCの重役?嘉門さんによる、Dockerの技術概要/導入事例の説明から開始です。
Dockerの特徴をいくつか挙げてみる。
- Linux上で動作するコンテナ型の仮想化ソフトウェアである。
- 基本的な機能は、Linuxが元々持っている機能を利用して実現している。
- ゲストOSやハイパーバイザーは不要。
- ゲストOSが不要のため、起動は1秒くらいで軽い。メモリもディスクも、コンテナで使う分だけで良い。
- Docker Hubという公式のDockerリポジトリがあり、OSなどの共有イメージが公開されている。
んで、この日の後半はハンズオンでした。スライドはP.74から。
いちおう時間内に概ねハンズオンの内容はこなせました。
ただ、理解が曖昧な部分が多々あったので、自宅で再度、ハンズオンの内容を復習してみることにした。
■ Linux環境の構築
Windows7(x64)にVMWare Playerで起動できるUbuntu 12.04(LTS)環境は前々から使ってました。
なので、この環境にDockerをインストールしようと思ったんですが、カーネルバージョンが古くて上手く行きませんでした。
なので、VMWware Playerを使ってUbuntu 14.04(LTS)をインストールしました。
ちなみにUbuntuのイメージはここから入手。
次に、カーネルのバージョンを3.13から3.16にアップデートしました。
カーネルのアップデートはコチラのサイトが参考になりました。
■ Dockerのインストール
Ubuntu14.04(LTS)へのDockerのインストール方法は、公式サイトにそのまんま書いてあります。(英語だけど)
https://docs.docker.com/installation/ubuntulinux/#ubuntu-trusty-1404-lts-64-bit
ここに書いてあるコマンドをそのまま実行するだけですんなりインストールできました。
私がインストールしたDockerのバージョンは以下です。

以下、スライドのレッスン順に再現してみる。
■ 【レッスン1】 dockerのイメージを入手、そして確認。 (スライド P.78)
docker pull コマンドで、DockerレジストリからDockerイメージのダウンロードします。

今回は CentOS 6 のイメージを入手しました。
次に docker image コマンドでdockerのイメージを一覧表示してみます。

CentOS 6のイメージは、IMAGE IDが f6808a3e4d9e と表示されてます。
■ 【レッスン2】 コンテナの起動。 (スライド P.80)
docker run コマンドで、イメージからコンテナを起動します。実行プロセスとして /bin/bash を指定してます。

ユーザが makopi から root に切り変わって、コンテナの中に入ったことが確認できます。
ps -aux コマンドで、 /bin/bash が起動しているのも確認できました。
■ 【レッスン3】 dockerプロセスの確認。 (スライド P.81)
別ターミナルから docker ps コマンドを実行します。

CentOSのコンテナがひとつ立ち上がっているのが確認できました。
次に【レッスン4】で exit コマンドを実行し、コンテナからいったん出ます。
■ 【レッスン5】 落ちたコンテナを確認⇒立ち上げてみます。 (スライド P.83)
docker start コマンドを実行して、さっき落としたコンテナを叩き起こす。

docker ps コマンドを実行し、ちゃんと生き返っていることが確認できました。

■ 【レッスン6】 もう一回、コンテナに入ってみます(docker-enter)。 (スライド P.84)
docker-enter コマンドはデフォルトではインストールされていません・・・
そのため、nsenter というツールを自分でインストールする必要があります。
インストール方法はコチラを参考にしました。

無事、docker-enter コマンドでコンテナに入ることができました。
次に、コンテナ内で yum コマンドを実行して、telnet をインストールしてみます。

ちゃんと telnet をインストールすることができました。
■ 【レッスン7】 コミットしてイメージを保存します。 (スライド P.85)
docker commit コマンドで、コンテナからイメージを作成・保存します。

yourname/test1 というイメージができ、保存しました。
■ 【レッスン8】 イメージを捨ててみます。 (スライド P.87)
docker rmi コマンドで、【レッスン7】で作成したイメージを削除してみる。

docker images コマンドで、ちゃんとイメージが消えていることが確認できました。
■ 【レッスン9】 ホストのIPアドレスとかを確認してみます。 (スライド P.88)
ip a コマンドを実行する。

スライドによると docker0とveth は同じmacアドレスになるはずなのだが、なぜかなっていない・・・
・docker0のMACアドレス ⇒ 56:84:7a:fe:97:99
・veth1753bd のMACアドレス ⇒ 7a:5f:db:c2:63:48
■ 【レッスン10】 ホスト側のネットワーク情報とかを確認してみます。 (スライド P.89)
brctl コマンドはデフォルトで入っていないので、bridge-utilsというツールをインストールする必要がある。

brctl は、ブリッジに関するコマンドのようです。
brctl show コマンドで、仮想ブリッジに紐付いているのは先程のveth=docker0であることが確認できました。
次に iptables-save コマンドを実行してみますが、なぜか何も表示されない・・・

どーゆうことなの・・・
■ 【レッスン11】 コンテナのIPアドレスとかを確認してみます。 (スライド P.90)
さっき使った docker-enter コマンドで再度コンテナに入り、コンテナの中から ip a コマンドを叩きます。

確認したIPアドレスに対してpingを飛ばすことができました。
■ 【レッスン12】 不要なコンテナを削除します。 (スライド P.91)
コンテナから exit で出て、docker stop コマンドでコンテナを停止させ、docker rm コマンドで削除。

rm の引数に指定したIDを持つコンテナが消えてなくなっています。
■ 【レッスン13&14】 docker inspectオプションを実行。 (スライド P.92~93)
再度コンテナを起動し、 実行プロセスとして /bin/bash を指定する。

docker inspect コマンドで、作成時間、実行コマンド、IPアドレス、環境変数などなど、コンテナの詳細な情報を得ることが出来てます。
■ 【レッスン16】 Dockerfileでイメージ化します。 (スライド P.96)
まず、カレントディレクトリに Dockerfile を配置します。

httpdをインストールして、80番ポートで起動する設定のようです。
次に、docker build コマンドでDockerfileをビルドして、イメージを作成します。

docker images コマンドで、Apacheのイメージが作成されてるのが確認できます。

■ 【レッスン17】 Dockerfileで作ったイメージを立ち上げてみます。 (スライド P.97)
docker run コマンドで、先のイメージを起動してみる。

ブラウザから、Apacheが起動していることを確認できました。

以上、自宅でのハンズオン再現でした。
【レッスン9】と【レッスン10】が上手く行かなかったの、なんでだろ・・・
できれば調査してみたいと思います。
勉強会当日のハンズオン終了後は、その場で懇親会が行われました。
お酒とサンドイッチとポテトフライが振る舞われ、なんと無料!
この時間の空きっ腹には染み入りますね~
参加者さんとAPCの社員さんと、楽しくいろいろ会話させていただきました。
★感想:
初Dockerでした。
うーん、まだ正直、Dockerのスゴさがピンと来ていません・・・
というのも自宅で再現したハンズオン、VMWarePlayerでUbuntu14.04を起動してその上で実施したんですが、Dockerより、GUIのゲストOSをPCのホストOS上でバリバリ使えるVMWareやVirtualBoxの方が便利やな~、みたいな・・・
VMWareでゲストOSが使えるようになった、仮想化時代幕開け時の、あんときの衝撃があまりにも個人的にデカ過ぎたので、正直Dockerにはそこまでの衝撃を感じ入るには至っていないのです。
これはもう少しDockerの勉強をする必要がありそうです。
でも、この勉強会はDockerの仕組みを学んで実際にを触ってみるホントに良いキッカケになりました。
勉強会関係者の皆様、ありがとーございました。
- 関連記事
-
- 要求開発アライアンス 3月定例会「アジャイル時代のモデリング」に参加しました
- 「【ハンズオン】はじめてのDocker ~初心者向け~ APC勉強会 #17」に参加しました
- アジャイルサムライ横浜道場「イテレーション運営:実現させる」に参加しました