容器改变了我们部署、扩展和管理应用程序的方式,将代码和依赖项打包成标准化的单元,能够在任何环境中一致地运行。在云环境中使用容器时,容器提供:
- 可移植性,可在开发、测试和生产环境之间移植。
- 可扩展性,能够快速适应流量和需求的变化。
- 高效性,与传统虚拟机相比,减少了开销。
在本教程中,我们将详细介绍如何设置云托管的容器化应用程序,内容包括:
- 容器基础知识以及它们为何适合云环境。
- 设置一个基于Docker的应用程序。
- 将容器部署到云服务提供商(以Google Cloud Platform为例)。
- 在云端扩展和管理您的容器。
容器基础知识:容器如何融入云工作流程
容器封装了运行应用程序所需的所有库和依赖项。与每个都有自己操作系统的传统虚拟机不同,容器共享主机操作系统,使其轻量且高效。
云端为何选择容器?
- 快速启动时间意味着能更快地扩展以处理可变流量。
- 跨环境的一致性 确保代码在从开发者笔记本到生产环境时的行为一致。
- 资源效率 可以在相同基础设施上实现高密度部署。
云容器化的核心组件
- 容器引擎:管理和运行容器(例如 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`。您应该会看到显示 “你好,云容器!“。
将容器部署到谷歌云平台(GCP)
在这一部分,我们将把容器镜像推送到谷歌容器注册表(GCR),并部署到谷歌Kubernetes引擎(GKE)。
第1步:设置GCP项目
1. 创建一个GCP项目。转到[Google Cloud控制台](https://console.cloud.google.com)并创建一个新项目。
2. 为您的项目启用Kubernetes引擎和容器注册表API。
第2步:将镜像推送到谷歌容器注册表
1. 为谷歌云标记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 中特定 Pod 的日志:
kubectl logs <POD_NAME>
2. 启用 GKE 仪表板以监视 Pod 状态和资源使用情况,并可视化管理部署。
结论:利用容器进行可扩展的云部署
本教程涵盖了:
- 使用 Docker 将 Node.js 应用程序容器化。
- 部署到 Google Kubernetes Engine(GKE)以实现可扩展的托管。
- 在云中有效地管理和扩展容器。
借助云中的容器,您的应用程序将获得可扩展性、可移植性和效率 — 确保它们准备好处理需求、快速适应并在各种环境中保持一致。
Source:
https://dzone.com/articles/a-step-by-step-guide-to-deploying-containers-in-the-cloud