IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第46回 Dockerのコンテナが実現するもの (中井悦司) 2014年7月

はじめに

 先々週から先週にかけて、Dockerの勉強会講師を2本連続して担当させていただきました。すっかりDocker漬けの日々になりましたが、それぞれ、当日のTweetのまとめが公開されていますので、ご興味のある方は参照下さい。

 これらの勉強会では、「Dockerを支える技術」と題して、Dockerが内部的に利用するさまざまなLinuxの機能を解説しました。Dockerのマスコットキャラクターのクジラ(Moby Dock)はみなさんご存知だと思いますが、「Dockerの中で活躍するLinux」ということで、筆者の頭の中では、クジラのおなかが割れて、Tux(Linuxのマスコットキャラクターのペンギン)が顔を出している図が浮かんでいました(笑)。

 当日は、Dockerの簡単な使い方も紹介したのですが、時間の制限もあり、コンテナの起動・停止に関わる基本コマンドについて、全体像を整理して解説することができませんでした。そこで今回は、はじめに、Dockerで管理するコンテナが作成されてから削除されるまでの流れ、すなわち、「コンテナのライフサイクル」に関わるコマンドを改めて整理しておきます。

コンテナとディスクイメージのライフサイクル

 はじめに全体像を図示すると、図1のようになります。ローカルに保存したディスクイメージを指定して「docker run」コマンドでコンテナを起動すると、指定イメージのスナップショット・コピーが作成されて、コンテナに割り当てられます。これは、連載の第42回でも説明した通りです。

fig01

図1 コンテナとディスクイメージのライフサイクル

 この後、「docker stop」コマンドでコンテナを停止すると、コンテナ内で稼働していたプロセスはすべて停止して、そのコンテナは存在しなくなります。ただし、コンテナに割り当てられていたディスクイメージはそのまま残っています。この後、「docker start」コマンドを実行すると、同じディスクイメージを使用して、再度、コンテナ内でプロセスが起動します。なお、コンテナ内で最初に起動した「PID=1」のプロセスが停止した場合も、「docker stop」で停止した際と同じ状態となります。

 その他には、「docker commit」コマンドで、コンテナに割り当てられたディスクイメージを複製して、新たな保存イメージとして登録することができます。これは、コンテナ内でプロセスが稼働している時でも実施できますが、ディスクへの書き込み中に複製すると、データの整合性が失われる恐れがあります。安全のために、「docker stop」でコンテナを停止した状態で実施するのがよいでしょう。

 そして最後に、停止中のコンテナについては、「docker rm」コマンドでコンテナを破棄することができます。これにより、コンテナに割り当てられていたディスクイメージが削除されます。不要になって停止したコンテナを破棄せずに放っておくと、不要なディスクイメージが残り続けるので注意が必要です。

 ここで説明したコマンドの実行例を筆者のBlogで紹介しているので、そちらも参考にしてください(*1)。

Dockerのコンテナが実現するもの

 ところで、冒頭で紹介した勉強会では、コンテナ内のアプリケーションをどのように構成するのがよいのか、という点が話題になりました。コンテナを仮想マシンのように考えて、さまざまなアプリケーションやデーモンを1つのコンテナで動かすことも技術的には可能です。しかしながら、筆者は、1つのコンテナでは1つのアプリケーション(デーモン)を実行するのがよいと考えています。

 Dockerの本来の目的は、アプリケーションの実行環境をディスクイメージとしてパッケージングして、配布可能にすることです。したがって、図1の「docker run/start/stop」などのコマンドは、ホストマシン上で特定のアプリケーションを起動・停止するコマンドと考えるのが自然です。サーバ上で起動したアプリケーションが、たまたま、コンテナの中に閉じ込められていると考えるのがよいでしょう。

 また、Dockerは、仮想ネットワークの機能がとてもシンプルです。外部からのネットワーク接続は、ホストマシンで受けた後にコンテナ内のアプリケーションにポート転送することしかできません。しかしながら、これは、見方を変えると、コンテナ内のアプリケーションが、あたかもホストマシン上で直接に動いているように見せる機能とも言えるでしょう。Dockerが提供するコンテナは、アプリケーションの実行環境を閉じ込めるものであって、ホストマシンから独立したOS環境を提供するわけではない事に注意が必要です。

次回予告

 さて、今週は、定例イベント「VIOPS Workshop」に参加してきます。今回は、「顧客が本当に必要だったもの」をテーマとしたパネルディスカッションが中心で、筆者は、モデレーターとしての参加になります。次回は、こちらのイベントから、話題をお届けしたいと思います。

参考資料

(*1) 「Dockerにおけるコンテナのライフサイクル

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes