Docker構建Python Web環境

出於尋找Docker對Python相關項目部署的學習,找到騰訊課堂NEXT公開課中【Docker構建Python Web環境】的課程,本文對其進行內容梳理及知識點彙總。python

該課程總計6小時左右,是個適合小白入門Docker部署的基礎課程。課程主要章節內容以下:mysql

系統及軟件配置:linux

Win10 + CentOS7 + Python3 + MySQL8 + PyCharm  + VMware15 pro + MobaXterm + Navicat Premium 12ajax

 

1、基礎篇算法

一、CentOS默認安裝了Python2,能夠再安裝Python3,原有Python2不作卸載,CentOS7存在對Python2程序依賴。sql

二、yum命令不能直接安裝Python,需先安裝epel源docker

yum install epel-release

三、Linux各文件夾含義數據庫

 1 /boot 該目錄默認下存放的是Linux的啓動文件和內核。  2 /bin 該目錄中存放Linux的經常使用命令。  3 /sbin 該目錄用來存放系統管理員使用的管理程序。  4 /var 該目錄存放那些常常被修改的文件,包括各類日誌、數據文件。  5 /etc 該目錄存放系統管理時要用到的各類配置文件和子目錄,例如網絡配置文件、Mysql配置文件。  6 /dev 該目錄包含了Linux系統中使用的全部外部設備,它其實是訪問這些外部設備的端口,如打印機等。  7 /mnt 臨時將別的文件系統掛在該目錄下。  8 /root 若是你是以超級用戶的身份登陸的,這個就是超級用戶的主目錄。  9 /home 若是創建一個名爲「xx」的用戶,那麼在/home目錄下就有一個對應的「/home/xx」路徑,用來存放該用戶的主目錄。 10 /usr 用戶的應用程序和文件幾乎都存放在該目錄下。 11 /lib 該目錄用來存放系統動態連接共享庫,幾乎全部的應用程序都會用到該目錄下的共享庫。 12 /opt 第三方軟件在安裝時默認會找這個目錄,因此你沒有安裝此類軟件時它是空的,但若是你一旦把它刪除了,之後在安裝此類軟件時就有可能碰到麻煩。 13 /tmp 用來存放不一樣程序執行時產生的臨時文件,該目錄會被系統自動清理乾淨。 14 /proc 能夠在該目錄下獲取系統信息,這些信息是在內存中由系統本身產生的,該目錄的內容不在硬盤上而在內存裏。 15 /misc 可讓多用戶堆積和臨時轉移本身的文件。 16 /lost+found 該目錄在大多數狀況下都是空的。但當忽然停電、或者非正常關機後,有些文件就臨時存放在這裏。
17 文件顏色的含義:藍色爲文件夾;綠色是可執行文件;淺藍色是連接文件;紅框文件是加了SUID位,任意限權;紅色爲壓縮文件;褐色爲設備文件。

四、經常使用Linux命令json

1 touch #建立空白文件 2 rm -rf  #刪除文件或文件夾(-r 表明遞歸操做 -f表明強制刪除) 3 mkdir #建立空文件夾 4 cd .. #返回上一層 5 tar      #壓縮解壓縮,參數-cvf壓縮,-xvf解壓縮 #.tar是Linux上面特有的壓縮文件格式,這種壓縮文件能夠保留文件的權限信息

2、Web篇flask

一、Flask框架跟Django比起來是一個輕量級的Web框架,它能夠經過第三方擴展增長功能。

二、Flask有很是多的擴張庫,開發者能夠自由選擇安裝:

1 Flask-Admin:增長後臺管理插件 2 Flask-Cache:鏈接Redis 3 Flask-Cors:ajax跨域 4 Flask-User:用戶管理模塊 5 Flask-Snow:雪花算法,生產全局惟一主鍵值 6 Flask-SSE:消息推送 7 Flask-SQLAlchemy:讀寫MySQL數據庫 8 Flask-Uploads:接受瀏覽器上傳的文件

三、Flask框架優勢:

  1. 入門簡單,能夠經過官方指南即可以清楚的瞭解Flask的運做留存
  2. 支持MVC模型(Model-View-Controller)
  3. Falsk能夠兼容多種數據庫、模板
  4. Flask的路由以及路由函數由修飾器設定,開發人員不須要藉助其餘文件匹配

 四、MVC模式:一個複雜的軟件系統,經過抽象成模型層(Model)、視圖層(View)和控制層(Controller),劃分出明確的職責

 

 五、Flask項目的藍圖功能能夠把WEB函數定義到不一樣的模塊中

 

 六、Flask定義模塊文件:首先建立Python文件,而後建立藍圖對象(Blueprint),把Web函數註冊到藍圖對象上面,最後再把藍圖對象註冊給Flask對象。

七、Flask模塊語言:

  1. Flask支持動態頁面技術,在後臺渲染出動態HTML頁面
  2. Jinja2是Python下一個被普遍應用的模板引擎,語法簡單易學
  3. Flask中的模板文件存放在templates目錄,圖片、樣式和腳本存放在static目錄

