基於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搭建的程序了!