Part 1:概要説明とセットアップ

ようこそ! 皆さんが Docker の使い方を学ぼうとしており、私たちは嬉しく思います。

このチュートリアルは6つのパートで構成されています。

  1. セットアップと概要説明、このページです。
  2. 初めてのアプリを構築・実行
  3. アプリをスケールするサービスに変える
  4. 複数のマシンにまたがってサービスを展開
  5. 来訪者カウンタで残しておくデータの追加
  6. swarm をプロダクションにデプロイ

アプリケーションそのものは非常にシンプルです。そのため、コードが何をしているか、あまり気に留める必要はありません。それよりも、 Docker の価値とは、アプリケーションをどのように構築(build)・移動(ship)・実行(run)するかにあります。言い換えれば、実際に皆さんのアプリケーションが何なのかに依存しません。

必要条件

概念の定義に関しては、 チュートリアルを進める前に Docker とは何か?(英語)Docker 利用例(英語) の理解が役立つでしょう。

また、このまま進むには、以下の概念を熟知している必要があります。

  • IP アドレスとポート
  • 仮想マシン
  • 設定ファイルの編集
  • コード実行に関する依存関係と構築に関する考えについて、基本の熟知
  • CPU 使用率、メモリをバイトで扱うなど、マシン・リソースの使用に関する用語

コンテナの概要を説明

イメージ(image) とは実行可能なパッケージであり、軽量で、単独で動作(stand-alone)します。パッケージにはコード、ランタイム、ライブラリ、環境変数、設定ファイルなど、ソフトウェアの実行に必要な部品すべてを含みます。

コンテナ(container) とはイメージのランタイム・インスタンス(runtime instance;実行状態にあるモノ)です。言い換えれば、イメージからメモリ内に展開し、実際に実行する何かです。

ホストマシンのカーネル上で、コンテナはアプリケーションをネイティブに(訳者注;何らかのプログラムを通さず、直接の意味)実行します。仮想マシンでは、ホスト上のリソースにハイパーバイザを通してしかアクセスできません。そのため、コンテナは仮想マシンよりも性能が良くなります。コンテナはネイティブにアクセス可能であり、各々のプロセスは分離して実行し、メモリは実行に必要な容量のみ確保します。

コンテナと仮想マシン

図を使い、仮想マシンとコンテナの比較を考察します。

仮想マシン概念

仮想マシンスタックの例

仮想マシンはゲスト・オペレーティング・システム上で動作します。この図では、それぞれの箱が OS 層です。仮想マシンはリソース集中型です。その結果、ディスク・イメージとアプリケーションの状態は、 OS の状態やシステムにインストールされた依存関係、OS セキュリティ・パッチによる影響を受けます。また、簡単に(アプリケーションの状態が)失われやすく、短時間での複製は大変です。

コンテナ概念

コンテナスタックの例

コンテナは1つのカーネルを共有できます。また、コンテナ・イメージに必要なのは、実行可能なものとパッケージの依存性に関する情報のみです。これらはホストシステム上へインストールする必要が一切ありません。そして、これらのプロレスはネイティブなプロセスのように実行可能であり、 docker ps のようなコマンドを使い、個々に管理可能です。 この ps は Linux 上でアクティブなプロセスを表示します。つまり、このように全ての依存関係を含むため、設定の複雑化もありません。すなわち、コンテナ化(containerized)したアプリは 「どこでも動く」(run anywhere)のです。

セットアップ

チュートリアルを進める前に、皆さんのシステム上に Docker 最新版がインストールされているのを確認してください。

注釈

Docker バージョン 1.13 以上が必要です。

docker run hello-world を実行したら、次のように表示されます。

$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
...(省略)...

また、バージョン 1.13 以上を使っているかどうかを確認する良い機会です。

$ docker --version
Docker version 17.05.0-ce-rc1, build 2878a85

このようなメッセージが表示されれば、旅に出る準備が整いました。

まとめ

スケールの単位は1から始まりポータブルに実行可能なため、広大に拡がります。つまり、あらゆる分散アプリケーションにおいて、システムの依存関係による問題を起こさずに CI/CD による push 更新が可能であり、リソースの集約度が高まります。スケールするオーケストレーションの挙動とは、新しい実行ファイルを展開するのみであり、新しい仮想ホストではありません。

これらの全てを学ぶ前に、今は前に進みましょう。

参考

Get Started, Part 1: Orientation and Setup | Docker Documentation
https://docs.docker.com/get-started/