Ebook連載:『5分x10回で学ぶ 開発者のためのDocker コンテナ入門』第1章 –コンテナとは?
#docker #DX #Mirantis #コンテナ
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
コンテナ化はDXの第一歩に最適な取り組みです。これから10回にわたってMirantis社が発行するEbook「Learn Containers 5 Minutes at a Time An introductory guide for developers」 (Eric Gregory著)を翻訳・編集し、チャプターごとにCL LABで公開していきます。本稿はその第1章です。皆さまのクラウドネイティブジャーニーやアプリケーションのモダナイズの一助になれば幸いです。
目次
- 第1章 コンテナとは?
- 第2章 コンテナの作成・調査・削除
- 第3章 Dockerfile でのコンテナイメージのビルド
- 第4章 イメージレジストリ
- 第5章 ボリュームと永続的なストレージ
- 第6章 コンテナネットワークとコンテナのポートの開設
- 第7章 コンテナ化アプリの実行
- 第8章 ユーザ定義ネットワーク上のマルチコンテナアプリケーション
- 第9章 Docker Compose
- 第10章 Webアプリをコンテナサービスとして構築する
第1章: コンテナとは?
コンテナは、OSカーネルなどの共通の依存関係を共有する、サンドボックス化されたソフトウェア環境です。同じマシン上でOSを共有しながら、それぞれで異なるバイナリやライブラリに依存する多くのコンテナを実行できます。
技術的に言えば、コンテナはカーネルのネームスペース・コントロールグループ・root権限とシステムコールの制限によって隔離されたプロセスです。これが何を意味するかは、次章以降で説明します。
その前に、コンテナ化の目的について考えてみましょう。そもそも、なぜプロセスとプロセスを分離するのでしょう?単に同じシステム上でプログラムを同時に走らせるだけではダメなのでしょうか?
特に企業にはプロセス同士を分離する多くの理由があります。例えばセキュリティの観点から、あるプログラムが他のプログラムのデータにアクセスできないように、プロセス分離を考える必要があるかもしれません。またプロセスが root 権限やシステムコールへのアクセス権を持っていないことを明確にする必要があるかもしれません。
あるいは、単純に資源効率やITハイジーン(IT環境の衛生管理)の観点からかもしれません。 あるマシンで、Python 2.7 に依存するプロセスと、3.1を呼び出すプロセスがあった場合を例に考えてみましょう。このような異なる依存関係の要件が重なると、開発者は本当に頭を悩ませます。プロセス分離は、このような問題の防止や解決に大きく貢献します。
プロセス同士を分離する方法のひとつは、専用の VM 上でプロセスを実行することです。ユースケースによってはこれが最も適した方法かもしれませんが、コンテナには VM にはない利点があります。VM は、OS を含むマシン全体をシミュレートしているため、通常はコンテナより多くのリソースを必要とします。そのためコンテナは VM より軽量で可搬性が高く複製も容易です。
実際コンテナの移植性と拡張性は高く、コンテナイメージという形であらかじめ用意されたソフトウェアモジュールを提供することで開発をスピードアップできます。つまりコンテナは、特定のアプリケーションと依存関係のセットをすぐに使えるように、簡単にダウンロードできる構成になっているのです。このコンテナイメージは、開発者が容易にアクセスできる積み木のようなものであると同時に、組織全体で標準化しやすいキャンバスのようなものでもあります。
このようにコンテナによって組織はソフトウェアの提供方法を劇的に変革できます。では、どのようにコンテナ化を開始したら良いのでしょうか。主なコンテナ化ツールと言えばDockerです。
「Docker」といえば、Docker社、あるいは同社のMac/Windows用アプリケーションである「Docker Desktop」にパッケージされたツールを思い浮かべる人もいるでしょう。そのツールはサンドボックスの壁を作り、サンドボックス内のプロセスからカーネルにメッセージを渡すアプリケーションである「Docker Engine」を中心に構築されています。本書で「Docker」と言う場合、「コンテナエンジンであるDocker Engine」を指す言葉として定義しています。Dockerは、コンテナ化されたプロセスをシステムの他の部分から、少なくとも最初は互いに分離する、コントロールグループなどを構築します。
現在では、Mirantis社※1の Mirantis Container Runtime を含め多くの製品が利用可能です。 例えばMirantis Container Runtimeは、企業のセキュリティとコンプライアンスに対応した機能を備えています。Docker Engineと同じオープンソースの骨組みの上に構築された製品が他にもあります。
本書では、インストールが簡単で、使い始めるために必要なものがすべて含まれている Docker Engine を使用することにします。本書でDocker について学べば、より広範なコンテナエコシステムにも活用できるでしょう。
Docker Engineは、ダウンロードページの各OS用ページからインストールできます。
MacやWindowsをお使いの場合、Docker Desktop をダウンロードすることになります。これはコンテナを起動し管理するためのグラフィカルユーザーインターフェース(GUI)を備えたツールです。本書の演習を行う際には、このツールを起動しておく必要があります。Docker Desktop はまだ Linux では利用できません。Linuxユーザはコンテナエンジンをインストールするだけです。
Linux: ダウンロードページの「Server」欄で、お使いのLinuxディストリビューションを選択し、指示に従って、関連するパッケージマネージャ経由のインストール・手動でのインストール・バイナリからのインストールのいずれかを行ってください。どれを選んだらよいかわからない場合は、パッケージマネージャでのインストールをお勧めします。
Windows: Docker Engineに加え、Unixのようなターミナルが必要です。特定のツールがない場合は、Git Bashをお勧めします。
今回はここまでです。
本Blogの動画はこちら。
次章では、Dockerを使用してコンテナの作成・監視・削除を学びます。
※Docker Enterprise事業は2019年11月14日にMirantis社によって買収されました。
当時のDocker Enterprise製品は、現在は下記のように名称変更されています。
- 「Docker Engine」→「Mirantis Container Runtime (MCR)」
- 「エンタープライズ版Docker」→「Mirantis Kubernetes Engine (MKE)」
- 「Docker Trusted Registry」→「Mirantis Secure Registry (MSR)」
Mirantis製品に関するお問い合わせはこちら。
Mirantisについて
Mirantisは、Fortune 1000 企業の 2/3 以上にコンテナやマルチクラウドの導入を加速させ、データセンター運用のストレスを取り除く支援をしています。日本では、クリエーションラインと提携し、Kubernetes、OpenStack、その他のオープンクラウドテクノロジーを、現地語でのサポートやサービスとともに提供しています。Mirantis Kubernetes Engine(旧Docker Enterprise)および関連製品を含む、深い技術的専門知識とベンダーにとらわれない柔軟なプラットフォームが、お客様から選ばれています。
詳細は www.mirantis.com でご確認ください。