源码下载,以及项目部署方法
源码下载地址 阿里效云 https://code.aliyun.com/734449600/dockerDeploryFlaskMysql/repository/archive.zip?ref=master
部署命令
解压mysqldata.zip 确定 文件夹中的 mysqldata的绝对路径 里边存放的 mysql 数据库结构以及配置文件 # 创建网路 docker network create --driver bridge --subnet 10.10.0.0/16 --gateway 10.10.0.1 mynet1 # 创建数据库 #注意把 C:/Users/73444/Desktop/mysqldata/data 换成 mysqldata 的绝对路径 docker run -di --name mysql1 -p 33306:3306 --net mynet1 --ip 10.10.10.11 -v C:/Users/73444/Desktop/mysqldata/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=lmk19980312 registry.cn-hangzhou.aliyuncs.com/mkmk/mysql:8-0-19 # 创建 flask 项目 docker run -di -p 35000:5000 --name flask_demo_cn --net mynet1 --ip 10.10.10.12 registry.cn-hangzhou.aliyuncs.com/mkmk/flask:studentTemperature
写作目的
python 课程又留了一个增删改查系统,不写吧又不行,重复工作吧又没有意义,然后就针对想要学习迅捷开发部署的 同学写个小教程
- 现在各种软件实在太多了,全部下载安装到电脑,简直不堪重负,
- 每款软件 配置都很繁琐,
- 项目复现困难, 做过的东西,用一次,下次又找不到了
- 便于服务迁移与部署升级
所以我们要学习迅捷开发部署,并且上传云端保存环境,直接复现查看效果
本次我们由于面向教学,大家很多没有linux 系统,所以直接在 win10 环境下进行教学
这次就做个简单的学生疫情统计网页吧。
安装docker
阿里 效云 下载
https://code.aliyun.com/734449600/DockerDesktopInstaller/raw/master/Docker%20Desktop%20Installer.exe
直接去官网下载也可以
网络环境搭建
我们本次只有两个网络节点, 一个 mysql节点, 一个 flask 节点
设计ip分配
mysql 10.10.10.11 3306 宿主机访问端口 33306
flask 10.10.10.12 5000 宿主机访问端口 35000
创建网络
docker network create --driver bridge --subnet 10.10.0.0/16 --gateway 10.10.0.1 mynet1
数据库搭建
创建mysql 容器环境
#从一开始就要挂在目录,当容器已经运行,再拷贝目录出来是会报错的 # 请先在本地创建持久化数据的文件夹 C:/Users/73444/Desktop/mysqldata/data # 创建容器 docker run -di --name mysql1 --net mynet1 --ip 10.10.10.11 -p 33306:3306 -v C:/Users/73444/Desktop/mysqldata/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=lmk19980312 registry.cn-hangzhou.aliyuncs.com/mkmk/mysql:8-0-19 # 进入容器 docker exec -it mysql1 /bin/bash 查看mysql 版本 ,大写 -V mysql -V mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL) 登录mysql mysql -u root -p 默认密码 lmk19980312 mysql> 授权远程登陆 mysql> GRANT ALL ON *.* TO 'root'@'%'; flush privileges; 更改加密规则 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 更新root用户密码 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'lmk19980312'; 刷新权限 flush privileges;
navicate 连接, 注意,我们由于采用了端口映射
mysql 端口在 33306 -p 33306:3306
创建 database ,table
不再复述网上教程很多,直接上结果
简单说明
id 是主键,自增
time 设成时间戳比较麻烦,我准备直接在python 中生成格式时间
stuno 学号
stuname 姓名
temperature 体温
python-flask后台开发
接口简述
insertRecord | 插入记录 |
delById | 删除记录通过id |
getAllRecord | 查看所有记录 |
getAbnRecorde | 查看不正常记录 |
结合业务需要,不能随意修改记录,
源代码已经上传至 阿里巴巴 效云
文件目录
jquery 结合 jinja2 前端页面开发
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="{{ url_for('static',filename='jquery-3.4.1/jquery-3.4.1.js') }}" ></script> </head> <style> body{ text-align:center;text-va} #divjuzhong{margin:0 auto;border:1px solid #000;width:300px;height:100px} .fa1{display: flex; justify-content: center; align-items: center;min-width: 1600px;min-height: 500px;} .fa2{min-width: 1400px; min-height: 300px; background-color: blanchedalmond;} .del1{} </style> <script type="text/javascript"> $(document).ready(function(){ $("#click1").click(function(){ if ( $('#input1').val().length<5 || $('#input2').val().length<2 || $('#input3').val().length != 4 ) { alert("请检查你的输入"); return } $.get("/insertRecord",{ stuNo: $('#input1').val() , stuName: $('#input2').val(), temperature: $('#input3').val()}, function (data) { alert("提交成功"); location.assign("/") }); }); }); function del1(id1){ $.get("/delById", { id: id1 }, function (data) { alert("删除成功" ); location.assign("/") }); }; function getAbn(){ $.get("/delById", function (data) { location.assign("/getAbnRecorde") }); }; function getall(){ $.get("/delById", function (data) { location.assign("/") }); }; </script> <body> <div class="fa1" > <div class="fa2"> <table border="1" style="background-color: aliceblue"> <tr> <td onclick="getall()">查看所有记录</td> <td style="width: 20px"> </td> <td onclick="getAbn()">查看异常记录</td> </tr> </table> <table border="2" class="fa2"> <caption>学生体温统计表</caption> {# 表头 #} <tr style="font-size: larger"> {% for item in heads %} <td> {{ item }} </td> {% else %} <td> {{ "服务器故障" }} </td> {% endfor %} </tr> <tr> <td></td><td></td> <td><input id="input1" type="text" size="15" min-length="30" placeholder="请输入 学号 大于五位"></td> <td><input id="input2" type="text" size="15" min-length="30" placeholder="请输入 姓名 大于两个字"></td> <td><input id="input3" type="text" size="15" min-length="30" placeholder="请输入 真实体温 例如 36.5"></td> <td id="click1" style="background-color: azure" > 提交 </td> </tr> {% for oneinfo in allinfo %} <tr style="font-size: medium"> <script language="JavaScript"> var id1=0 </script> {% for onestr in oneinfo %} <script language="JavaScript"> if (id1==0){id1='{{ onestr }}' } </script> <td> {{ onestr }} </td> {% else %} <td> {{ "服务器故障" }} </td> {% endfor %} <td onclick="del1(id1)" style="background-color: azure" > {{ "删除" }} </td> </tr> {% else %} <td> {{ "服务器故障" }} </td> {% endfor %} </table> </div> </div> </body> </html>
封装flask容器步骤
创建文件夹 flask_docker 名称随意
其中flask_demo 放置源代码
书写Dockerfile
#基于的基础镜像 FROM python:3 #代码添加到code文件夹 ADD ./flask_demo /usr/src/app # 设置app文件夹是工作目录 WORKDIR /usr/src/app # 安装支持 RUN pip install Flask==1.1.1 Jinja2==2.11.1 PyMySQL==0.9.3 cryptography -i https://pypi.tuna.tsinghua.edu.cn/simple CMD [ "python", "/usr/src/app/app.py" ]
创建镜像 命令最后的 点 . 不要省略 docker build -t registry.cn-hangzhou.aliyuncs.com/mkmk/flask:studentTemperature . 使用镜像 docker run -it -p 35000:5000 --name flask_demo_cn --net mynet1 --ip 10.10.10.12 registry.cn-hangzhou.aliyuncs.com/mkmk/flask:studentTemperature
此时访问 localhost:35000 即可 看到网页
完成
docker常用命令
#强制删除所有镜像和容器 docker stop -f $(docker ps -a -q) | docker rm -f $(docker ps -a -q) | docker rmi -f $(docker images -q) #查看镜像列表 docker images #删除单个镜像 docker rmi image-id #删除所有镜像 docker rmi $(docker images -q) #查看运行中的容器 docker ps #查看所有容器 docker ps -a #停止单个容器 docker stop container-id #停止所有容器 docker stop $(docker ps -a -q) #删除单个容器 docker rm container-id #删除所有容器 docker rm $(docker ps -a -q) #删除系统数据 docker system prune