百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

(第一篇)记一次python分布式web开发(docker)

bigegpt 2024-09-27 00:40 4 浏览

作者:落阳

日期:2020-12-23

在一次项目开发中,决定使用docker+nginx+flask+mysql的技术栈来开发,用此系列文章记录开发的过程。

系列文章,当前为第一篇,记录一次python分布式web开发过程。

一、docker的安装


作为学生,想找到合适数量的计算机部署分布式系统是一个令人头疼的问题。所以打算在虚拟机上利用docker来部署伪分布式的系统,方便环境搭建、开发和二次部署。

docker定义如下(摘自百度百科):

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

docker的安装可参见官网:docker官方安装教程

安装完成后,运行下面的命令验证是否安装成功:

docker version
# 或者
docker info

docker安装完成之后,每一次使用docker命令都需要sudo权限,可以考虑把当前用户加入docker用户组或者进入sudo su模式,这里采用第二种方法。

二、拉取所需的镜像


根据采用的技术栈,目前确定需要拉取的镜像有nginx、python、mysql。

含flask框架的镜像可以在python镜像的基础上制作。

拉取镜像的命令如下:

docker pull mysql
# 拉取比较稳定的3.8版本的python即可
docker pull python:3.8
docker pull nginx

之后输入命令

docker images

即可查看拉取下来的镜像。

三、启动容器

由于这个分布式的项目需要启动多个容器,所以这里使用了docker-compose来配置和启动多个容器,docker-compose解释如下(摘自菜鸟教程):

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

windows和mac上在安装docker的同时会一起安装了docker-compose,linux需要额外安装。如果你电脑上有pip的话可以利用pip很容易的安装:

pip install docker-compose

之后docker-compose命令会默认处于环境变量之下,可以输入

docker-compose --help

检查是否安装成功。

之后就是配置docker-compose.yml文件,关于docker-compose的使用和配置文件的配置教程可以参考https://vuepress.mirror.docker-practice.com/compose/

目前配置如下:

version: "3.2"
services:
    flask1:
        image: python:3.8 
        container_name: flask1
        restart: always
        volumes: 
        - /root/myflask/estateProject:/estateProject
        - /root/myflask/uwsgi1:/uwsgi
        working_dir: /uwsgi
        command: /bin/bash -c "pip install -r /estateProject/requirements.txt -i https://pypi.douban.com/simple && uwsgi --ini uwsgi.ini"
    flask2:
        image: python:3.8
        container_name: flask2
        restart: always
        volumes: 
        - /root/myflask/estateProject:/estateProject
        - /root/myflask/uwsgi2:/uwsgi
        working_dir: /uwsgi
        command: /bin/bash -c "pip install -r /estateProject/requirements.txt -i https://pypi.douban.com/simple && uwsgi --ini uwsgi.ini"

    nginx:
        image: nginx
        container_name: nginx
        restart: always
        ports:
        - "127.0.0.1:8080:80"
        - "127.0.0.1:8081:443"
        volumes:
        - /root/mynginx/html:/usr/share/nginx/html
        - /root/mynginx/conf:/etc/nginx
        depends_on:
        - flask1
        - flask2

    mysql:
        image: mysql
        container_name: mysql
        restart: always
        command: --default-authentication-plugin=mysql_native_password
        networks:
            my-net:
                ipv4_address: 172.21.0.2
        volumes:
        - /root/mymysql:/docker-entrypoint-initdb.d
        environment:
        - MYSQL_DATABASE=estate_db
        - MYSQL_ROOT_PASSWORD=123456
        
networks:
   my-net:
      driver: bridge
      name: my-net
      ipam: 
        driver: default
        config:
          - subnet: 172.21.0.0/16
            gateway: 172.21.0.1

目前创建了四个容器一个网络。

两个flask容器都是用python:3.8基础上安装requirements.txt文档中的库。并且挂载了目录到宿主机上,避免在容器中的数据层的修改(在docker中不提倡直接修改容器中的数据层)。flask外面套了一层中间层uwsgi目的是让flask和反向代理nginx连接上,并且增加flask的稳定性。uwsgi.ini配置如下:

[uwsgi]
socket = 0.0.0.0:8080
chdir = /estateProject/
wsgi-file = run.py
callable = app
processes = 2
threads = 2

由于uwsgi不直接做服务器,而是作为一个类似中介般的存在,所以这里开放socket端口与nginx作连接以增加安全性和速度。

在mysql容器中的/docker-entrypoint-initdb.d目录下的sql、sh文件会被自动执行,详情参考官方文档https://hub.docker.com/_/mysql。这里将建库建表文件放到mymysql文件夹下并将/docker-entrypoint-initdb.d挂载到此文件夹,在mysql容器初始化时便自动建表,且方便二次修改。

