實戰(zhàn)Docker部署Flask后端Api并部署云托管服務(wù)
??想了解更多關(guān)于開源的內(nèi)容,請訪問:??
在??上篇文章??我們講了怎么用docker部署nginx應(yīng)用網(wǎng)站,這篇文章我們就來部署我們的后端api。我們這次嘗試在服務(wù)器和微信云托管都進(jìn)行部署,部署于云托管也是現(xiàn)在個人開發(fā)者的另一種選擇(個人覺得?。┎挥米约哼\維確實省事而且還可以可視化監(jiān)控資源。而且微信云托管有個好處就是可以在小程序公眾號進(jìn)行內(nèi)網(wǎng)連接,從而避免了可能的ddos。
準(zhǔn)備工作
準(zhǔn)備docker,準(zhǔn)備一個后端,這里演示的是用python flask框架做的一個后端,這個框架的一個好處就是簡單,輕量。我的后端太長就不展示給大家了,大家可以使用下面的代碼進(jìn)行操作。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'hello docker&flask'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 5000)))
下載docker
這里我們使用docker來進(jìn)行部署,所以我們需要先去下載一下docker。詳細(xì)的可以看我??這篇文章??,這里我們就加加速。這里是對于服務(wù)器的操作,對于云托管的比較簡單。
1、卸載舊版本
首先先使用:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
卸載舊版本,如果有的話(看情況自己判斷)。
2、設(shè)置下載源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
設(shè)置好了之后就可以進(jìn)行下載了,下面是下載代碼。
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
注意:這樣下載的是最新版本的,如果需要下載指定版本的話可以看我上面說的那篇文章。
3、設(shè)置鏡像加速
選擇很多
科大鏡像:https://docker.mirrors.ustc.edu.cn/
網(wǎng)易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
七牛云加速器:https://reg-mirror.qiniu.com
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{ "registry-mirrors": ["你的加速地址"] }
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
完成之后可以使用docker info來查看是否修改成功。
這個registry mirrors變成你寫進(jìn)去的地址那么就成功了。然后我們需要先將我們的后端代碼放進(jìn)我們的服務(wù)器里。
4、放入文件
找到你python文件的地址,使用ftp傳入到一個你喜歡的位置像我這樣。
cd 進(jìn)入然后打開Xftp將文件傳入。
Dockerfile文件
這里的這個Dockerfile,這里可以在你的編輯器(pycharm)這些編寫好了放進(jìn)去,或者在服務(wù)器里自行創(chuàng)建都可,我這里是在編輯器中先創(chuàng)建好了,但是我在服務(wù)器中進(jìn)行了修改。
注意:這里我命名為官方推薦命名(Dockerfile),這樣命名的話不需要自己指定文件,否則build的時候需要自行指定文件。
requirements文件
這個文件的話在pycharm中也是很好生成的。我們只需創(chuàng)建這個文件(requirements.txt)然后他就會有提示。
這樣就生成好了。
最后就是這樣一個結(jié)構(gòu)。
5、配置Dockerfile
接下來我們只需配置好Dockerfile文件就基本大功告成了。并且也不難。而且這個文件也可以在云托管中進(jìn)行使用。配置如下:
# 先下載一個可以運行flask的基礎(chǔ)鏡像
FROM tiangolo/uwsgi-nginx-flask:python3.6
# 設(shè)置作者信息
MAINTAINER Aasee<xxx .com>
# 設(shè)置工作目錄
WORKDIR /app
# 將當(dāng)前目錄下的所有文件復(fù)制到docker引擎中的工作目錄
COPY . /app
# 安裝依賴
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 暴露端口
EXPOSE 5000
# 執(zhí)行我們的腳本文件
CMD ["python3", "main.py","0.0.0.0","5000"]
這個應(yīng)該不難理解并且我也做了詳細(xì)的注釋。這樣我們的 Dockerfile文件就算配置完成了。接下來就可以去build執(zhí)行創(chuàng)建鏡像了。
創(chuàng)建鏡像
docker build -t python-flask01。
大家一定要記住后面還有一點(.)。我這里就忘記了,詳細(xì)的dockerfile教程可以看我??這篇文章??里面還是蠻詳細(xì)的大家可以看看。
我的網(wǎng)不太好大約一分鐘左右完成。耐心等待一會。
完成后使用docker images命令查看生成的鏡像,可以看到第一個就是我創(chuàng)建的鏡像。
運行容器
docker run -it --name aasee-flask01 -p 5000:5000 python-flask01。
我這里使用的是-it而不是后臺運行,大家也可以使用-d進(jìn)行后臺運行。
這樣就運行成功了。
我們可以去postman測試以下或者直接在網(wǎng)頁上測試一下接口,都是可以的。這里我就去postman測試了。
ok測試成功。說明服務(wù)可行。后端就基本上線了。日志文件可以通過,docker logs + 容器名或容器id。
云托管部署
云托管部署當(dāng)我們寫出dockerfile文件之后就變得很簡單了。首先先注冊一個號 廢話 。
創(chuàng)建好環(huán)境之后我們再新建一個服務(wù),不使用模板,之后選擇手動上傳。
選擇剛剛我們上傳到服務(wù)器的目錄文件夾。點擊高級設(shè)置,選擇有dockerfile文件,云托管說白了就是一個docker。然后部署就行了。
這樣就部署完成了。接下來就可以使用它作為我們的后臺了,當(dāng)然前端頁面也是如此使用。至于到底使用哪個好點,大家自己酌情選擇。