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,

然后就可以起服务了。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