DockerとKubernetesの概要・使い分けポイントを解説
thumb_docker-kubernetes_01
DockerとKubernetesの概要・使い分けポイントを解説
アンドエンジニア編集部
2022.06.19
この記事でわかること
Dockerは、コンテナを用いたOSレベル仮想化プラットフォームソリューションです
Kubernetesは、コンテナを効率的に利用するオーケストレーションソフトウェアです
単一ノードでオーケストレーション不要の場合はDockerを、それ以外はKubernetesを選択します

DockerとKubernetesの比較

img_docker-kubernetes_01

近年、仮想化ソフトウェアの利用が増加しています。類似する技術であるコンテナ仮想化が、これまでの仮想化ソフトウェアを上回る勢いで急拡大しています。ここではその代表的なソフトウェアであるDockerとKubernetesについて入門情報を説明し、違いを理解していきます。

Dockerの概要

img_docker-kubernetes_02

Dockerは、コンテナ仮想化によるOSレベル仮想化プラットフォームソリューションです。Dockerイメージを用いたコンテナ仮想化システムを構築することで、開発ライフサイクルの効率性を高めることができ、DevOps等で活用されています。 【参考】:Docker

Dockerとは?使いどころやメリット・デメリットについて解説!

Dockerのメリット

Dockerはホストカーネルを利用しているために単一OS上で複数のコンテナが実行できます。OSで用いるシステム資源は少なくメモリー効率性が高いので、コンピュータリソースをより多くコンテナアプリケーションに割り当て可能です。Dockerを一言で言うと「軽量で速い」ことがメリットです。環境をイメージとして登録できますので、複製が容易で配布がしやすいメリットもあります。

Dockerのメリットを徹底解説!仮想マシンとは何が違う?

Docker利用拡大の背景

アプリケーションを実行するためには、アプリケーション実行コード・ランタイムライブラリや、依存ライブラリ等が必要です。アプリケーション自体の設定ファイルも必要です。このファイル準備作業は、従来の業務ではサーバーの数が一定のため、さほど手のかかる作業ではありませんでした。

しかしウェブアプリケーションのように、大量のサーバーにアプリケーションを分散するようになると、作業の支障がでてきました。各サーバーにアプリケーションを導入し起動したり、あるいはアプリケーションの設定を差し換えて起動したりとなると、バージョン管理や構成管理等手順の統一が必要となってきます。

コンテナでは、アプリケーション実行コードとランタイムライブラリおよび依存ライブラリをコンテナ化し、イメージ化することでデプロイが簡単になります。実行環境に合わせてコンテナの設定をカスタマイズするだけで準備が完了しますので、ちょっとしたアプリケーションを分散しデプロイするのに最適な仮想化ソリューションとして利用が拡大しました

Dockerのコンテナとイメージ

Dockerコンテナでは、仮想マシンと異なりホストカーネルを利用し仮想化を実現しています。そのため、ホストカーネルからはプロセスとして動作します。プロセスはホストカーネルから見ると、他のプロセスと独立して動作しますので、システムオーバーヘッドが少なく管理も簡単に行うことができます

Dockerイメージは、Dockerコンテナで用いる動作環境テンプレートです。アプリケーション実行に必要な変数・コマンドやメタデータを含みます。DockerはDockerイメージを用いてコンテナ化されたアプリケーションを実行します。DockerfileをビルドすることでDockerイメージを生成します。

エンジニア初心者でも分かる!Dockerコンテナの超入門!

Dockerリポジトリ

Dockerリポジトリとは、Dockerイメージの保管場所を指します。またイメージの保管サービス全体をレジストリと言います。Dockerイメージの公開レジストリでデフォルト利用される提供サイトはDocker Hubです。

Kubernetesの概要

img_docker-kubernetes_03

Kubernetesは、コンテナのオーケストレーションを行うソフトウェアです。アプリケーションコンテナをデプロイし、管理します。Kubernetesではクラスタ内でデプロイ・スケール・管理を実行できます。そのため可用性が向上し、企業向けに活用が進んでいます。 【参考】:Kubernetes

オーケストレーションとは

オーケストレーションとは、コンピュータシステムのサービス設定や提供・管理の各種手続きを自動的に行う考え方です。オーケストレーションによって全体の効率向上・品質向上・スピード向上を実現します。オーケストレーションの対象は幅広く、ビジネスプロセスから業務サービスまで多岐に渡ります。

ここではオーケストレーションの対象を、コンテナオーケストレーションとします。コンテナオーケストレーションとしては Kubernetesが代表的なソリューションです。この他、Docker社のDocker Swarmもコンテナオーケストレーションのソリューションとして開発提供されています。