八、WEB方法中,render_template()函數用來把模板文件渲染成動態HTML

 

 九、模板文件中,雙大括號({{變量/表達式}})能夠對模板頁面插值

 

 十、部署Python項目的時候,爲了避免泄露Python程序代碼,全部咱們要編譯Python程序(pycharm項目文件夾會自動生成pyc文件)

 

 十一、Flask只容許本機訪問5000端口,若是外機訪問,需修改python源代碼,app.run(host='0.0.0.0')

十二、Linux開發5000端口持久生效:

1 firewall -cmd --zone=pulic --add-port=5000/tcp --permanent

 3、Docker篇

 一、虛擬化部署環境的重要性:

  1. 直接把程序按照或者部署在Linux操做系統上,很容易引起資源衝突(好比CentOS自帶MariaDB數據庫,再安裝MySQL數據庫會衝突)
  2. 程序卸載不乾淨,致使沒法安裝或部署新程序
  3. 每次部署以前要安裝不少軟件,修改複雜的配置文件
  4. 沒法讓服務器硬件資源實現多租戶服務
  5. 增大了在Linux系統上部署集羣和分佈式的難度

二、Vmware和Docker對比:

  1. Vmare是重量級虛擬機,每一個虛擬實例都虛擬了完整的硬件環境,因此對硬件要求較高
  2. Docker是輕量級虛擬機,只虛擬了少許的硬件設備,虛擬實例共享使用Linux內核

 

三、Docker是跨平臺的輕量級虛擬機,可是在Window和MacOS上面有部分功能沒法使用(Win10 有內置Linux虛擬機,故能運行Docker)

四、雲計算中的Docker虛擬機:

 

五、SELINUX是CentOS系統捆綁的安全服務程序,由於安全策略太過嚴格,建議關閉,修改/etc/selinux/config文件,設置SELINUX=disabled

六、使用yum命令安裝Docker服務便可

1 yum install docker -y #-y表明默認安裝

 

七、DockerHub是Docker公共鏡像倉庫,爲用戶提供大量的鏡像文件:https://hub.docker.com/,因爲國內網絡訪問DockerHub很慢,沒法下載鏡像文件,可使用Docker加速器:

sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://n1mngx9r.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

八、Docker 包含三個基本概念,分別是鏡像(Image)、容器(Container)和倉庫(Repository)。鏡像是 Docker 運行容器的前提,倉庫是存放鏡像的場所。

九、什麼是鏡像:

  1. 爲了快速打包和部署軟件環境,Docker引入鏡像機制
  2. 鏡像是一個配置好的只讀層軟件環境
  3. 咱們能夠經過dockerfile文件建立出鏡像,也能夠從Docker倉庫中下載到鏡像

十、什麼是容器:

  1. 容器是鏡像基礎之上建立出的虛擬實例,內容可讀可寫
  2. 一個Docker鏡像能夠建立出多個容器,並且容器直接相互隔離,部署的程序不會相互干擾
  3. 全部的容器直接使用書主機的Linxux內核、內存和硬盤,因此容器的性能很是接近於宿主機

十一、經常使用Docker命令:

 

 

 

十二、Docker網絡環境:容器默認會分配動態IP地址,會致使下次啓動容器時候IP地址發生變化,所以能夠建立一個Docker內部網段:

docker network create --subnet=172.18.0.0/16 mynet #建立18網段名稱爲mynet docker network rm mynet #刪除mynet網段

 

1三、建立容器示例(容器使用端口映射/目錄掛載/網絡分配技術):

docker run -it -d --name=p1 -p 9500:5000 -v /root/project:/root/project -net mynet --ip 172.18.0.2 python:3.8 bash #建立容器,-d後臺默認運行,--name容器名稱p1,-p端口映射宿主機9500端口,-v目錄掛載,-net使用mynet網絡並分配ip,使用python3:3.8鏡像,bash命令行界面

 

1四、容器安裝flask,可使用國內鏡像加快速度(sqlalchemy / mysql-connector-python):

docker exec -it p1 bash #進入p1容器
pip install flask -i https://pypi.tuna.tsinghua.edu.cn.simple/#清華大學鏡像

 

1五、用docker pull命令下載MySQL鏡像(爲確保部署沒問題,Win端與Linux的各軟件版本應儘可能保持一致)

 

 1六、建立MySQL容器:

docker run --name m1 -p 4306:3306 --net mynet --ip 172.18.0.3 -v /root/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -d mysql:8.0.18 #建立MySQL容器不須要加-it,--name容器名稱,--net分配網絡 -v目錄掛載(數據庫掛了文件仍能提取),-e用戶密碼 ,-d該容器建立即後臺運行

 

1七、建立Session類(用來鏈接數據庫)

from sqlalchemy.orm import sessionmaker #用以建立session類
from sqlalchemy import create_engine #保存數據庫鏈接信息
url="myslq+mysqlconnector://root:123456@192.168.99.49:4306/test" #數據庫用戶名密碼地址端口及庫名
engin=create_engine(url,pool_size=5)  #數據庫鏈接池對象個數
Session=sessionmaker(bind=engin) #建立session類

 

1八、執行查詢語句:先建立Session對象,而後才能夠執行SQL語句,最後還要關閉數據庫鏈接

session=Session() sql="select empno,ename,job from t_emp" cursor=session.execute(sql) result=cursor.fetchall() session.close()

 

最後補下課程連接:

https://ke.qq.com/course/478268?taid=4069730621541436

相關文章
相關標籤/搜索