python官方镜像地址:
http://hub.docker.com/_/python
拉取官方的python镜像
1
|
docker pull python:3.7-alpine
|
交互式方式生成一个python容器
1
|
docker run -it --name python37 --rm python:3.7-alpine /bin/sh
|
进入交互式容器,查看当前python版本
设置pip的阿里云镜像源
1
2
3
4
5
6
7
|
mkdir $HOME/.pip/
tee $HOME/.pip/pip.conf <<-'EOF'
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple
EOF
|
确认一下是否配置成功
1
|
cat $HOME/.pip/pip.conf
|
我们的python使用的是alpine系统
alpine使用的是apk包管理器
命令如:
1
2
3
4
5
|
apk add
apk update
apk del
|
alpine默认的镜像源也比较慢,我们也换成国内的
设置alpine镜像源
1
2
3
|
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
|
设置后要执行
1
|
apk update && apk upgrade
|
安装flask
1
|
python -m pip install -U flask
|
编写test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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()
|
然后在另一个终端以交互式方式进入这个python容器
1
|
docker exec -it python37 /bin/sh
|
下载curl命令
使用curl访问flask服务
1
2
3
|
curl localhost:5000
curl localhost:5000/abc
|
1
2
3
4
5
|
# 设置环境变量
export FLASK_APP=/test.py
# flask运行起来
flask run
|
1
|
FLASK_APP=test.py flask run
|
创建一个flask目录,并进入
创建一个pip.conf文件,将pip镜像源写进去
1
2
3
4
5
|
tee pip.conf <<-'EOF'
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple
EOF
|
编写Dockerfile文件
1
2
3
4
5
6
7
8
9
|
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命令进行镜像构建
1
|
docker build -t myflask:1.0 .
|
确认是否构建成功
ok!镜像构建成功!
怎么运行??
创建一个myapp目录
放入上面的test.py文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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()
|
然后通过刚刚构建的镜像生成我们的容器
1
|
docker run --name myapp --rm -d -p 8080:5000 -v ~/myapp:/app -e FLASK_APP=/app/test.py myflask:1.0
|
确认容器是否启动
恩,启动了!
但是我们无法通过外网访问服务器ip的8080端口访问到容器里面
为什么?
flash默认只允许本机访问!
怎么办?
停掉刚刚生成的容器
重新生成容器,指定允许ip为0.0.0.0,然外部可以访问
1
|
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
|
通过外网浏览器访问
ok,可以访问到flask搭建的程序了!
原文链接:http://www.mi360.cn/articles/34