前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 部署Django博客项目

Docker 部署Django博客项目

作者头像
緣來
发布2020-01-02 15:06:42
1.3K0
发布2020-01-02 15:06:42
举报
文章被收录于专栏:緣來來來緣來來來緣來來來

我之前部署我的博客项目(Django应用),没用Docker,直接借助的宝塔Linux服务器面板在服务器上部署的,部署起来也是十分的方便,使用了Django+Nginx+Supervisor+Gunicorn部署,可查看我写过的一片博客:Centos安装python3并使用Nginx+Gunicorn+virtualenv+supervisor来部署django项目

这段时间了解了Docker,为其“Build,Ship and Run Any App,Anywhere”的思想所折服!

Docker 部署 Django 应用可以通过两种方式来完成:迭代构建和容器互联。

我的博客是使用了容器互联的方式搭建 Django 容器栈。

网络架构

Docker环境

  • Nginx容器: nginx:1.15
  • Web Server容器: python:3
  • Memcached容器: memcached
  • MySQL容器: mysql:5.7

项目结构

.
├── db
│   ├── Dockerfile
│   └── mysql.cnf               ---数据库配置
├── djangoblog
│   ├── DjangoBlog
│   └── Dockerfile
├── docker-compose.yml
├── memcached
│   └── Dockerfile
├── nginx
│   ├── Dockerfile
│   ├── fkomm.cn
│   └── nginx
└── run.sh

db里面是我mysql的配置,内有Dockfile文件;djangoblog里面是我的django应用的源码,内也有Dockfile文件;nginx文件里还有一个Dockfile。db、djangoblog、memcached、nginx都分别是一个service,我们通过docker-compose.yml文件的配置来创建镜像和容器。也就是说你必须要做几件事:

  • 在每个服务(应用)下编写Dockerfile;
  • 在docker-compose.yml文件中配置相关的服务;
  • run.sh 执行 docker-compose命令:build 和 up!

Dockerfile配置:

MySQL应用的配置(db):

FROM mysql:5.7

RUN mkdir -p /var/lib/mysql/ && mkdir -p /var/log/mysql/  && chown -R mysql:root /var/lib/mysql/ && \
    chown -R mysql:mysql /var/lib/mysql/ && \
    chown -R mysql:mysql /var/log/mysql/ && \
    chown -R  mysql /var/lib/mysql && \
    chgrp -R  mysql /var/lib/mysql && \
    chown -R mysql:root /var/lib/mysql/
ADD ./mysql.cnf /etc/mysql/conf.d/mysql.cnf
CMD ["mysqld"]

Django应用的配置(djangoblog):

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir -p /code/DjangoBlog/ && mkdir -p /var/www/resource/
ADD ./DjangoBlog/requirements.txt /requirements.txt
RUN pip install -Ur /requirements.txt -i http://pypi.douban.com/simple/  --trusted-host pypi.douban.com && \
        pip install gunicorn  -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

Memcached的配置(memcached):

FROM memcached:latest

CMD ["memcached"]

EXPOSE 11211

Nginx配置(nginx目录):

FROM nginx:1.15
RUN mkdir -p /etc/letsencrypt/live/
ADD fkomm.cn /etc/letsencrypt/live/fkomm.cn/     ---小绿锁证书配置

RUN rm -rf /etc/nginx
COPY ./nginx/ /etc/nginx

docker-compose.yml配置:

version: '2'

services:
  db:
    build: ./db
    restart: always
    mem_limit: 500m
    env_file:
      - ".env"
    environment:
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    volumes:
      - ./date/mysql/:/var/lib/mysql
    depends_on:
      - memcached
    container_name: db
  djangoblog:
    build: ./djangoblog
    restart: always
    mem_limit: 500m
    env_file:
      - ".env"
    command:  bash -c  'sh /code/DjangoBlog/bin/docker_start.sh'
    volumes:
      - ./djangoblog/DjangoBlog/:/code/DjangoBlog
    links:
      - db
    depends_on:
      - db
    container_name: djangoblog
  nginx:
    restart: always
    build: ./nginx
    ports:
      - "80:80"
      - "443:443"
    volumes_from:
      - djangoblog
    links:
      - djangoblog:djangoblog
    container_name: nginx
  memcached:
    build: ./memcached
    container_name: memcached

配置的几个方面介绍:

MySQL:
  • build:根据Dockerfile重新build一个镜像;
  • environment:配置了环境变量,创建一个数据库(该数据库名为djangoblog,django在执行migrate操作时会用);
  • volumes:数据卷,为了实现备份用的,/date/mysql 是主机目录,/var/lib/mysql 是MySQL容器内目录;
  • restart:默认是no,意思是在任何情况都不会重启;设成always,就是如果stop了,就会重启;
  • depends_on:它有两层含义,一是在启动服务的时候,会先启动memcached,然后再启动db;二是如果执行docker-compose up db也会创建和启动memcached。

在DjangoBlog应用的settings.py里也要写成相应的配置,具体如下:

DATABASES = {
  'default': {
      'ENGINE': 'django.db.backends.mysql',
     'NAME': 'djangoblog',
     'USER': 'root',
     'PASSWORD':'admin',
     'PORT':3306,
      'HOST':'db',
  }
}
DjangoBlog:
  • links: 创建和其他容器中的service的链接,指定服务名字即可。有了这个连接,服务之间就可以通过service名字通信了!
Nginx:
  • ports:格式为HOST:CONTAINER。相当于一个nat转换,设置内部的端口向外转发的端口; http默认端口
Memcached:

因为不需要重新配置,直接用仓库中的镜像即可!

run.sh启动:

#清理临时镜像
docker rmi $(docker images -q -f dangling=true) -f
#清理所有容器
docker rm $(docker ps -a -q) -f

docker-compose build
docker-compose up

接着在浏览器里面输入https://www.fkomm.cn 就可以进入梦寐以求的网站啦!!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 网络架构
  • Docker环境
  • 项目结构
    • Dockerfile配置:
      • MySQL应用的配置(db):
      • Django应用的配置(djangoblog):
      • Memcached的配置(memcached):
      • Nginx配置(nginx目录):
    • docker-compose.yml配置:
      • 配置的几个方面介绍:
    • run.sh启动:
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档