コンテナは、コードや依存関係を標準化された単位にパッケージ化し、どんな環境でも一貫して実行できるようにすることで、アプリケーションの展開、スケーリング、管理方法を変革しました。クラウド環境で使用すると、コンテナは以下を提供します:
- 開発、テスト、本番環境でのポータビリティ
- トラフィックや需要に迅速に適応するスケーラビリティ
- 従来の仮想マシンと比較してオーバーヘッドを削減した効率性
このチュートリアルでは、クラウドホストされたコンテナ化されたアプリケーションの完全なセットアップを行います。カバーする内容は以下です:
- コンテナの基礎とクラウドに最適な理由
- Docker化されたアプリケーションのセットアップ
- コンテナをクラウドプロバイダーに展開する方法(例としてGoogle Cloud Platformを使用)
- クラウドでのコンテナのスケーリングと管理
コンテナの基礎: コンテナがクラウドワークフローにどのように適合するか
コンテナは、アプリケーションを実行するために必要なすべてのライブラリと依存関係をカプセル化します。各々がOSを持つ従来の仮想マシンとは異なり、コンテナはホストOSを共有するため、軽量で効率的です。
クラウド向けのコンテナを選ぶ理由
- 高速な起動時間は可変トラフィックを処理するための迅速なスケーリングを意味します。
- 環境間の一貫性は、開発者のラップトップから本番環境まで、コードが同様に動作することを保証します。
- リソースの効率性は、同じインフラストラクチャ上での高密度デプロイを可能にします。
クラウドコンテナ化のコアコンポーネント
- コンテナエンジン: コンテナを管理および実行します(例:Docker、containerd)。
- オーケストレーション: アプリの信頼性、スケーリング、および負荷分散を保証します(例:Kubernetes、ECS)。
- レジストリ: 環境間でアクセスするためのコンテナイメージを保存します(例:Docker Hub、GCR)。
Docker化されたアプリケーションのセットアップ
シンプルなNode.jsアプリケーションをコンテナ化することから始めます。
ステップ1: アプリケーションを作成
1. プロジェクトフォルダで、Node.jsプロジェクトを初期化します:
mkdir cloud-container-app && cd cloud-container-app
npm init -y
2. 基本的なサーバーファイル、app.js
を作成します:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, Cloud Container!');
});
app.listen(3000, () => {
console.log('App running on port 3000');
});
3. プロジェクトにExpressを追加します:
npm install express
ステップ2: Dockerfileを作成
このDockerfileは、アプリをDockerコンテナにパッケージする方法を指定します。
# Use the Node.js image as a base
FROM node:14
# Set working directory
WORKDIR /app
# Copy files and install dependencies
COPY . .
RUN npm install
# Expose the app’s port
EXPOSE 3000
# Start the application
CMD ["node", "app.js"]
ステップ3: Dockerイメージをローカルでビルドしテスト
1. Dockerイメージをビルドします:
docker build -t cloud-container-app .
2. コンテナをローカルで実行します:
docker run -p 3000:3000 cloud-container-app
3. ブラウザで `http://localhost:3000` を開いてください。”Hello, Cloud Container!” と表示されるはずです。
Google Cloud Platform(GCP)にコンテナをデプロイする
このセクションでは、コンテナイメージをGoogle Container Registry(GCR)にプッシュして、Google Kubernetes Engine(GKE)にデプロイします。
ステップ 1: GCPプロジェクトの設定
1. GCPプロジェクトを作成します。[Google Cloud Console] (https://console.cloud.google.com) に移動して新しいプロジェクトを作成します。
2. プロジェクトにKubernetes EngineとContainer RegistryのAPIを有効にします。
ステップ 2: イメージをGoogle Container Registryにプッシュ
1. Google Cloud用にDockerイメージにタグを付けます:
docker tag cloud-container-app gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
2. イメージをGCRにプッシュします:
docker push gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
ステップ 3: Kubernetesクラスタの作成
1. GKEクラスタを初期化します:
gcloud container clusters create cloud-container-cluster --num-nodes=2
2. 新しいクラスタに接続するために kubectl
を構成します:
gcloud container clusters get-credentials cloud-container-cluster
ステップ 4: コンテナ化されたアプリをGKEにデプロイ
1. デプロイメントとサービスを定義する k8s-deployment.yaml
ファイルを作成します:
apiVersion apps/v1
kind Deployment
metadata
name cloud-container-app
spec
replicas2
selector
matchLabels
app cloud-container-app
template
metadata
labels
app cloud-container-app
spec
containers
name cloud-container-app
image gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
ports
containerPort3000
---
apiVersion v1
kind Service
metadata
name cloud-container-service
spec
type LoadBalancer
selector
app cloud-container-app
ports
protocol TCP
port80
targetPort3000
2. アプリケーションをGKEにデプロイします:
kubectl apply -f k8s-deployment.yaml
3. アプリにアクセスするための外部IPを取得します:
kubectl get services
GKEでコンテナのスケーリングと管理
ステップ 1: デプロイメントのスケーリング
レプリカの数を調整するには(たとえば、トラフィックを処理するために)、次のコマンドを使用します:
kubectl scale deployment cloud-container-app --replicas=5
GKEはアプリを自動的にスケーリングし、レプリカを追加して負荷を分散します。
ステップ2:ログの監視と管理
1. Kubernetes内の特定のポッドのログを表示するために、以下のコマンドを使用してください:
kubectl logs <POD_NAME>
2. GKEダッシュボードを有効にして、ポッドのステータスやリソース使用状況をモニタリングし、デプロイメントを視覚的に管理します。
結論:スケーラブルなクラウドデプロイメントのためのコンテナの活用
このチュートリアルでは:
- Dockerを使用してNode.jsアプリをコンテナ化する方法。
- スケーラブルで管理されたホスティングのためにGoogle Kubernetes Engine(GKE)にデプロイする方法。
- クラウド内でのコンテナの効果的な管理とスケーリング。
クラウド内のコンテナを使用することで、アプリケーションはスケーラビリティ、移植性、効率性を獲得し、需要に対応し、迅速に適応し、環境全体で一貫性を保ちます。
Source:
https://dzone.com/articles/a-step-by-step-guide-to-deploying-containers-in-the-cloud