比べて学ぶVM(仮想化)とコンテナ 研修コースに参加してみた
今回参加した研修コースは 比べて学ぶ VM(仮想化)とコンテナ です。
SEカレッジでは過去にも仮想化に関するテーマのコースを開催していますが、今回はより突っ込んで、VM とくにハイパーバイザー型とコンテナ型がどう違うのか、特にコンテナの代名詞、Docker を実際に使ってみることで、どう便利になっているのか体験できました !
label関連する記事
コンテナ、特に Docker が気になっている方には、これまでの違いはもちろん、ラクチンさを体験できるので、とてもオススメです!
では、どんな内容だったのかレポートします!
もくじ
コース情報
想定している受講者 |
|
---|---|
受講目標 |
|
講師紹介
インフラ ≒ 新谷 泰英さん です。
どうすれば技術を身につけられるか、理解できるか、研究しつづけるインフラ系の人気トレーナー
ちなみに、2018 年 11 月の参加してみたレポートがインフラ中心になっているのは本当に “たまたま” です。。 SEカレッジではその他の分野ももちろん開催されています。
仮想化とコンテナ
- コンテナ
- 仮想化というより Isolation (隔離) と呼ばれる技術
- コンテナはアプリケーションとして扱われる
- ホストOSからみるとプロセスが動いているだけ
- コンテナ同士は隔離されている
- 異なる IP アドレスを持っているときもある (!)
- 仮想化との違い
- OS とハードウェアは共通
- Windows, Linux を同居できない
- ただしカーネルを使っているので、シェルが異なる Linux のディストリビューションは同居できる
- 例えば、Ubuntu と CentOS を同居できる
- VM (仮想化)
- 物理マシンの遊休リソースを使って仮想マシンを作る技術
VM もコンテナも、システムユーザからすると同じような目的で使えるので、わかりにくいのですが、原理が全く違いますね。
ちなみに調べてみると、コンテナそのものはこのあと出てくる Docker より前にあり、過去には Docker そのものもコンテナ実装の一つ LXC を使っていました。詳しく知りたい方はぜひ御覧ください。 (コンテナ実装とはこれまた面白そうな課題ですね)
Docker
では、コンテナがこれだけ注目される引き金になった Docker について簡単に紹介頂きました。
- コンテナを実行できるエンジン
- 最近は Linux だけでなく Windows で Windows コンテナも動かすことができる
- コンテナ実行だけができる軽量な OS CoreOS で動いている
- 様々なアプリケーションのイメージをダウンロードして使える
- ちなみに Docker Hub も含めて Docker
- ただし、新しい機能が追加されたり廃止されたりしているのでアップデートが大変
Docker 演習
というわけで、座学もそこそこに Docker を実際使ってみます。
Docker のインストールから docker run と様々なオプション
- VM を作ってそこに Docker を使う
- 教室用 PC ( Windows ) に VirtualBox で Docker のホスト ( CentOS ) を構築
- インストールから起動まで
yum -y install docker
systemctl start docker
systemctl enable docker
- コンテナを実行してみる
docker run hello-world # hello-world はイメージ名
- イメージが無ければ自動的に Docker Hub からダウンロードされる
- Docker Hub は GitHub のコンテナイメージ版
Hello!! from docker
とコンソールに表示されました!
docker run -it ubuntu bash
docker run [イメージ名] [コマンド]
-> コンテナ内のイメージを起動しコマンドまで実行ps aux
ubuntu のコマンドを実行してみる -> プロセスの実行履歴が表示された
検証などをやるときにサッと試せるので、とても便利ですね。
Docker で WordPress を動かしてみる
このあとの作業にあわせてコンテナのファイアウォールを設定したあと、もっとわかりやすく Docker のラクなところを体験するため、WordPress を動かしてみます。
-
docker run -d -p 8888:80 --name=wordpress tutum/wordpress
--name
はコンテナに名前をつけるtutum/wordpress
は [作成者名/イメージ名]
docker ps
で起動を確認- ブラウザから http://(IPアドレス):8888 を動かす
WordPress が表示されました!!
本来であれば、WordPress を動かすには Web サーバ( Apache ), RDBMS ( MySQL ), PHP をそれぞれインストールして、さらに設定する必要があったのですが、めっちゃ簡単に立ち上がりました !! ラクチンすぎる。。。
ただし、本来は DB と Web サーバー は別々にコンテナを立ち上げて通信させるほうが一般的です。
Docker の基本操作
Docker の超ラクチンなところを経験したところで、基本操作を解説いただきました。
- イメージを Docker Hub からダウンロードする
docker pull [イメージ名]
- pull したイメージからコンテナを動かす
docker run [イメージ名]
- 起動中のコンテナから抜ける
- [ctrlキー]+[p] -> [ctrlキー]+[q] で dockerhost に戻る
- 指定のコンテナに戻る
docker attach [コンテナID]
- コンテナ ID は
docker ps
で確認できる - シェルスクリプトも使える
docker rm $(docker ps -aq)
$(docker ps -aq)
で起動中、停止中すべてのコンテナの ID を表示
なお例えば、DB を使った場合、実際にストアされたデータをホストの指定ディレクトリに保存することもでき、改めて起動すると、指定したディレクトリからリストアされます。
なるほど、コンテナとディスクストレージを切り離せるのですね。
Docker のネットワーク構成
では、冒頭にあった “コンテナが IP アドレスを持てる” というところを解説です。
- コンテナへの通信はホストを通して通信
docker run -p
をしたときにアドレス変換している
- コンテナ間はプライベートネットワークで繋がっているので直通信可能 (!)
今日の教室での環境のようにホストが VM であっても、VM の IP を使って通信できます。これで Docker on VM でも繋がります。
イメージ ( Docker file) の作成
最後にローカルで開発環境を構築したり、テスト環境を作ったりするときに使えるイメージをどのように作るのか、解説いただきました。
- Docker file を作成する
vi dockerfile
- 下のようなものを書く
FROM centos
MAINTAINER yourname
RUN yum -y install httpd
RUN yum clean all
RUN sed -i -e \
"s/#ServerName www\.example\.com:80/ServerName www.example.com:80/" \
/etc/httpd/conf/httpd.conf
ADD ./html/ /var/www/html/
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
このコマンドを実際に独自の Dockerfile に記述して、新谷さんがデモとして実行して、このコースは修了しました。
まとめ
このコースでは、VM 特にハイパーバイザー型の仮想化とコンテナとの違いを学び、実際に Docker を使って、どのようにインフラ構築が出来るのか体験してみました。
体験できたことで、社内検証やテスト、開発環境を手早く用意するなど、色々と用途がイメージできるように思います。SEカレッジでも Docker Hub から pull して、自宅で教室と同じ環境をカンタンにサッと構築する、といったことは出来るかも知れないとイメージしました。(皆さんのニーズはありますかねぇ)
コンテナ Docker をそろそろ触ってみるか、という方にはとてもオススメです!
label SE カレッジの無料見学、資料請求などお問い合わせはこちらから!!
label SEカレッジを詳しく知りたいという方はこちらから !!
IT専門の定額制研修 月額28,000円 ~/ 1社 で IT研修 制度を導入できます。
年間 670 講座をほぼ毎日開催中!!
SEプラスにしかないコンテンツや、研修サービスの運営情報を発信しています。