docker实战docker+python3.5+flask+gunicorn+gevent+nginx base image:centos

docker部署flask应用程序

    简单的在本地测试使用docker,为了方便记忆特此记录,本文构建的镜像没有通过dockerfile来获取镜像,本文的操作都是使用sudo进行操作,普通用户在centos系统好像不起作用,具体原因未查明。

测试环境:

         操作系统:centos 7  64 位         

         编程软件:anaconda2 python2.7.13

         需要使用的包:gunicorn,flask,gevent

         负载均衡调配:nginx

1.安装docker

      yum install docker 

2.构建基本镜像

      sudo docker pull centos

3.查看镜像列表

     sudo docker images

结果如下:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker.io/centos    latest              22a41e8d1a77        3 days ago          2.706 GB

docker.io/centos    v1.1                22a41e8d1a77        3 days ago          2.706 GB

docker.io/centos    v1.0                2d194b392dd1        9 days ago          195.4 MB

4.使用最新镜像,即启动并进入容器

sudo docker run -it -P --name nginx_flask_gunicorn 22a41e8d1a77 /bin/bash

5.在容器中安装nginx/gunicorn/anaconda2.4

             1.将本地的anaconda2.4使用docker cp 命令加入容器。

             2.进入容器sh 安装anaconda2

             3.容器中使用

      pip install gunicorn gevent

             4.容器中安装nginx 。

              配置yum源,

        rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
                        
        yum install nginx -y

            5.启动nginx。nginx 命令 查看 top 命令或者浏览器输入0.0.0.0有欢迎界面表示安装完成。

            6.配置nginx开机启动。

        systemctl enable nginx.service

            7.简单的flask程序。myapp.py

                           from flask import Flask
                            app = Flask(__name__)
     
                            @app.route("/")
                            def hello():
                                return “hello world!"
     
                            if __name__ == "__main__":

                                app.run() 

            8.访问Url地址:http://10.0.10.29:5000  成功!创建一个wsgi入口文件:wsgi.py                    

                        from myapp import app
     
                        if __name__ == "__main__":
                            app.run() 

            9.启动测试

            gunicorn --workers 3 --bind 0.0.0.0:5000  --user nginx --worker-class gevent wsgi:app
                        --worker-class 进行工作模式,默认是sync,这里使用gevent。

                        --workers 指定启动进程数。
                        --bind 指定ip:端口。

                        --user 指定用哪个用户启动这个进程

             10. 设置开机启动文件gunicorn :/etc/systemd/system/myapp.service

                  [Unit]
                   Description=Gunicorn  server
                   After=network.target
                   [Service]
                   User=nginx
                   Group=nginx
                   PrivateTmp=true
                   WorkingDirectory=/root/project/
                   Environment="PATH=/root/anaconda2/bin"
                   ExecStart=/root/anaconda2/bin/gunicorn --workers 3 --bind 0.0.0.0:5000 wsgi:app
     
                  [Install]
                   WantedBy=multi-user.target 
               11.设置gunicorn开机启动。
                systemctl start myapp 

              12.设置nginx配置文件。通过Nginx来反向代理跳转到刚才的Flask项目;/etc/nginx/conf.d/app.conf使用IP地址,

把默认的nginx.conf里的server注释,否则配置冲突。配置信息如下:

        server {  
                listen 80;  
                server_name default_server;  
     
     
                location / {  
                    proxy_set_header Host $http_host;  
                    proxy_set_header X-Real-IP $remote_addr;  
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header X-Forwarded-Proto $scheme;  
                    proxy_pass http://127.0.0.1:8000;  
                }  
            } 

6.把容器打包成镜像。以后开启容器即可

          sudo docker commit -a "Huan" -m "centos-python2.7.13" 

你可能感兴趣的:(docker)