Docker多镜像部署web

部署环境

     1. Nginx容器

     2. Django+uwsgi容器

     3. mysql容器

     4. CentOS 7.0系统

工具软件

     Navicat:MySQL客户端软件

          下载网址:百度下载

     MobaXterm:SSH客户端(免费版)

          下载网址:https://mobaxterm.mobatek.net/download.html

原理

     1. 客户端请求服务资源

     2. nginx直接对外服务,接收客户端发送的http请求,解包、分析

     3. 如果是静态文件请求,返回nginx配置的静态文件目录资源

     4. 如果是动态的请求,nginx通过配置文件,转发给uWSGI

     5. uWSGI将接收到的包进行处理,并转发给wsgi

     6. wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi

     7. wsgi将返回值进行打包,转发给uWSGI

     8. uWSGI接收后转发给nginx

     9. nginx最终将返回值返回给客户端(如浏览器)。

     *注:不同的组件之间传递信息涉及到数据格式和协议的转换

分别创建所需容器并用link连接

     nginx -> django

     django -> mysql

     project_jwweb文件夹下src为Django项目

     创建 nginx 容器 命令

          docker run           # 创建docker容器

          -it                # 可交互

          --name nginx2       # 命名

          -p 8001:80          

               端口映射,可访问宿主机IP:8001

          -v /root/opt/project_jwweb/nginx/conf:/etc/nginx

               将宿主的/root/opt/project_jwweb/nginx/conf

               映射到容器的/etc/nginx(配置文件目录)

          -v /root/opt/project_jwweb/src/static:/etc/nginx/static

          -v /root/opt/project_jwweb/src/media:/etc/nginx/media

               上面两个映射静态文件目录

          --link django2:django2

               可使容器互访,第一个是容器的名称,第二个是容器的别称

          nginx:1.13 bash  # 使用镜像并进入bash

     创建 django 容器 命令

          docker run -it  --name django2 -v /root/opt/project_jwweb/src:/code/src --link mysql2:mysql2 django:2.0 bash

     mysql 容器 命令

          docker run --name mysql2 -p 3306:3306  -v /root/opt/project_jwweb/data:/var/lib/mysql  -d  mysql:db2

配置信息

     Nginx

          修改/etc/nginx/conf.d/default.conf中的server选项

               server {

                    # 监听的端口,与上面端口映射的容器端口一致

                   listen       80;

                   server_name  localhost;

                   #charset koi8-r;

                   #access_log  /var/log/nginx/host.access.log  main;

                   location / {

                        # 下面两条配置为默认,注释掉即可

                       # root   /usr/share/nginx/html;

                       # index  index.html index.htm;

                       # 新增以下两行配置

                       # 找到uwsgi_params文件并填上路径

                       include /etc/nginx/uwsgi_params;

                       # 代理访问Django容器中的uwsgi服务

                       # link的容器名即可

                       uwsgi_pass django3:8080;

                   }

                   # 静态文件配置,将Django项目的静态文件映射到容器内部才能通过以下配置访问的到

                   # python manage.py collectstatic采集静态文件

                   location /media {

                       alias /etc/nginx/media;

                   }

                   location /static {

                       alias /etc/nginx/static;

                   }

               }


     Django配置

          先要安装uwsgi服务

               pip install uwsgi

          在manage.py的同级目录下现金uwsgi.ini配置文件

               [uwsgi]

               # 通过uwsgi访问django需要配置成http

               # 通过nginx请求uwsgi来访问django 需要配置成socket

               socket = :8001

               # Django的根目录(manage.py同级目录)

               # 写上容器内项目的绝对路径

               chdir = /code/src

               # 指定django项目自带的的wsgi配置文件位置

               module = web.wsgi

               # 允许存在主进程

               master = true

               # 开启进程数量

               processes = 3

               # 服务器退出时自动清理环境

               vacuum = true

               # 存放uwsgi日志路径

               daemonize = uwsgi.log

               # 虚拟环境路径

               virtualenv =

          或者在manage.py的同级目录下现金uwsgi.xml配置文件

               <uwsgi>

                   <socket>:8001</socket>

                   <chdir>/code/src</chdir>

                   <module>web.wsgi</module>

                   <processes>4</processes>

                   <daemonize>uwsgi.log</daemonize>

               </uwsgi>

     Mysql配置

          进入新建一个数据库,在Django中连接这个数据库即可

运行

     先运行uwsgi服务

     uwsgi --ini uwsgi.ini

     或 uwsgi -x uwsgi.xml

     在运行Nginx服务

     进入nginx容器中查看服务是否启动

     service nginx status

     如果未启动就执行

     service nginx start

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容