Docker 部署flask封装的服务以及解决访问不通的问题
1、先写好代码,本地测试ok,然后放到这个目录/datadrive/docker/application准备好功能代码app=create_app()if__name__=="__main__":app.run(host='127.0.0.1',port='8603',debug=True)2、找一台可以安装docker的环境,如果没有自行百度docker安装步骤如果公司内部有yum源,可以先看看
1、先写好代码,本地测试ok,然后放到这个目录/datadrive/docker/application
准备好功能代码
app = create_app()
if __name__ == "__main__":
app.run(host='127.0.0.1', port='8603', debug=True)
2、找一台可以安装docker的环境,如果没有自行百度docker安装步骤
如果公司内部有yum源,可以先看看yum list docker --showduplicates | sort -r
然后使用 yum install docker-1.13.1 安装
3、 从docker hub里面找到自己想要的docker
比如找到一个python 环境镜像
https://registry.hub.docker.com/search?q=python3&type=image
docker pull rackspacedot/python37-ansible27
然后使用命令run一个基础docker
sudo docker run -p 8603:8603 --name calculation_docker -it -v /datadrive/docker/application:/app/application rackspacedot/python37-ansible27:latest
4、进入docker里面,运行代码,缺少什么库,安装什么库,注意库版本最好跟你本地保持一直,通过pip list 查看版本。
5、运行成功,退出docker,生成一个新的镜像
使用
docker commit calculation_docker(或者是docker id) docker_images_name:v1
6、编写一个docker-compose.yml 放到deploy文件夹里面
version: '2.1'
services:
calculation1:
image: docker_images_name:v1
ports:
- 8603:8603
restart: always
volumes:
- ../src:/app/application/src
- ../conf:/app/application/conf
- ../common:/app/application/common
- ../:/app/application
command: python /app/application/main.py
其中command 不要为空,不然docker 起来以后没有运行的程序会exit,
至此基本可以了,然后使用postman构造url访问,发现访问不通!!!
7、问题解决
弄了两天,一开始以为端口被防火墙挡住了,使用nginx监听端口,发现没问题。
后来就想着是不是app 的网址写成127.0.0.1 导致的,就改为了0.0.0.0 (至于区别我百度了一下,也不是很明白怎么就行了)
后来想着是docker 内部有一个ip地址不同于宿主机的IP地址,可以使用docker inspect docker名查看docker内部各种信息
8、然后就可以在deploy 目录下运行 docker-compose up -d 将服务起来
在调试过程中,使用命令 docker-compose down 将服务删掉, docker-compose logs 查看日志
9、将新的docker image保存成tar
docker save -o calculation1.tar docker_images_name:v1
10、将calculation1.tar 以及代码复制到别的服务器上,使用docker load -i calculation1.tar,
然后就可以起服务了。
更多推荐
所有评论(0)