使用 Docker、Kubernetes、Helm 和 AWS 的两层应用端到端部署

发布: (2026年1月2日 GMT+8 06:58)
7 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的具体文本内容,我将为您翻译成简体中文,并保留原始的格式、Markdown 语法以及技术术语。谢谢!

目录

  1. 什么是两层应用程序?
  2. 部署方法
  3. 准备 EC2 实例
  4. 在 Ubuntu 上安装 Docker
  5. 创建 Dockerfile
  6. 构建并运行容器
  7. Docker 网络
  8. 将镜像推送到 Docker Hub
  9. Docker Compose
  10. 访问应用程序
  11. 关键要点
  12. 总结
  13. 单命令及后续步骤

什么是两层应用?

A Two‑Tier Application consists of:

描述
应用层(后端)• 基于 Flask 的服务
• 处理业务逻辑、API 请求以及与数据库的通信
数据库层• MySQL 数据库
• 存储和管理应用数据,处理来自后端的查询

后端定义了应用的行为;数据库确保数据的持久性和一致性。

Deployment Approach

要保持简洁有序,部署分为 两个阶段

  1. Dockerfile(单容器聚焦) – 将 Flask 后端容器化。
  2. Docker Compose(多容器设置) – 同时运行 Flask 后端 MySQL 数据库。

这模拟了真实的开发工作流,并为后续迁移到 Kubernetes 打下基础。

准备 EC2 实例

  1. 启动一个 Ubuntu EC2 实例(例如 t2.micro),并将其命名为 2-tier-App-DEPLOYMENT
  2. 附加用于 SSH 访问的 私钥
  3. 目前使用默认的安全组设置;我们稍后会调整入站规则(允许端口 225000)。
# Example SSH command
ssh -i /path/to/your-key.pem ubuntu@<public‑ip>

在 Ubuntu 上安装 Docker

在实例上运行以下命令:

# Update package index
sudo apt-get update

# Install prerequisite packages
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# Add Docker’s official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Set up the stable repository
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Install Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# Verify installation
docker --version

提示: 如果遇到 Permission denied while trying to connect to the docker daemon socket,请将你的用户加入 docker 组:

sudo usermod -aG docker $USER
newgrp docker   # refresh group membership in the current session

创建 Dockerfile

  1. 克隆仓库:
git clone https://github.com/SAFI-ULLAHSAFEER/two-tier-flask-app.git
cd two-tier-flask-app
  1. 删除任何已有的 Dockerfile 并创建一个全新的:
rm -f Dockerfile
cat > Dockerfile :5000`.

(原始代码片段不完整;保持原样。)

构建与运行容器

(章节占位符 – 原始内容未包括除 Dockerfile 创建之外的明确步骤。)

Docker 网络

而不是使用 --link,创建一个隔离的网络:

docker network create twotier
docker network connect twotier mysql-db
docker network connect twotier flask-app

您可以验证网络成员关系:

docker network inspect twotier

将镜像推送到 Docker Hub

# Log in (you’ll be prompted for Docker Hub credentials)
docker login

# Tag the image for your repository (replace <your‑repo> with your Docker Hub repo)
docker tag two-tier-flask-app:latest <your‑repo>/two-tier-flask-app:latest

# Push the image
docker push <your‑repo>/two-tier-flask-app:latest

镜像现在已公开,可在任何主机上拉取。

Docker Compose

为什么使用 Docker Compose?

Docker Compose 让你可以在单个 YAML 文件中定义 两个容器(Flask 与 MySQL),并通过一条命令启动它们。

安装 Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" \
    -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

docker-compose.yml 说明

在项目根目录创建 docker-compose.yml

version: "3.9"

services:
  db:
    image: mysql:8.0
    container_name: mysql-db
    environment:
      MYSQL_ROOT_PASSWORD: RootPass123
      MYSQL_DATABASE: two_tier
      MYSQL_USER: appuser
      MYSQL_PASSWORD: AppPass123
    volumes:
      - mysql-data:/var/lib/mysql
      - ./message.sql:/docker-entrypoint-initdb.d/message.sql   # optional seed data
    ports:
      - "3306:3306"

  web:
    build: .
    container_name: flask-app
    depends_on:
      - db
    environment:
      DB_HOST: db
      DB_USER: appuser
      DB_PASSWORD: AppPass123
      DB_NAME: two_tier
    ports:
      - "5000:5000"

volumes:
  mysql-data:

关键点

指令原因
depends_on确保 MySQL 容器在 Flask 之前启动,避免连接错误。
volumes(命名)在容器重启后仍然保留 MySQL 数据。
./message.sql可选脚本,用于在首次启动时预填充数据库。
build: .使用当前目录下的 Dockerfile 构建 Flask 镜像。

提示: 使用在线 YAML 格式化工具或 yamllint 来确保缩进正确。

使用 Compose 运行应用

# 停止之前可能残留的容器
docker compose down

# 构建镜像并启动服务
docker compose up -d

检查状态:

docker compose ps

所有容器现在已运行在同一网络中,Flask 应用可通过 http://<host‑ip>:5000 访问。

访问应用程序

  1. 安全组 – 确保入站规则允许 TCP 流量通过 5000 端口(以及用于 SSH 的 22 端口)。
  2. 打开浏览器并访问:
http://<host‑ip>:5000

您应该会看到 Flask 应用的默认页面或 API 响应。

关键信息

AWS 云俱乐部 必须
AWS 学生社区日 Mirpur 2025

这些字符串是占位符,用于在应用程序或文档中显示任何品牌或特定活动的消息。

总结

我们已经完成了:

  • Containerized 一个使用 Dockerfile 的两层 Flask + MySQL 应用。
  • Builtrun 了各个容器,然后 networked 它们。
  • Pushed Flask 镜像到 Docker Hub,以便轻松分发。
  • 使用 Docker Compose Orchestrated 完整堆栈,处理启动顺序、持久化存储和环境配置。

此工作流相当于生产级的 DevOps 流水线,为进一步使用 Kubernetes、Helm 以及大规模 AWS 部署奠定了坚实的基础。祝你容器化愉快!

单命令 与 后续步骤

使用此工作流,您可以在任何地方共享、运行和扩展您的应用程序,从本地机器到云端。 🚀

后续步骤

  • 探索 KubernetesHelm,以编排更大的应用程序。
  • 将它们部署在像 AWS 这样的云平台上,提升您的容器化技能到更高水平!

保持实验,持续分享,让我们一起构建更智能、更快速且可扩展的应用程序。

Back to Blog

相关文章

阅读更多 »

RGB LED 支线任务 💡

markdown !Jennifer Davishttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex:我为何构建

介绍 大家好。今天我想分享一下我是谁、我在构建什么以及为什么。 早期职业生涯与倦怠 我在 17 年前开始我的 developer 生涯……