使用 Docker、Kubernetes、Helm 和 AWS 的两层应用端到端部署
Source: Dev.to
请提供您希望翻译的具体文本内容,我将为您翻译成简体中文,并保留原始的格式、Markdown 语法以及技术术语。谢谢!
目录
- 什么是两层应用程序?
- 部署方法
- 准备 EC2 实例
- 在 Ubuntu 上安装 Docker
- 创建 Dockerfile
- 构建并运行容器
- Docker 网络
- 将镜像推送到 Docker Hub
- Docker Compose
- 访问应用程序
- 关键要点
- 总结
- 单命令及后续步骤
什么是两层应用?
A Two‑Tier Application consists of:
| 层 | 描述 |
|---|---|
| 应用层(后端) | • 基于 Flask 的服务 • 处理业务逻辑、API 请求以及与数据库的通信 |
| 数据库层 | • MySQL 数据库 • 存储和管理应用数据,处理来自后端的查询 |
后端定义了应用的行为;数据库确保数据的持久性和一致性。
Deployment Approach
要保持简洁有序,部署分为 两个阶段:
- Dockerfile(单容器聚焦) – 将 Flask 后端容器化。
- Docker Compose(多容器设置) – 同时运行 Flask 后端 和 MySQL 数据库。
这模拟了真实的开发工作流,并为后续迁移到 Kubernetes 打下基础。
准备 EC2 实例
- 启动一个 Ubuntu EC2 实例(例如
t2.micro),并将其命名为2-tier-App-DEPLOYMENT。 - 附加用于 SSH 访问的 私钥。
- 目前使用默认的安全组设置;我们稍后会调整入站规则(允许端口
22和5000)。
# 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
- 克隆仓库:
git clone https://github.com/SAFI-ULLAHSAFEER/two-tier-flask-app.git
cd two-tier-flask-app
- 删除任何已有的
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 访问。
访问应用程序
- 安全组 – 确保入站规则允许 TCP 流量通过 5000 端口(以及用于 SSH 的 22 端口)。
- 打开浏览器并访问:
http://<host‑ip>:5000
您应该会看到 Flask 应用的默认页面或 API 响应。
关键信息
AWS 云俱乐部 必须
AWS 学生社区日 Mirpur 2025
这些字符串是占位符,用于在应用程序或文档中显示任何品牌或特定活动的消息。
总结
我们已经完成了:
- Containerized 一个使用 Dockerfile 的两层 Flask + MySQL 应用。
- Built 并 run 了各个容器,然后 networked 它们。
- Pushed Flask 镜像到 Docker Hub,以便轻松分发。
- 使用 Docker Compose Orchestrated 完整堆栈,处理启动顺序、持久化存储和环境配置。
此工作流相当于生产级的 DevOps 流水线,为进一步使用 Kubernetes、Helm 以及大规模 AWS 部署奠定了坚实的基础。祝你容器化愉快!
单命令 与 后续步骤
使用此工作流,您可以在任何地方共享、运行和扩展您的应用程序,从本地机器到云端。 🚀
后续步骤
- 探索 Kubernetes 和 Helm,以编排更大的应用程序。
- 将它们部署在像 AWS 这样的云平台上,提升您的容器化技能到更高水平!
保持实验,持续分享,让我们一起构建更智能、更快速且可扩展的应用程序。