其次,为了避免mysql容器每次启动会自动重新分配ip地址,docker-compose配置中创建了一个网络并为mysql固定了它的ip地址以便flask可以顺利稳定的连接上。

四、初步效果


通过上面的一系列配置,在虚拟机上输入url来查看效果http://127.0.0.1:8080/

效果如图

初步效果

以上是初步搭建出来的效果。

相关推荐

有些人能留在你的心里,但不能留在你生活里。

有时候,你必须要明白,有些人能留在你的心里,但不能留在你生活里。Sometimes,youhavetorealize,Somepeoplecanstayinyourheart,...

Python学不会来打我(34)python函数爬取百度图片_附源码

随着人工智能和大数据的发展,图像数据的获取变得越来越重要。作为Python初学者,掌握如何从网页中抓取图片并保存到本地是一项非常实用的技能。本文将手把手教你使用Python函数编写一个简单的百度图片...

软网推荐:图像变变变 一“软”见分晓

当我们仅需要改变一些图片的分辨率、裁减尺寸、添加水印、标注文本、更改图片颜色,或将一种图片转换为另一种格式时,总比较讨厌使用一些大型的图像处理软件,尤其是当尚未安装此类软件时,更是如此。实际上,只需一...

首款WP8.1图片搜索应用,搜照片得资料

首款WP8.1图片搜索应用,搜照片得资料出处:IT之家原创(天际)2014-11-1114:32:15评论WP之家报道,《反向图片搜索》(ReverseImageSearch)是Window...

分享一组美图(图片来自头条)(头条美女头像)

...

盗墓笔记电视剧精美海报 盗墓笔记电视剧全集高清种子下载

出身“老九门”世家的吴邪,因身为考古学家的父母在某次保护国家文物行动时被国外盗墓团伙杀害,吴家为保护吴邪安全将他送去德国读书,因而吴邪对“考古”事业有着与生俱来的兴趣。在一次护宝过程中他偶然获得一张...

微软调整Win11 24H2装机策略:6月起36款预装应用改为完整版

IT之家7月16日消息,微软公司今天(7月16日)发布公告,表示自今年6月更新开始,已默认更新Windows1124H2和WindowsServer2025系统中预装...

谷歌手把手教你成为谣言终结者 | 域外

刺猬公社出品,必属原创,严禁转载。合作事宜,请联系微信号:yunlugongby贾宸琰编译、整理11月23日,由谷歌新闻实验室(GoogleNewsLab)联合Bellingcat、DigD...

NAS 部署网盘资源搜索神器:全网资源一键搜,免费看剧听歌超爽!

还在为找不到想看的电影、电视剧、音乐而烦恼?还在各个网盘之间来回切换,浪费大量时间?今天就教你如何在NAS上部署aipan-netdisk-search,一款强大的网盘资源搜索神器,让你全网资源...

使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建

前言回顾在上一篇文章《搭建持久化的INFINIConsole与Easysearch容器环境》中,我们详细介绍了如何使用基础的dockerrun命令,手动启动和配置INFINICon...

为庆祝杜特尔特到访,这个国家宣布全国放假?

(观察者网讯)近日,一篇流传甚广的脸书推文称,为庆祝杜特尔特去年访问印度,印度宣布全国放假,并举办了街头集会以示欢迎。菲媒对此做出澄清,这则消息其实是“假新闻”。据《菲律宾世界日报》2日报道,该贴子...

一课译词:毛骨悚然(毛骨悚然的意思是?)

PhotobyMoosePhotosfromPexels“毛骨悚然”,汉语成语,意思是毛发竖起,脊梁骨发冷;形容恐惧惊骇的样子(withone'shairstandingonend...

Bing Overtakes Google in China's PC Search Market, Fueled by AI and Microsoft Ecosystem

ScreenshotofBingChinahomepageTMTPOST--Inastunningturnintheglobalsearchenginerace,Mic...

找图不求人!6个以图搜图的识图网站推荐

【本文由小黑盒作者@crystalz于03月08日发布,转载请标明出处!】前言以图搜图,专业说法叫“反向图片搜索引擎”,是专门用来搜索相似图片、原始图片或图片来源的方法。常用来寻找现有图片的原始发布出...

浏览器功能和“油管”有什么关联?为什么要下载

现在有没有一款插件可以实现全部的功能,同时占用又小呢,主题主要是网站的一个外观,而且插件则主要是实现wordpress网站的一些功能,它不仅仅可以定制网站的外观,还可以实现很多插件的功能,搭载chro...