
画像: Getty Images/iStockphoto
最近、読者からdocker buildとdocker-composeの違いについて問い合わせがありました。その時、コンテナの世界全体が初心者にとっていかに分かりにくいものであるかに気づきました。この技術を使い始めた頃、どれほど難解だと感じたかを思い出します。可動部分が多すぎるため、細かい部分に迷い込んでしまいがちです。一度迷ってしまうと、元の道に戻るのが難しくなることもあります。
あなたが知りたかったのは、データセンターにコンテナをデプロイする方法を学ぶことだけだった。そんなに簡単なことなんてあるだろうか?いいえ、そんな単純な話ではない。
ウサギの穴に飛び込んですべてを台無しにし、ゼロからやり直さなければならなくなったことが何度あったか分かりません。結局、途中で犯した単純なミスだったことがわかったのです。
あるいは最初から間違ったツールを使っていたのかもしれません。
まさにその通りです。これらのツールは非常に特殊な用途を持っています。ツールによっては、異なるイテレーション、フォーク、フレーバー、ブランドを持つものもあります。kubectl 、 minikube 、 k8s などが使えます。
docker、docker-compose、docker swarm、 Kubernetesの違いを説明することで、少しわかりやすく説明したいと思う。
参照: Kubernetes セキュリティ ガイド (無料 PDF) (TechRepublic)
少し前置き
「 dockerとdocker-composeはもう時代遅れじゃないの?」と疑問に思う方もいるかもしれません。Kubernetesの驚異的な人気を考えると、そう思われるかもしれませんが、Dockerは今もなお存在し、依然として重要な存在です。KubernetesはDockerのサポートを廃止したかもしれませんが、それでもDockerを使い続け、依存している企業やシステムも存在します。
大多数のエンタープライズビジネスでは Kubernetes が使用されています。
さて、それではこれらのツールの主な違いについてお話ししましょう。それほど時間はかからないと思いますので、ぜひじっくりとご検討ください。
これら3つの違いは何でしょうか?
一言でまとめると次のようになります。
Docker (具体的にはdockerコマンド) は個々のコンテナを管理するために使用され、docker-compose は複数のコンテナ アプリケーションを管理するために使用され、Kubernetes はコンテナ オーケストレーション ツールです。
もちろん、そんなに単純な話ではありません。Dockerには、 docker swarmというコンテナクラスタを管理する機能が組み込まれています。もう少し詳しく説明しましょう。
- Dockerは(多くの場合)コンテナに使用されるコア技術であり、単一のコンテナ化されたアプリケーションをデプロイできます。
- Docker Composeは、同じホスト上で複数のDockerコンテナを設定および起動するために使用されるため、各コンテナを個別に起動する必要はありません。
- Docker Swarmは、複数のホスト上でコンテナを実行および接続できるコンテナオーケストレーションツールです。
- KubernetesはDocker Swarmに似たコンテナオーケストレーションツールですが、自動化の容易さと高い需要に対応できる能力により、より幅広い魅力を持っています。
Docker SwarmとKubernetesの最大の違いは、使いやすさにあると言わざるを得ません。それぞれのネットワーク処理方法を見れば、この違いがよく分かります。Docker Swarmでコンテナクラスタをデプロイすると、dockerコマンド自体で外部ポートを内部ポートにリダイレクトしているため、通常、これらのコンテナはネットワークからアクセス可能になります。つまり、YAMLファイル内で別途ネットワーク層を設定する必要はありません。
ただし、Kubernetesでは、ネットワーク層を設定する必要があります(マニフェスト内でhostNetwork: trueなどの宣言を使用)。YAMLファイルにLANアクセス可能なネットワーク層を追加しないと、Kubernetesクラスター以外からコンテナにアクセスできなくなります。
結局のところ、Docker(あるいはDocker swarm)はKubernetesよりもはるかにシンプルですが、KubernetesはDockerよりもはるかにスケーラブルです。では、docker、docker-compose、Kubernetesのどれを使うべきでしょうか?という疑問に答えていきましょう。
- Docker – 単一の(ネットワークアクセス可能な)コンテナを展開したい場合
- Docker Compose – 単一のYAMLファイルから複数のコンテナを単一のホストにデプロイしたい場合
- Docker swarm – シンプルでスケーラブルなアプリケーションのためにDockerノード(複数のホスト)のクラスターを展開したい場合
- Kubernetes – スケーラブルで自動化されたコンテナの大規模な展開を管理する必要がある場合
そして、それは(少なくとも私の観点からは)これらのテクノロジー間の違い、類似点、使用例を理解するのに役立つはずです。
Jack Wallen によるビジネス プロフェッショナル向けの最新のテクノロジー アドバイスをすべて知るには、YouTube で TechRepublic の How To Make Tech Work を購読してください。