ときどきAnsible日記

主にITインフラ基盤の自動化に関する事を書いているブログです

Dockerコンテナの概要

お疲れ様です。伊藤です。

先にインストールについて書いてしまったので順序が逆ですが、Dockerコンテナの概念的なことを記事にさせていただきます。
いまいちコンテナと言っても何を指しているかわからないですよね。。特にインフラに絡んでいない方には。。というわけで私のわかる限りでコンテナについて書いておきます。基本はGoogleで調べればわかることではあるので、「そんなの知ってるよ」という方は読み飛ばしてください。


まず、コンテナって何?というところですが、私の感覚では小さい仮想マシン、という認識です。実はこれはDockerコンテナについてはちょっと語弊を産む表現なのですが、その辺がまたややこしいところです。まぁ、いったんここは呑み込んでいただいて。。。


なぜコンテナは小さくて済むのか?についてですが、これは簡単。ゲストOSのカーネルを兼用している為です。ハイパーバイザ型の仮想マシンというのはホストOSの上にゲストOSのカーネルを実装しています。そのために非常に容量やCPUを使うのですが、コンテナはホストOSのカーネルを共有しています。要はただのアプリケーションの扱いなんです。そのためにLinuxマシン上ではLinuxのOSしか動かせません。このあたりがハイパーバイザ型との大きな違いになります(ちなみにDockerは現時点ではLinuxしか対応していません)

f:id:pj_doaa:20170808151703p:plain

コンテナはただのアプリケーションですが、ユーザとかメモリ領域とかネットワークとかを他のコンテナに影響させないように切り分けたものになります。疑似的にマシンを作っている、という形ですね(まあ仮想マシンってそういうものですが)


その切り分けに使っているのが名前空間(ネームスペース)と呼ばれる技術になります。ちょっとわかりづらいですよね。。直訳してるから。。。まあ、そういうものだと思ってもらえばいいです。で切り分けられるのは下記です。

  • プロセス管理
  • ネットワーク管理
  • IPCリソースアクセス管理
  • マウントポイント管理
  • カーネル・バージョン管理
  • ユーザ管理

これらの情報がそれぞれのコンテナで別々に使えます。この分離するための技術にカーネルバージョン3.1以上(RHEL7相当)の技術を使っているので、それ以前バージョンでは使えません。(Dockerのバージョンが古ければRHEL6でも対応してましたが、最新バージョンは動きません。docker1.10以前ぐらいまでは動くかも)


コンテナの概要について書いてきましたが、コンテナも大きく二つに分かれます。それがLinuxコンテナとDockerコンテナです。違いは下記の通り。

  • Linuxコンテナ(LXC)
    • 小さい仮想マシンを意識している
    • 仮想マシン意識なので色々乗っている
    • 色々乗ってるが故に管理がめんどくさい
    • ハイパーバイザ型と同じように使える
  • Dockerコンテナ
    • アプリケーションの実行環境を意識している
    • 必要最低限なものしか載っていない
    • 本来であればOS起動時に動くプロセスも動かない
    • すぐに作ってすぐ壊すポリシーみたい

う~ん、、ちょっと偏ってるかもしれませんが私の認識はこんな感じ。結果として今流行っているのはDockerです。すぐに作って(すぐに壊せる)というのが今の需要に合っていると思われます。ただし今後もDockerが使われ続けるかは??。噂ではすでに業界から・・・・という話も。。。

今後の状況を見据えつつ使っていきましょう。
以上です。お疲れ様でした。