日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

centos部署python flask_用Dockerfile部署你的Flask Web应用

發布時間:2023/12/10 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 centos部署python flask_用Dockerfile部署你的Flask Web应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景故事

話說去年年底給另外一個組的同事寫了一個簡單的工單查詢系統,用flask寫的,當時是部署在我們組的一臺測試物理機上,操作系統是Redhat 7。后來我們組的這臺測試物理機要做其它用途,領導給兩天時間讓把應用遷走,問了使用這個應用的同事,他們組自己有一臺測試機,可以部署到他們自己的測試機上,于是又搞一通部署。最近使用這個應用的同事又跑過來找我,說他們那臺測試機要重裝系統,有其它用途。徹底無語,忍無可忍了,用docker吧!搞完之后總結一下,記個筆記。

準備環境

Linux OS

[root@labhost ~]# cat /etc/redhat-releaseCentOS Linux release 7.8.2003 (Core)

Docker Engine

Docker安裝請參考官網:https://docs.docker.com/engine/install/centos/#install-using-the-repository

[root@labhost pyalpine]# docker versionClient: Docker Engine - Community Version: ? ? ? ? ? 19.03.12 API version: ? ? ? 1.40 Go version: ? ? ? go1.13.10 Git commit: ? ? ? 48a66213fe Built: ? ? ? ? ? ? Mon Jun 22 15:46:54 2020 OS/Arch: ? ? ? ? ? linux/amd64 Experimental: ? ? ?falseServer: Docker Engine - Community Engine: Version: ? ? ? ? ?19.03.12 API version: ? ? ?1.40 (minimum version 1.12) Go version: ? ? ? go1.13.10 Git commit: ? ? ? 48a66213fe Built: ? ? ? ? ? Mon Jun 22 15:45:28 2020 OS/Arch: ? ? ? ? linux/amd64 Experimental: ? ? false containerd: Version: ? ? ? ? ?1.2.13 GitCommit: ? ? ? 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: ? ? ? ? ?1.0.0-rc10 GitCommit: ? ? ? dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: ? ? ? ? ?0.18.0 GitCommit: ? ? ? fec3683

環境準備好之后開搞

#創建項目文件夾[root@labhost ~]# mkdir pyalpine#進入項目文件夾[root@labhost ~]# cd pyalpine#創建requirements.txt,實際項目開發中是直接用pip freeze直接生成,這里為了方便是手動創建的,而且這里面我只放了Flask,實際項目會有很多依賴包。[root@labhost pyalpine]# vim requirements.txt[root@labhost pyalpine]# cat requirements.txtFlask>=1.1.1,<1.2#創建app.py文件[root@labhost pyalpine]# vim app.py#代碼如下:[root@labhost pyalpine]# cat app.pyfrom flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world(): ? return 'Hello, Flask which is running on Docker container!'if __name__ == "__main__": ? app.run(debug=True, host="0.0.0.0", port="5000")#接下來我們創建Dockerfile,注意:Dockerfile的首字母是大寫!!![root@labhost pyalpine]# vim Dockerfile

Dockerfile內容如下:

[root@labhost pyalpine]# cat Dockerfile#拉取鏡像FROM python:3.7-alpine#指定工作目錄,目錄名稱自己定義,如果當前指定的目錄不存在的話,這個目錄會自動被創建WORKDIR /demoapp#復制當前文件夾下的所有項目文件到docker的工作目錄,也就是我們上面指定的目錄COPY ./ ./#根據requirements.txt文件,安裝相關依賴包RUN pip install -r requirements.txt#指定docker運行的時候默認執行的命令,我們想讓flask網站隨docker啟動時就運行CMD ["python", "app.py"]

接下來我們來構建我們自己的docker image:(注意不要把點號給遺漏了!-t參數指定tag,也就是你的docker image叫什么名字)

[root@labhost pyalpine]# docker build . -t mypyalpineSending build context to Docker daemon ?4.096kBStep 1/5 : FROM python:3.7-alpine ---> 6ca3e0b1ab69Step 2/5 : WORKDIR /demoapp ---> Using cache ---> c89343983176Step 3/5 : COPY ./ ./ ---> 2cb8fce548c8Step 4/5 : RUN pip install -r requirements.txt ---> Running in 00911a463614Collecting Flask<1.2,>=1.1.1 Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB)Collecting itsdangerous>=0.24 Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)Collecting Jinja2>=2.10.1 Downloading Jinja2-2.11.2-py2.py3-none-any.whl (125 kB)Collecting click>=5.1 Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)Collecting Werkzeug>=0.15 Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)Collecting MarkupSafe>=0.23 Downloading MarkupSafe-1.1.1.tar.gz (19 kB)Building wheels for collected packages: MarkupSafe Building wheel for MarkupSafe (setup.py): started Building wheel for MarkupSafe (setup.py): finished with status 'done' Created wheel for MarkupSafe: filename=MarkupSafe-1.1.1-py3-none-any.whl size=12629 sha256=f9ec10f37be2db2c6a39211640b9b8336c7be48743dd4a91d13db0ea5e8fe727 Stored in directory: /root/.cache/pip/wheels/b9/d9/ae/63bf9056b0a22b13ade9f6b9e08187c1bb71c47ef21a8c9924Successfully built MarkupSafeInstalling collected packages: itsdangerous, MarkupSafe, Jinja2, click, Werkzeug, FlaskSuccessfully installed Flask-1.1.2 Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2 itsdangerous-1.1.0Removing intermediate container 00911a463614 ---> 12e21da37c96Step 5/5 : CMD ['python', 'app.py'] ---> Running in ad78a874fd79Removing intermediate container ad78a874fd79 ---> f0d4b0160413Successfully built f0d4b0160413Successfully tagged mypyalpine:latest

