前言: 关于streamlit
关于streamlit:
- 官网:https://streamlit.io/
- 官网简单介绍视频:https://www.bilibili.com/video/BV1gb4y187dh
- 相关介绍:
Docker 部署Streamlit项目 | Streamlit如何部署到云服务器
1、安装docker
- 注:安装之前,先关闭SELINUX服务
SELINUX是CentOS系统捆绑的安全服务程序,因为安全策略太过于严格,所以建议关闭这项服务
修改/etc/selinux/config文件,设置SELINUX=disabled
vi /etc/selinux/config
- 将 SELINUX=enforcing 改为 SELINUX=disabled
安装Docker服务,-y代表默认安装
yum install docker -y
方便做法:直接宝塔面板软件商店安装
注:docker常用命令
service docker start # 启动docker服务 service docker stop # 停止docker服务 service docker restart # 重启docker服务
2、拉取python镜像
2.1、什么是DockerHub?
- DockerHub是Docker公共镜像仓库,为用户提供了大量的镜像文件
https://hub.docker.com/
由于国内网络访问DockerHub很慢,无法下载镜像文件,我们可以使用Docker加速器
2.2、配置docker加速器:
DaoCloud加速器采用自主研发的智能路由及缓存技术并引入了先进的协议层优化,极大提升拉取镜像的速度和体验
(配置配置docker加速器的时候可以先关闭docker服务然后再重启)
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
注意:修改/etc/docker/daemon.json文件,去掉结尾的逗号
2.3、拉取python镜像
docker pull python:3.6
3.6指的是是Python的版本
3. 创建python容器
3.1、首先创建网段
默认情况下,Docker环境会给容器分配动态的IP地址,这就导致下次启动容器的时候,IP地址就改变了
我们可以单独创建一个Docker内部的网段(172.20.0.X)
docker network create --subnet=172.20.0.0/16 pynet
- /16表示创建出来的网段可以创建65534个IP地址;
- 如果创建失败可能是因为网段已经被占用,可以试试其他的网段;
3.2、在创建的网段范围内创建python容器
docker run -it -d --name=StreamlitHelloWorld -p 5002:8501 -v /www/wwwroot/experiment/StreamlitHelloWorld:/root/StreamlitHelloWorld --net pynet --ip 172.20.0.3 python:3.6 bash
注:
- **docker run :**创建一个新的容器并运行一个命令
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- -d: 后台运行容器,并返回容器ID;
- –name=“nginx-lb”: 为容器指定一个名称;
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- –volume , -v: 绑定一个卷(目录映射)(/www/wwwroot/experiment/exp2是我的项目文件所在的真实位置;/root/project是docker内文件位置)
- –net: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- -ip:指定IP地址(虚拟);在pynet网段所在的范围内创建;(172.20.0.1是网关地址,不能使用,172.20.0.2以及之后的可以使用)
- python:3.6 指定使用的镜像
4、启动服务streamlit服务
进取容器内部之后,转到项目启动文件所在目录,输入
streamlit run helloworld.py
输入网址:http://101.32.183.14:5002/ 访问(注意端口映射到了5002)
- 注意:此时直接按下“Ctrl+c”退出运行的话,就是结束了python程序,然后在无法访问了;
稳妥的方法是:
加上nohup,使用命令:
nohup streamlit run helloworld.py
然后直接关上终端窗口即可;
5、docker常用命令
docker images # 列出本地镜像 docker ps -a # 查看所有的容器 docker start <容器 ID> # 启动容器 docker stop <容器 ID> # 停止容器 docker restart <容器 ID> # 停止的容器可以通过 docker restart 重启: docker exec -it nlp bash # 进入"nlp"容器 docker network rm pynet # 删除pynet网段
6、可能的报错:
创建网段的时候:
ERROR response from daemon: Pool overlaps with other one on this address space
- 在docker中创建networks的时候有时候会报ERROR: Pool overlaps with other one on this address space的错误,这是因为目标网段已经存在的原因,通常这发生在将要创建的networks手动指定了subnet网段地址的时候。| 这时有两个选择,一是查看已存在的网段是否有容器正在使用,如果没再用了可以删除该网段对应的网卡,二是修改目标的subnet网段地址。
- 注意:默认情况下,docker默认创建的网段为172.17.0.X,因此创建的容器都是放在这个网段之中。
- 如果报错,可能是之前创建的容器已经使用了这个网段,那就另外选择其他的网段