使用Docker部署Django服务

本例中会用到的额外服务有mysql,rabbitmq。部署中有一些需要特别注意的地方也会给大家说一说。

1.创建专属网络

开始前先创建一个专用的虚拟网络:

brick@brick:~$ docker network create django_web

后面的服务都会使用这个专属网络进行通信,主机名就是域名地址,通信地址直接填主机名,docker提供了域名解析,所以我settings.py的数据库以及rabbitmq配置如下:

DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'my_database',
            'HOST':'django_mysql',
            'PORT': 3306,
            'USER':'admin',
            'PASSWORD':'123456',
        }
import djcelery
djcelery.setup_loader()
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
BROKER_URL = 'amqp://admin:123456@rabbitmq:5672'

2.部署Mysql

拉取mysql镜像

  • 拉取mysql镜像
brick@brick:~$ docker pull registry.docker-cn.com/library/mysql
Using default tag: latest
latest: Pulling from library/mysql
802b00ed6f79: Already exists
30f19a05b898: Pull complete
3e43303be5e9: Pull complete
94b281824ae2: Pull complete
51eb397095b1: Pull complete
54567da6fdf0: Pull complete
bc57ddb85cce: Pull complete
d6cd3c7302aa: Pull complete
d8263dad8dbb: Pull complete
780f2f86056d: Pull complete
8e0761cb58cd: Pull complete
7588cfc269e5: Pull complete
Digest: sha256:038f5f6ea8c8f63cfce1bce9c057ab3691cad867e18da8ad4ba6c90874d0537a
Status: Downloaded newer image for registry.docker-cn.com/library/mysql:latest
  • 部署mysql服务
brick@brick:~$ docker run -d -p 3307:3306 --network django_web --name django_mysql -v $PWD/db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_USER=admin -e MYSQL_PASSWORD=123456  mysql:latest
# 说明下参数意义
# -p 映射端口:docker内部端口: 端口映射,只有将容器端口映射到外部,外部才能访问
# -e 环境变量,指定一些服务内读取的变量,以初始化服务,这里的变量意义从字面上不难理解
# --network 指定容器所在网络,需要互相访问的容器记得指定到同一个网络!
# --name 容器名,这个名字在同一个容器网络里是可以直接当成域名访问的!
  • 测试
mysql -uroot -P3307 -p -e "show databases;"
Enter password:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

记得创建自己要用的数据库 create database


3.部署Rabbit MQ

因为项目用到了djcelery定时任务,所以需要部署Rabbit MQ

  • 拉取rabbit mq镜像
brick@brick:~$ docker pull registry.docker-cn.com/library/rabbitmq:management
management: Pulling from library/rabbitmq
802b00ed6f79: Already exists
84fe35f04ebe: Pull complete
72a118dc68c2: Pull complete
51c199718697: Pull complete
e74b797281ea: Pull complete
f2b0494f0e3c: Pull complete
d43b5d7d2745: Pull complete
dedfc544656e: Pull complete
ed99f98ab240: Pull complete
422ec57c0d17: Pull complete
85c41b55ab02: Pull complete
8d040d0f68fe: Pull complete
881b91c66b89: Pull complete
06bcf7b1b9c9: Pull complete
Digest: sha256:a4ae5d7965167e593299bbc12298614f4f6e339492be21f245592994128047b9
Status: Downloaded newer image for registry.docker-cn.com/library/rabbitmq:management
  • 部署mq服务
brick@brick:~$ docker run -d --network django_web --name rabbitmq -p 25678:25672 -p 15678:15671 -p 15679:15672 -p 4370:4369 -p 5678:5671 -p 5679:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 rabbitmq:management
  • 访问ok


    image.png
  • 访问后记得在admin里面,配置一个用户,并且给他授权,django需要用这个用户访问


    image.png

    创建后点击用户名,设置权限


    image.png

4.部署Django应用

  • 获取基础镜像 python2.7
brick@brick:~$ docker pull registry.docker-cn.com/library/python:2.7
2.7: Pulling from library/python
05d1a5232b46: Pull complete
5cee356eda6b: Pull complete
89d3385f0fd3: Pull complete
80ae6b477848: Pull complete
28bdf9e584cc: Pull complete
a0cd6b0afff0: Pull complete
cd4c682e75b6: Pull complete
ac1b7290f23f: Pull complete
5c60877508b0: Pull complete
Digest: sha256:7bcab0fc96ed01ef05ecb52ddb0d9d728927fe1f307205ea8dc5269d2cae9a83
Status: Downloaded newer image for registry.docker-cn.com/library/python:2.7
  • 编写部署Django的Dockerfile
# use base python image with python 2.7
FROM python:2.7

# install mysql-client
RUN apt-get update
RUN apt-get install -y mysql-client

# env
ENV RUN_MODE=DEPLOY

# add project to the image
ADD ./my_project/ /app/

# set working directory to /app/
WORKDIR /app/

# install python dependencies
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# RUN server after docker is up
CMD ./start.sh

特别注意:命令 python manage.py runserver 默认监听为本地 127.0.0.1:8000,所以即使通过端口映射出去,外面也无法访问,必须特别指定监听端口为python manage.py runserver 0.0.0.0:8000,监听所有的地址请求,还有就是不要把服务都放在后台运行,如果都放在后台,只使用-d参数的话,docker把命令跑完就会自行退出了,所以我的start.sh如下:

#!/bin/sh

python manage.py celery beat &
python manage.py celery worker &
python manage.py runserver 0.0.0.0:8000 #前台运行
#注意: 这样日志结构会比较乱,你也可以拆成3个容器来跑

  • 在Dockerfile所在目录进行构建
$ docker build . -t django_web
Sending build context to Docker daemon  234.1MB
Step 1/8 : FROM python:2.7
 ---> 4ee4ea2f0113
# 后面balabala省略,就是一顿安装
  • 启动django服务
$ docker run -d --network django_web --name django_web -p 8081:8000 django_web
c8732b1a06f0f96eb6249a7cfb2d8f4d54efbc7a776a8f5737b2bf65338eb44b

ok! 大功告成,访问试试看吧


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

推荐阅读更多精彩内容