使用 Docker 部署 Python Flask 应用
一、Docker 安装
2.在 Docker Desktop 设置中启用了“Use the WSL 2 based engine”选项
3.docker --version,看到 Docker 的版本信息,表示安装成功
二、启用Kubernetes
1.打开 Docker Desktop,点击设置(齿轮图标)。
2.在左侧菜单中选择 Kubernetes,然后勾选 “Enable Kubernetes”。
3.点击 “Apply & Restart” 以启动 Kubernetes
4.设置registry-mirrors
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn"
]
或者开启vpn
5.执行kubectl get nodes
三、安装 kubectl
命令行工具
1.curl -LO "https://dl.k8s.io/release/v1.21.0/bin/windows/amd64/kubectl.exe"
2.将下载的 kubectl.exe
文件移动到某个位置。例如,可以将其放在 D:\kubectl\
目录下
3.设置环境变量
4.验证安装
kubectl version --client
四、搭建项目框架
1.
# app.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run(host='0.0.0.0', port=5002)
# Dockerfile # 使用官方的 Python 镜像作为基础镜像 FROM python:3.11-slim # 设置工作目录 WORKDIR /app # 复制依赖文件并安装 COPY requirements.txt requirements.txt RUN pip install -r requirements.txt # 复制应用代码 COPY . . # 暴露端口 EXPOSE 5002 # 运行应用 CMD ["python", "app.py"]
# requirements.txt Flask==3.0.3
2.构建 Docker 镜像
D:\Git_Files\study\temp_program\docker-k8s-flask-demo> docker build -t docker-k8s-flask-demo .
3.推送 Docker 镜像到镜像仓库(例如 Docker Hub)
①需要先登录
docker login
然后输入账号密码即可
②
docker tag docker-k8s-flask-demo:latest liwang1206docker/magicdocker:latest docker push liwang1206docker/magicdocker:latest
此时docker run -d -p 8009:5002 liwang1206docker/magicdocker:latest
访问localhost:8009能正常访问应用站点
以下未验证!!!
③创建 Kubernetes 部署文件(k8s/deployment.yaml
)
apiVersion: apps/v1 kind: Deployment metadata: name: flask-app-deployment spec: replicas: 3 selector: matchLabels: app: flask-app template: metadata: labels: app: flask-app spec: containers: - name: flask-app image: liwang1206docker/magicdocker:latest ports: - containerPort: 5002
④创建 Kubernetes 服务文件(k8s/service.yaml
)
apiVersion: v1 kind: Service metadata: name: flask-app-service spec: selector: app: flask-app ports: - protocol: TCP port: 80 targetPort: 5002 type: LoadBalancer
4.部署到 Kubernetes:
在docker-k8s-flask-demo
目录下运行以下命令:
kubectl apply -f k8s/deployment.yaml kubectl apply -f k8s/service.yaml
5.检查部署状态
kubectl get pods kubectl get services