恭喜你,你已經成功構建了一個自己的docker image:mypyalpine,那我們現在來讓他跑起來:

[root@labhost ~]# docker run -p 5050:5000 --name myflask mypyalpine * Serving Flask app "app" (lazy loading) * Environment: production ? WARNING: This is a development server. Do not use it in a production deployment. ? Use a production WSGI server instead. * Debug mode: on * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 236-169-898

簡單介紹一下:

  • docker run:想要跑一個docker,必須要敲的命令

  • -p 5050:5000:指定端口映射,冒號前面的是暴露到外面的端口號,冒號后面的是在docker里面的端口號

  • --name ?myflask:指定將要跑起來的docker的名稱,可選參考,但是推薦加上,否則docker服務會自己隨機給你的docker起個名字,你都不認識,所以自己的孩子還是起個好聽點的名字,方便自己記憶和使用。

  • mypyalpine:這個是上一步我們構建docker image時,給image起的名字,這個必須指定,別指定錯了。

小伙伴發現了沒有,上面我們運行docker之后,終端直接顯示的我們的flask程序啟動的信息,沒辦法再輸入其它命令了,如果你想繼續輸入指令怎么搞?所以上面運行docker的命令格式不是太好,我們再來改造一下,讓我們的docker啟動之后在后臺運行,只需加上一個 -d參數即可,然后我們再用docker ps來查看正在運行的container信息:

[root@labhost pyalpine]# docker run -d -p 5050:5000 --name myflask mypyalpined464fd0fa04893db4640cc3f2afe201ca07718978bc55f7a17bcc909cab25475[root@labhost pyalpine]# docker psCONTAINER ID ? ? ? IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? PORTS ? ? ? ? ? ? ? ? ? NAMESd464fd0fa048 ? ? ? mypyalpine ? ? ? ? ?"python app.py" ? ? 3 seconds ago ? ? ? Up 2 seconds ? ? ? ?0.0.0.0:5050->5000/tcp ? myflask[root@labhost pyalpine]#

注意:如果你第一次運行docker run沒有加 -d參數,想再次運行docker run加-d參數,是會報錯的,此時你需要先停止當前運行的container,然后刪除container,最后再運行加上 -d參數的命令就可以了。

[root@labhost ~]# docker run -d -p 5050:5000 mypyalpine387d43c0920574fd8ea7c75db611c74de7fbc4bdb5be2961246fb8642ad7bc5cdocker: Error response from daemon: driver failed programming external connectivity on endpoint quizzical_bassi (0696007b82f3f83880fc6b43830b5b6680bf8cfc6cd48856fd7b504dc0e87abc): Bind for 0.0.0.0:5050 failed: port is already allocated.[root@labhost ~]# docker psCONTAINER ID ? ? ? IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? PORTS ? ? ? ? ? ? ? ? ? NAMES42b0bd3bf39c ? ? ? mypyalpine ? ? ? ? ?"python app.py" ? ? 4 hours ago ? ? ? ? Up 4 hours ? ? ? ? ?0.0.0.0:5050->5000/tcp ? goofy_faraday[root@labhost ~]# docker stop 42b0bd3bf39c42b0bd3bf39c[root@labhost ~]# docker rm 42b0bd3bf39c42b0bd3bf39c[root@labhost pyalpine]# docker run -d -p 5050:5000 --name myflask mypyalpined464fd0fa04893db4640cc3f2afe201ca07718978bc55f7a17bcc909cab25475[root@labhost pyalpine]# docker psCONTAINER ID ? ? ? IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? PORTS ? ? ? ? ? ? ? ? ? NAMESd464fd0fa048 ? ? ? mypyalpine ? ? ? ? ?"python app.py" ? ? 3 seconds ago ? ? ? Up 2 seconds ? ? ? ?0.0.0.0:5050->5000/tcp ? myflask[root@labhost pyalpine]#

我們現在來訪問一下flask網站:http://192.168.137.200:5050