Kubernetesのメリット

KubernetesはアプリケーションをPodという単位で管理します。Podの集合体をサービスと言います。Kubernetesはコンテナ管理において以下のメリットがあります。

管理対象を抽象化し簡素化が可能 管理対象はPodやサービスであり、インフラをノード(Node)として管理します。そのため、コンテナと実行マシンを厳密に結び付けずに簡単な操作で管理が可能となります。

クラスタの利用 Kubernetesクラスタを利用するために、各ノードへのPodのスケジュールやクラスタ内デプロイが簡単にできます。負荷分散のためのスケーリングも簡単に行うことができます。

可用性・耐障害性の向上 Nodeに障害が発生した場合自動復旧を行いますし、Podの障害発生の自動復旧を設定可能です。このため、スケーリングと併用することで耐障害性の向上が可能です。

上記の基本的な特性・メリットを活用し、Kubernetesでは自動化ソリューションとして大量のコンテナを管理し、短期間でデプロイすることが可能となりました。

Dockershim非推奨とは

2020年にKubernetes公式Blogで告知されたように、Dockershimは1.20で非推奨となっています。Dockershimとは、Dockerに対応するランタイムインターフェイスです。実際にはDockershimを介さずに、ContainerdのCRIプラグインにより、kubeletとのランタイムインターフェイス接続が可能です。今後もDockerコンテナを利用する上では問題なく利用できます。 【参考】:Dockershim Deprecation FAQ 【参考】:Migrating from dockershim 【参考】:Dockershim removal is coming. Are you ready?

DockerとKubernetesの使い分け

img_docker-kubernetes_04

コンテナエンジンとしては、Dockerが有名です。Dockerは、デベロッパーがOSの設定や管理に時間をかけずにアプリケーション開発に専念し、さらにデプロイをすぐしたい、という要求から開発されました。そのためDevOpsのようにソフトウェアのビルド・テスト・デプロイと運用を短サイクルで運用連携する際に効率的に利用できます。

また、環境の複製やテンプレートの利用も可能ですので、同等のソフトウェアを利用したサービス展開にも柔軟に対応できます。さらにDockerの仕組みを利用することで運用までの作業手順書を標準化したり、簡素化したりすることができます。

Dockerは必要なコンテナソフトウエア機能が含まれますので、単一ノードで足りる場合はDockerをそのまま利用することも選択肢となります。しかし、利用が拡大してくるとコンテナ間で処理を連携するオーケストレーションのニーズが高まってきました。

Kubernetesはサーバーインフラ(Node)をまたがるコンテナ仮想化に対応し、大規模システムに適したクラスターを構成可能です。そのため、コンテナオーケストレーションを重視する場合はKubernetesを利用するケースが多数を占めています。

Docker単体では足りないクラスター機能ですが、現在Swarm modeとしてDockerエンジンにSwarmの機能を統合しています。しかしながらKubernetesもDockerのオーケストレーションモジュールとして採用されていますので、大多数のユーザはKubernetesを選択しているのが実情です。 【参考】:Docker Orchestration

これらを比較整理すると、単一ノード構成はDockerを、複数ノード構成はKubernetesを選択します。さらに自動化・障害復旧のオーケストレーション機能が必要な場合はKubernetesを、不要な場合はDocker単体を選択すると良いでしょう

DockerからKubernetesに移行するには

DockerからKubernetesに移行するには、MinikubeとKomposeを用います。Minikubeは、Kubernetesクラスターをローカルで環境構築・実行してくれます。手っ取り早く利用することができます。Komposeは、Docker Composeファイル(設定ファイル)をKubernetes用に変換してくれます。要望に合わせてツールを選択することができます。 【参考】:Kubernetes ツール

今後オーケストレーション機能がより重視されます

img_docker-kubernetes_05

オーケストレーション機能は、管理を単純化し・高速・短期間のデプロイを容易にします。さらに負荷分散や障害復旧等の可用性向上をもたらします。コンテナ利用は従来の用途から業務範囲を拡大しており、より重要度の高い基幹業務用途でも徐々に利用されてきています。

そのためKubernetesの提供するオーケストレーション機能は、コンテナ利用で必須のソリューションとして一層利用されると考えられます。ぜひ必要なスキルアップを進めておくことをおすすめします。

気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【無料個別転職相談会】アプリケーションエンジニア向け!リモート・在宅勤務で働きたい方へ
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【無料個別転職相談会】アプリケーションエンジニア向け!リモート・在宅勤務で働きたい方へ
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT