1.構建docker的flask鏡像

基於alpine鏡像構建本身的flask鏡像

python官方鏡像地址:python

http://hub.docker.com/_/pythondocker

拉取官方的python鏡像flask

docker pull python:3.7-alpine

交互式方式生成一個python容器瀏覽器

docker run -it --name python37 --rm python:3.7-alpine /bin/sh

進入交互式容器,查看當前python版本服務器

python --version

設置pip的阿里雲鏡像源app

mkdir $HOME/.pip/

tee $HOME/.pip/pip.conf <<-'EOF'
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple
EOF

確認一下是否配置成功curl

cat $HOME/.pip/pip.conf

咱們的python使用的是alpine系統ui

alpine使用的是apk包管理器阿里雲

命令如:url

apk add

apk update

apk del

alpine默認的鏡像源也比較慢,咱們也換成國內的

設置alpine鏡像源

echo http://mirrors.ustc.edu.cn/alpine/v3.7/main > /etc/apk/repositories

echo http://mirrors.ustc.edu.cn/alpine/v3.7/community >> /etc/apk/repositories

設置後要執行

apk update && apk upgrade

安裝flask

python -m pip install -U flask

編寫test.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!'

@app.route('/abc')
def abc():
    return 'Hello abc'

if __name__ == '__main__':
    app.run()

第一種執行這個py文件方式

python test.py

而後在另外一個終端以交互式方式進入這個python容器

docker exec -it python37 /bin/sh

下載curl命令

apk add curl

使用curl訪問flask服務

curl localhost:5000

curl localhost:5000/abc

第二種執行這個py文件的方式

# 設置環境變量
export FLASK_APP=/test.py

# flask運行起來
flask run

第三種執行這個py文件的方式

FLASK_APP=test.py flask run

根據上面的操做步驟,咱們能夠來編寫Dockerfile生成本身的flask鏡像

先退出上面的交互式容器,按:ctrl+D

建立一個flask目錄,並進入

mkdir flask

cd flask

建立一個pip.conf文件,將pip鏡像源寫進去

tee pip.conf <<-'EOF'
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple
EOF

編寫Dockerfile文件

FROM python:3.7-alpine
RUN echo http://mirrors.ustc.edu.cn/alpine/v3.7/main > /etc/apk/repositories && \
    echo http://mirrors.ustc.edu.cn/alpine/v3.7/community >> /etc/apk/repositories
RUN apk update && apk upgrade
RUN mkdir $HOME/.pip/
COPY ./pip.conf $HOME/.pip/
RUN pip install flask
EXPOSE 5000
CMD ["flask", "run"]

執行docker build命令進行鏡像構建

docker build -t myflask:1.0 .

確認是否構建成功

docker images

ok!鏡像構建成功!

怎麼運行??

建立一個myapp目錄

mkdir myapp

放入上面的test.py文件

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!'

@app.route('/abc')
def abc():
    return 'Hello abc'

if __name__ == '__main__':
    app.run()

而後經過剛剛構建的鏡像生成咱們的容器

docker run --name myapp --rm -d -p 8080:5000 -v ~/myapp:/app -e FLASK_APP=/app/test.py myflask:1.0

確認容器是否啓動

docker ps

恩,啓動了!

可是咱們沒法經過外網訪問服務器ip的8080端口訪問到容器裏面

爲何?

flash默認只容許本機訪問!

怎麼辦?

停掉剛剛生成的容器

docker stop myapp

從新生成容器,指定容許ip爲0.0.0.0,然外部能夠訪問

docker run --name myapp --rm -d -p 8080:5000 -v ~/myapp:/app -e FLASK_APP=/app/test.py myflask:1.0 flask run -h 0.0.0.0

經過外網瀏覽器訪問

http://服務器ip:8080

ok,能夠訪問到flask搭建的程序了!

原文連接:http://www.mi360.cn/articles/34

相關文章
相關標籤/搜索