はじめに
『Docker / Kubernetes 実践コンテナ開発入門』の第1章が、Docker / Kubernetesを概観するのに分かり易かったので、まとめます。
要約
- Dockerとは仮想OS(=コンテナ)の実現のため実行される常駐アプリケーション + それを操作するためのCLIから成るプロダクト
-
Dockerのメリット = 開発環境と本番環境をほぼ同等に再現できること
- 環境差異問題の解消 / アプリとインフラ をセットで構築
Dockerとは
- コンテナ型仮想化技術を実現するために実行される常駐アプリケーション + それを操作するためのCLI(コマンドラインインターフェース)から成るプロダクト
- アプリケーションのデプロイに特化しており、コンテナを中心とした開発・運用を可能とする。
コンテナとは
- Dockerによって作成される仮想OS(ゲストOS)
- コンテナによって 開発環境と本番環境をほぼ同等に再現できる
Dockerの基礎概念
コンテナ型仮想化技術とは
- 仮想化ソフトウェアなしにOSのリソースを隔離し、仮想OSにする技術のこと。
- この仮想OSをコンテナと呼ぶ
(参考)ホストOS型仮想化
- OS上にインストールした仮想化ソフトウェアを利用し、ハードウェアを演算により再現しゲストOSを作り出す仕組み
Dockerのスタイル
- コンテナにアプリケーションと実行環境(OS)を同梱してデプロイするスタイル
- アプリケーションや必要なファイルをDockerイメージ(OS)に同梱してコンテナとして実行していくのがDockerの基本的なスタイル
- 実行環境ごとに配布することで、依存問題の困難さを解決
Dockerイメージをビルドする
- Dockerfileやアプリケーションの実行ファイルからDockerコンテナの元と成るイメージを作ること
Dockerの利用意義
環境差異問題からの脱却
- Infrastructure as Codeと Immutable Infrastructure、これらの考え方を簡単かつ低コストに実現できる手法
Infrastructure as code (インフラ の構成管理)
- コードベースでインフラ 構築を定義する考え
- どのような構成にするか、インストールするライブラリ、ツールなどは何かをコードベースで定義し、プロビジョニングツール(Chef / Ansible)を使ってサーバを構築
Immutable Infrastructure
-
ある地点のサーバ(サーバのイメージ)の状態を保存し、複製可能にする考え方。
- 正しくセットアップされた状態のサーバを常に使えるのが最大の利点
- 不変な実行環境によって、何度実行しても同じ結果が保証される、冪等性を保つ。
アプリケーションとインフラ をセットで構築する
- DockerコンテナはOS(インフラ )とアプリケーションを同梱した箱のようなもの
- Dockerイメージのビルドは、インフラ とアプリケーションをセットでビルドできること
アプリケーションの構成管理のしやすさ
- 複数のアプリケーションやミドルウェアを組み合わせた複雑なシステムを単体で動かすための仕組み = Kubernates
Docker Compose
- 複数コンテナを利用したアプリケーションの管理をしやすくするためのツール。
- yaml形式の設定ファイルで実行するコンテナを定義したり、依存関係を定義して起動順を制御したりできる
Docker Swarm(Swarm Mode)
コンテナオーケストレーション(Kubernates)
- 複数のノードを跨いで多くのコンテナ群を管理する手法
- コンテナオーケストレーションで、デファクトスタンダードになってるのが、Kubernates
感想
Dockerの全体感をざっくり理解できたと思う🙋♂️