ドッカー、コンテナよく聞きますね。それこそ10年前から。
弊社でもDocker利用はありますが、活用が進んでいるとは言えません。
今さらながらコンテナとは何かを、自分で理解するために調べてみました。またコンテナといえば必ず上がってくるDocker、Kubernetes、そしてそれらの違いについても調べてみました。
目次
コンテナとは
コンテナ(container)とは、アプリケーションの実行に必要な環境をパッケージする仮想化技術のことです。
コンテナというとみなさんも、船に積まれている鉄の箱や、大きなトラックで輸送している鉄の箱を目にしたことがあると思います。
仮想化技術のコンテナも船のコンテナと同様で、アプリケーションはミドルウェアなどをまとめ、軽量でスケール可能な形式でパッケージ化、ようは箱に入れるイメージです。このコンテナを利用することで実行環境に依存せず同じように動作させることができようになります。
仮想マシンとコンテナの違い
ページのみをこちらに置かせていただきまして、詳しくは下記ページを参照してください。
https://www.idcf.jp/words/container.html
メリット
1. 軽量で高速
これは実際にDockerを触ってみても感じます。
2. 移行・運用が楽
環境に依存しないため、本番環境とまったく同じ開発環境の構築が可能です。実際に楽です。
デメリット
1. コンテナに関する専門知識(学習コスト)が必要
運用はできたとしてもコンテナの作成からとなると学習にかける時間が必要になってきます。
2. ホストOSへの依存
ホストと同じOSファミリーである必要があります。
Windowsホスト上でLinuxコンテナを実行する場合など、異なるOSファミリーのコンテナを実行することはできません。
コンテナを扱うには
コンテナを扱うためには「Docker」「Kubernetes」などが代表的です。
Dockerとは
Docker は、アプリケーションをすばやく構築、テスト、デプロイできるソフトウェアプラットフォームです。Docker は、コンテナと呼ばれる標準化されたユニットにソフトウェアをパッケージ化します。コンテナには、ライブラリ、システムツール、コード、ランタイムなど、ソフトウェアの実行に必要なすべてのものが含まれています。Docker を使用すると、どのような環境にもアプリケーションをすばやくデプロイおよびスケールでき、コードを実行することができます。
https://aws.amazon.com/jp/docker/
Dockerといえばコンテナのイメージです。逆でもコンテナを扱うのであればDockerと認識される方も多いでしょう。
Dockerには上記にも上げましたがコンテナ型仮想化を使い、アプリケーションを開発・配置・実行するためのツールになります。
Kubernetesとは
Kubernetes (K8s)は、デプロイやスケーリングを自動化したり、コンテナ化されたアプリケーションを管理したりするための、オープンソースのシステムです。
https://kubernetes.io/ja/
読み方は「クバネティス」もしくは「クーベネティス」で「K8s」と表記されることもあります。もともとはGoogleが設計したもので、現在はCloud Native Computing Foundationがメンテナンスを行っています。
コンテナの運用管理をするためのツールで「コンテナオーケストレーションシステム」になります。
こちらもDockerより後に誕生していますが、利用されている方も多いと思われます。
DockerとKubernetesの違いは?
それぞれの説明にも書きましたが、Dockerはコンテナ型仮想化を使い、アプリケーションを開発・配置・実行するためのツール、Kubernetesはコンテナの運用管理をするツール、になります。
Dockerは1つのノード(サーバ)内で実行されるのに対し、Kubernetesはクラスター、いわゆる複数のノードにまたがったコンテナを管理できるものになります。
とは書いたものの、なかなかイメージしづらいかもしれませんが、Dockerで作成した複数のコンテナを1台の実況環境であるかのように管理できるものになります。
こちらにも記載がありました。
https://cloud-ace.jp/column/detail229/
したがいまして用途が別のものになります。どちらが良い悪いではなく、併用して使うことができます。
コンテナオーケストレーションシステムには何がある?
コンテナの運用管理をするためのツールが「コンテナオーケストレーションシステム」とありました。コンテナオーケストレーションシステムについても調べてみました。
https://xtech.nikkei.com/atcl/nxt/keyword/18/00002/080500086/
さらに調べると「ECS」「EKS」がでてきました。ECSは弊社でも利用しています。
ECSとEKSの違いはこちらにありました。
ECSとEKSの大きな違いは、ECSはAWSオリジナルのソフトウェアをベースに構築されている一方で、EKSはKubernetesをベースに構築されている、Kubernetesはオープンソースで世界中の開発者が開発を進めているという関係上、非常に機能が豊富で、アップデートも3か月に1回のペースで実施されています。
https://www.stylez.co.jp/aws_columns/cloud-native_development_on_aws_and_serverless/container_service_ecs_in_aws/
まとめ
コンテナといってもDockerのみを使っているというイメージがありました。コンテナ仮想化技術も改めて知ることができました。
またECSを利用しており、コンテナオーケストレーションサービスも使っているということが、今更ながら理解できました。
KubernetesやEKSといった他のコンテナオーケストレーションサービスも今後は使って、より良いコンテナ運用を目指したいと思います。