1. 概要
コンテナ化されたアプリケーションを扱う場合、このコンテキストでDockerComposeとKubernetesが果たす役割を知りたい場合があります。
このチュートリアルでは、2つの違いを確認するために、最も一般的な使用例のいくつかについて説明します。
2. DockerCompose
Docker Compose は、YAMLテンプレート定義を使用して複数のDockerコンテナーを実行するためのコマンドラインツールです。 既存のイメージまたは特定のコンテキストからコンテナーを構築できます。
作成ファイル形式のバージョンと少なくとも1つのサービスを追加できます。 オプションで、追加できますボリュームとネットワーク。 また、依存関係と環境変数を定義できます。
2.1. DockerComposeテンプレート
PostgreSQLデータベースに接続するAPI用のdocker-compose.ymlファイルを作成しましょう。
version: '3.8'
services:
db:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- '5432:5432'
volumes:
- db:/var/lib/postgresql/data
networks:
- mynet
api:
container_name: my-api
build:
context: ./
image: my-api
depends_on:
- db
networks:
- mynet
ports:
- 8080:8080
environment:
DB_HOST: db
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: postgres
networks:
mynet:
driver: bridge
volumes:
db:
driver: local
最後に、以下を実行することにより、ローカルまたは本番環境での作業を開始できます。
docker-compose up
2.2. DockerComposeの一般的なユースケース
通常、Docker Composeを使用して、ネットワークを介してさまざまなサービスをリンクするマイクロサービスインフラストラクチャ環境を作成します。
さらに、Docker Composeは、テストスイートの分離されたテスト環境を作成および破棄するために広く使用されています。
さらに、スケーラビリティに関心がある場合は、 Docker Swarm —Kubernetesのようなオーケストレーションレベルで動作するようにDockerによって作成されたプロジェクトを見ることができます。
ただし、Kubernetesと比較すると、DockerSwarmのサービスは限られています。
3. Kubernetes
Kubernetes (K8sとも呼ばれます)を使用すると、コンテナ化およびクラスター化された環境でのアプリケーションのデプロイと管理が自動化されます。 GoogleのK8に関する最初の作業は、オープンソースから Linux Foundation への寄付、そして最終的には Cloud Native Computing Foundation(CNCF)を開始するためのシードテクノロジーとして行われました。
コンテナの時代に、Kubernetesは、現在最も人気のある分散システムオーケストレーターであるという点で大きな注目を集めました。
完全なAPIを使用して、Kubernetesのオブジェクトの仕様とステータスを説明できます。 また、サードパーティのソフトウェアとの統合も可能です。
Kubernetesでは、異なるコンポーネントと呼ばれる一連のワーカーマシンで構成されるクラスターの一部ですノード。 The ノードコンテナ化されたアプリケーションを内部で実行していますポッド 。
Kubernetesは、仮想マシンまたはノードのポッドにデプロイされたアーティファクトを管理することを目的としています。 ノードとそれらが実行するコンテナーはすべてクラスターとしてグループ化され、各コンテナーにはエンドポイント、DNS、ストレージ、およびスケーラビリティーがあります。
ポッドは非永続的なリソースです。 たとえば、 Deployment は、それらを動的に作成および破棄できます。 通常、アプリケーションを Services として公開して、常に同じエンドポイントで利用できるようにすることができます。
3.1. Kubernetesテンプレート
Kubernetesは宣言型または命令型のアプローチを提供するため、テンプレートを使用してオブジェクトを作成、更新、削除、さらにはスケーリングすることができます。 例として、Deploymentのテンプレートを定義しましょう。
-- Postgres Database
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgresql
namespace: Database
spec:
selector:
matchLabels:
app: postgresql
replicas: 1
template:
metadata:
labels:
app: postgresql
spec:
containers:
- name: postgresql
image: postgresql:latest
ports:
- name: tcp
containerPort: 5432
env:
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_PASSWORD
value: postgres
- name: POSTGRES_DB
value: postgres
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
persistentVolumeClaim:
claimName: postgres-data
-- My Api
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-api
namespace: Api
spec:
selector:
matchLabels:
app: my-api
replicas: 1
template:
metadata:
labels:
app: my-api
spec:
containers:
- name: my-api
image: my-api:latest
ports:
- containerPort: 8080
name: "http"
volumeMounts:
- mountPath: "/app"
name: my-app-storage
env:
- name: POSTGRES_DB
value: postgres
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_PASSWORD
value: password
resources:
limits:
memory: 2Gi
cpu: "1"
volumes:
- name: my-app-storage
persistentVolumeClaim:
claimName: my-app-data
その後、 kubectl コマンドラインを使用して、ネットワーク経由でオブジェクトを使用できます。
3.2. Kubernetesとクラウドプロバイダー
Kubernetesは、Infrastructure-as-Code(IaC)自体ではありません。 ただし、AmazonのECSまたはEKS、GoogleのGKE、RedHatのOpenShiftなどのクラウドプロバイダーのコンテナーサービスと統合されます。
または、たとえば、Helmなどのツールで使用できます。
パブリッククラウドインフラストラクチャでKubernetesをよく目にします。 ただし、MinikubeまたはローカルKubeadmクラスターをセットアップできます。
また、CNCFによって承認されており、K8sの軽量バージョンであるK3sをチェックアウトできます。
4. KubernetesとDockerComposeの違い
Docker Composeは、1つまたは複数のコンテナーを作成して開始することを目的としていますが、Kubernetesは、コンテナーをオーケストレーションできるネットワークを作成するためのプラットフォームとしての役割を果たします。
Kubernetesは、アプリケーション管理における多くの重大な問題を促進することができました。
- リソースの最適化
- コンテナの自己修復
- アプリケーションの再デプロイ中のダウンタイム
- 自動スケーリング
最後に、Kubernetesは、複数の分離されたコンテナを、潜在的な最適な分散でリソースが常に利用できる段階に移行します。
ただし、開発に関しては、Docker Composeは、自動テストなどを開始するために、アプリケーションのすべてのサービス依存関係を構成できます。 したがって、これはローカル開発のための強力なツールです。
5. 結論
この記事では、DockerComposeとKubernetesの違いについて説明しました。 Docker Composeは、マルチコンテナーDockerアプリケーションを定義して実行する必要がある場合に役立ちます。
Kubernetesは、クラスター化された環境でコンテナー化されたアプリケーションを管理するための強力でありながら複雑なフレームワークです。