• 会員限定
  • 2014/05/14 掲載

Dockerは何を解決するのか? VM(仮想マシン)との違いとは

Docker Meetup Tokyo #2

  • icon-mail
  • icon-print
  • icon-hatena
  • icon-line
  • icon-close-snsbtns
記事をお気に入りリストに登録することができます。
コンテナ型仮想化の技術として注目されているDockerの勉強会「Docker Meetup Tokyo #2」が4月11日にグーグル東京オフィスで開催されました。この勉強会には定員100名のところへ400名を超える申し込みがあり、参加できなかった方も多かったと思います。本記事では、最初のセッションとして行われた森和之氏による「今からでも間に合うDocker基礎+Docker 0.9概要」をダイジェストで紹介しましょう。

Publickey 新野淳一

Publickey 新野淳一

ITジャーナリスト/Publickeyブロガー。大学でUNIXを学び、株式会社アスキーに入社。データベースのテクニカルサポート、月刊アスキーNT編集部 副編集長などを経て1998年退社、フリーランスライターに。2000年、株式会社アットマーク・アイティ設立に参画、オンラインメディア部門の役員として2007年にIPOを実現、2008年に退社。再びフリーランスとして独立し、2009年にブログメディアPublickeyを開始。現在に至る。

今からでも間に合うDocker基礎

 株式会社トップゲートの森和之(@mainyaa)です。

photo

 手元の開発環境では動いていたプログラムが、プロダクション環境にデプロイしてみたら動きませんでした、というのは誰でも経験すると思います。

 環境変数が違っていたり、実行環境のバージョンやライブラリのバージョンが違ったり。しかしプロダクションの環境にログインしてこれらを操作する、ということはやりたくないですよね。

 また、Amazon Web ServicesやさくらインターネットのVPSなどいろんな実行環境があって、でも特定の環境にロックインされないようにするにはどうすればいいでしょうか。

photo

 そのためにDockerがあります。

Dockerは何を解決するのか?

 Dockerとはオープンソースの次世代仮想化技術で、アプリケーションを「コンテナ」にパッケージングして、デプロイ、実行できます。

 Go言語で書かれていてLinuxカーネルのみに依存します。

photo

 Dockerが何を解決するのかというと、デプロイの作業をもっと手軽にしようということです。

 DockerfileにOSのスクラッチイメージからライブラリ、環境変数などのパッケージングするものを書きます。それをビルドして実行してテストしてデプロイするだけで、手元で動いていたものをプロダクション環境にそのまま持って行って動かすことができます。

 つまりDocerfileによってインフラをコードとして扱えるんですね。

 Dockerはコンテナ型仮想化を実現するのですが、仮想化と言ってもVirtualBoxとかVMwareなどの仮想化とは違っていて、コンテナ型仮想化はビルドもデプロイも高速、オーバーヘッドも少なく、しかし仮想化なのでプラットフォームやハードウェアからは隔離された環境となります。

 問題が起きたときもDockerは威力を発揮します。本番とまったく同じコンテナを手元で動かせるので、ローカルでテストができます。

photo

 すべてのコンテナには固有のIDがあります。

 Dockerfileの1行ごとにコンテナとコンテナIDが作られ、コンテナは親からの差分を保存していきます。例えば一番ベースとなるコンテナからapt-getなどをすると、その差分だけを保存することになります。何かに失敗したらgitのように失敗する前に戻すことができます。

 例えばアプリケーション、DB、ネイティブツールといったものをコンテナに分けてそれぞれをデプロイして、動かなかったときにはそれぞれのコンテナごとに、依存するライブラリのバージョンなどを丸ごとロールバックできます。

photo

 DockerというのはDockerfileでインフラをコードとして管理できて、ゲストOSがなくカーネルを共有しているのでオーバヘッドが非常に少ない。

 Dockerビルドをするときには、DockerfileでコンテナIDがすでに振られて実行済みのものは再実行せずキャッシュを利用します。つまり変更された部分からだけが新たに実行されますし、変更分も親からの差分なので非常に小さくて済みます。

 DockerコンテナとLinuxコンテナはちょっと前まで同じものでしたが、最近、DockerはLinuxコンテナへの依存がなくなりました。Docker 0.9からはLinuxコンテナとはノットイコールになりました。

photo

【次ページ】 VM(仮想マシン)とコンテナの違い

関連タグ

関連コンテンツ

あなたの投稿

    PR

    PR

    PR

処理に失敗しました

人気のタグ

投稿したコメントを
削除しますか?

あなたの投稿コメント編集

機能制限のお知らせ

現在、コメントの違反報告があったため一部機能が利用できなくなっています。

そのため、この機能はご利用いただけません。
詳しくはこちらにお問い合わせください。

通報

このコメントについて、
問題の詳細をお知らせください。

ビジネス+ITルール違反についてはこちらをご覧ください。

通報

報告が完了しました

コメントを投稿することにより自身の基本情報
本メディアサイトに公開されます

必要な会員情報が不足しています。

必要な会員情報をすべてご登録いただくまでは、以下のサービスがご利用いただけません。

  • 記事閲覧数の制限なし

  • [お気に入り]ボタンでの記事取り置き

  • タグフォロー

  • おすすめコンテンツの表示

詳細情報を入力して
会員限定機能を使いこなしましょう!

詳細はこちら 詳細情報の入力へ進む
報告が完了しました

」さんのブロックを解除しますか?

ブロックを解除するとお互いにフォローすることができるようになります。

ブロック

さんはあなたをフォローしたりあなたのコメントにいいねできなくなります。また、さんからの通知は表示されなくなります。

さんをブロックしますか?

ブロック

ブロックが完了しました

ブロック解除

ブロック解除が完了しました

機能制限のお知らせ

現在、コメントの違反報告があったため一部機能が利用できなくなっています。

そのため、この機能はご利用いただけません。
詳しくはこちらにお問い合わせください。

ユーザーをフォローすることにより自身の基本情報
お相手に公開されます