ブロックチェーン・AI・システム開発の株式会社INDETAIL

Docker再入門

2015.01.29
tacck

一月ももうすぐ終わりますが、今年初の投稿なので明けましておめでとうございます。tacckです。

年明けて札幌本社勤務に戻りましたが、相変わらず東京と行ったり来たりの生活が続きそうです。
今回は大荒れの日に出発となったので、空港でだらだらしておりました。

さて、昨年は割とAnsibleについて書いてきました。が、実運用面で書けるストックが無くなってきたので、別の軸を取り上げてみたいと思います。
今回からは、Dockerをテーマにして書いてみたいと思います。
(今後の環境構築が関係してくるところでは、以前に書いたPacker+Ansibleを利用していく予定です。)

すでにDockerが世に広まって久しいですが、まずは、そもそもDockerとは何?というところから改めて入っていきます。

まずは仮想環境

Dockerの話をする以前に、まずは「仮想環境」と呼ばれるものの簡単な話から。

仮想環境は、「ある環境(OS-A)において、別の環境(OS-B)が独立した状態で動く」ようにしたもの、という形がよくある形です。
わかりやすい例として、Mac上でWindowsやLinuxが使える、、、という状態ですね。

こちらを実現するシステムとして、「VMware」や「VirtaulBox」といったものがあり、一般に「ハイパーバイザ型」と呼ばれています。
これは、(詳細は端折りますが)ハードウェア自体を仮想化することで、別の環境(OS-B)が元々の環境(OS-A)をまったく気にしない状態で動いています。

これとは別の方式で、「コンテナ型」というものもあります。
こちらは、「ある環境(OS-A)において、ソフトウェア的に制限付きエリアを用意し、その中で別の環境(OS-A')を動かす」という方式です。
この場合の別の環境(OS-A')では、ハードウェア・カーネルを同一のものを使うために元々と同じOSしか動作させられません。
しかし、共有部分が多い為、速度面でハイパーバイザ型よりも優位と言えます。
こちらの代表的なものとして、FreeBSDの「Jails」、Linuxの「LXC」があります。

Dockerとは

Dockerは、LXCを利用した「コンテナ型」の仮想化システムです。
そのため、Linux上でLinuxを動作させる、というものです。
同じLinux同士ですが、ディストリビューションの違うものを仮想環境として実行可能、というのも利点といえます。

実務では、案件によってサーバOS(のディストリビューション)がCentOSであったり、Ubuntuであったり、またそれぞれのバージョンの指定があったり、とあると思います。
そういったものも、仮想化によって簡単に再現することができるので、開発時の環境構築の手間を低減することができます。

また、DockerではUnionFS(AUFS)を利用する事によって、動作させるOSの状態(コンテナ)を状態管理・履歴管理しています。

Dockerの基本

大雑把な説明ですが、Dockerには「イメージ」と「コンテナ」という二つの状態があります。
「イメージ」は、「コンテナ」を作成する基となります。
「イメージ」を派生させて「コンテナ」を作成し、そこに各種設定を行なうことで、それぞれ独立した「コンテナ」をたくさん作っていくことができます。

例えば、Ubuntu 14.04のイメージを使い、「nginxサーバの動くコンテナ」、「MySQLサーバの動くコンテナ」、「自作プロダクトの動くコンテナ」、といったものを作成していきます。

イメージを基にコンテンツを作成

コンテナとして各サーバを独立させることで、サーバのバージョンアップ時に新たなコンテナで動作確認後に利用、という「コンテナの入れ替え」が簡単に行なえます。
また、コンテナはDockerの稼働するサーバ間での移動も行なえるので、コンテナ内からはどこで動いているかを気にせずに設定ができる、というポータビリティの高さも利点となります。

問題なければ古いコンテナを削除

実際の運用には、設定の工夫、環境構築の工夫など必要ですが、整えてしまえば気軽に色々なサーバの動作実行・確認を行なえます。
次回は、コンテナの構築と動作の確認周りをやってみたいと思います。

関連タグ:

tacck Takuya KIHARA

エンジニア (モバイルアプリ、フロントエンド、バックエンド、インフラ) 得意なことは、領域をまたいで考え、開発すること。 ブログでは、主にAnsible、Docker、Raspberry Piのことを書いています。 好きなフィギュアスケートの技は、スプレッド・イーグルです。

「いいね」ボタンを押すと、最新情報をすぐに確認できます。