可能大家對上面我們拉取的base image有點疑問,為什么選擇python:3.7-alpine這個image作為我們的base image來構建我們的docker?原因很簡單:身材苗條。我們可以看一下build好的image mypyalpine大小和一個ubuntu或者centos的image大小比較:

  • myflask這個是我用python:3.6這個base image構建的,925MB,將近1GB.

  • mypyalpine這個是我們用python:3.7-alpine構建的,只有83.8MB,不到100MB.

[root@labhost pyalpine]# docker imagesREPOSITORY ? ? ? ? TAG ? ? ? ? ? ? ? ? IMAGE ID ? ? ? ? ? CREATED ? ? ? ? ? ? SIZEmypyalpine ? ? ? ? latest ? ? ? ? ? ? 160344652c41 ? ? ? 35 minutes ago ? ? 83.8MBmyflask ? ? ? ? ? ? latest ? ? ? ? ? ? c35e990ccb0c ? ? ? About an hour ago ? 925MBpython ? ? ? ? ? ? 3.6 ? ? ? ? ? ? ? ? e0373ff33a19 ? ? ? 9 days ago ? ? ? ? 914MBpython ? ? ? ? ? ? 3.7-alpine ? ? ? ? 6ca3e0b1ab69 ? ? ? 9 days ago ? ? ? ? 73.1MBbusybox ? ? ? ? ? ? latest ? ? ? ? ? ? c7c37e472d31 ? ? ? 10 days ago ? ? ? ? 1.22MBubuntu ? ? ? ? ? ? latest ? ? ? ? ? ? 74435f89ab78 ? ? ? 3 weeks ago ? ? ? ? 73.9MBcentos ? ? ? ? ? ? latest ? ? ? ? ? ? 831691599b88 ? ? ? 3 weeks ago ? ? ? ? 215MB

最后,Enjoy your Docker!

總結

以上是生活随笔為你收集整理的centos部署python flask_用Dockerfile部署你的Flask Web应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91视频a| 欧美黑吊大战白妞欧美大片 | 黄色va| 国产精品一二三区在线观看 | heyzo朝桐光一区二区 | 91视频在线| 欧美一区二区三区成人精品 | 男人看的网站 | 污网站免费在线 | 中国女人真人一级毛片 | 日本一级黄色 | 亚洲综合激情网 | 亚洲一区在线观看视频 | 齐天大性床战铁扇公主 | 天堂中文字幕在线 | 人善交videos欧美3d动漫 | 吊侵犯の奶水授乳羞羞漫画 | 国产精品五月天 | 色就是欧美| 爱爱精品视频 | 丁香综合网 | 精品国产制服丝袜高跟 | 无人在线观看的免费高清视频 | 国产伦精品一区二区. | 国产精品久久久久久亚洲毛片 | 国产剧情久久 | 深夜福利在线免费观看 | 国产精品视频久久久久久久 | 国产精品无码一区二区三 | 999视频在线播放 | 少妇熟女一区 | 人妻少妇精品无码专区 | 插插插网站 | 伊人论坛| 乱人伦xxxx国语对白 | 黄页免费网站 | 久久99影院 | 欧美另类极品videosbest使用方法 | 欧美精品免费看 | 激情的网站 | 福利视频一区二区 | 亚洲爱爱av | 波多野结衣调教 | 亚洲欧美一区在线 | 国产毛片久久久久 | 亚洲第一色网站 | 久久久久久蜜桃一区二区 | 亚洲欧美另类在线观看 | 摸一摸操一操 | 激情视频网站在线观看 | 老汉av | 日本国产一区 | 91九色中文 | www.超碰97 | 成年免费视频 | 国产嫩草影院久久久久 | 特级淫片裸体免费看 | 亚洲伦理在线播放 | 伊人久久大香线蕉综合网站 | 日批在线 | 日韩在线色| 一眉道姑 | 极品尤物在线观看 | 丝袜ol美脚秘书在线播放 | 免费国产在线观看 | 欧美69精品久久久久久不卡 | 欧洲日韩一区二区三区 | 丁香七月婷婷 | 欧美日韩亚洲另类 | 9999国产精品 | 亚洲欧美日韩中文字幕在线观看 | 久久国产精品影视 | 国产精品一区二区av白丝下载 | 最新黄色av网站 | 日日摸日日操 | 免费播放片大片 | av网页在线观看 | 一级黄色在线观看 | 欧美三级视频 | 一区二区三区精品久久久 | 亚洲一区二区三区免费在线观看 | 国产xxx视频 | 波多野结衣99 | 国产精品嫩草69影院 | 老汉av| 亚洲欧洲一区 | av中文字幕亚洲 | 亚洲国产中文字幕在线观看 | 欧美性69| 久久久久久人妻一区二区三区 | 久久91精品 | 波多野结衣喷潮 | 久久午夜电影网 | 一级做a爱片性色毛片 | 久久国产精品免费视频 | 邻居少妇张开腿让我爽了在线观看 | 色综合久久天天综合网 | 中文字幕乱码一区二区三区 | 精品美女久久 |