基于Docker的部署Django应用

关于环境的麻烦事

软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境不相同,可能导致软件无法运行。

要使软件运行正确,用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。

传统虚拟机因为资源占用多、冗余步骤多、启动慢已经逐步被Linux容器取代,Docker则是Linux容器里目前使用最广的技术了。

Docker 介绍

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

关于Docker的其他介绍,可以参考以往文章:

初识Docker

Docker 数据持久化Volume

企业级Docker仓库-Harbor

使用 Docker 搭建 SonarQube 代码扫描平台

Docker版Jenkins持续集成

Jenkins + GitLab + Dockers 部署 Spring Boot 应用

Docker部署Django应用

今天这篇文章给大家介绍如何使用部署Django应用,还是使用传统的Nginx + uwsgi + Django 方式。

Nginx镜像构建

由于官方的Nginx需要对配置文件进行修改,即可符合我们的使用方式,所以我们以准备好的配置文件替代原有文件即可。

Dokcerfile:

# 基础镜像FROM nginx
# 维护信息MAINTAINER mango.zuo@testops.cn
# 新建autoTest目录以便访问django应用RUN mkdir -p /var/www/html/autoTest
# 复制配置文件以符合项目需要ADD default.conf /etc/nginx/conf.d/default.conf
# 开放端口EXPOSE 8000
# 启动命令CMD nginx -g "daemon off;"

镜像构建命令:

docker build -t my-nginx:1.0 .

容器启动命令(提前切换到autoTest所在目录下):

docker run -d -p 8000:8000 -v $PWD/autoTest:/var/www/html/autoTest my-nginx:1.0

uwsgi + Django镜像构建

关于Django镜像的构建,我们将对应的项目代码拷贝到容器中(当然也可以通过挂载的方式)。

Dockerfile文件:

# 基础镜像FROM python:3.7
# 维护信息MAINTAINER mango@testops.cn
# 拷贝项目代码ADD autoTest/ /autoTest
# 切换工作路径WORKDIR /autoTest
# 安装第三方依赖包(可以使用虚拟环境方式)RUN pip install -r requirements.txt \&& python manage.py migrate
# 开放端口EXPOSE 8007
# 启动uwsgi服务器ENTRYPOINT ["./start_uwsgi.sh"]

镜像构建命令:

docker build -t autotest:1.0 .

容器启动命令(提前切换到autoTest所在目录下):

docker run -d -p 8007:8007 -v $PWD/autoTest:/autoTest autotest:1.0

如此即可简单完成Django应用的部署。

后记

关于 Docker的使用有更多更深入的内容,如有兴趣可以关注我们的《测试开发从零开始课程》哟~

微信号 : TestOps

知乎:@TestOps云层

(0)

相关推荐

  • (42条消息) Docker教程系列八:Docker备份与迁移(完)

    (42条消息) Docker教程系列八:Docker备份与迁移(完)

  • docker学习前述

    什么东西都不懂直接来学习docker是有点难的,学习docker需要哪些技术基础做支撑? Linux(相关常用的命令要会) springboot docker学习大纲如下: Docker概述 Dock ...

  • day91:luffy:基于vue+drf的路飞学城项目后端部署

    day91:luffy:基于vue+drf的路飞学城项目后端部署

  • docker学习15-Docker 使用修改后容器来创建镜像

    前言 前面讲通过 Dockefile 可以制作自己的镜像,通过镜像创建容器启动服务,有时候需要修改容器里面的内容,比如我们想改点BUG. 我们可以直接在容器里面修改,验证通过后,基于现有的容器创建一个 ...

  • 手把手教你,docker安装nginx

    https://www.shengchulai.com/blog-vR35Nm9LAB.htm 1)下载镜像 打开网易蜂巢镜像中心 https://c.163yun.com/hub#/m/home/ ...

  • Docker 制作Nginx镜像

    参考文章:https://www.jianshu.com/p/dc4cd0547d1e 镜像的制作方式有两种,一种是下载别人的镜像之后再制作成自己的镜像,一种是从头开始制作自己的镜像 第一种,下载别人 ...

  • python测试开发django-83.Dockerfile部署django项目

    前言 现在流行用 docker 部署环境,python 开发的 django 项目也可以写个 Dockefile 文件,方便docker部署. django 是依赖于python环境的,所有镜像制作是 ...

  • uWSGI、WSGI和uwsgi

    https://www.cnblogs.com/wspblog/p/8575101.html Django框架简介,wsgiref 与 jinja2 模块 Django部署时为什么要用 uWSGI与 ...

  • docker学习7-Dockerfile制作自己的镜像文件

    前言 如果你是一个python自动化测试人员,某天你在公司终于完成了一个项目的接口自动化脚本工作,在你自己常用的本机或者服务器上调试完成了脚本,稳稳地没问题. 可是晚上下班回家,你自己找了个linux ...

  • Linux系统 Centos7 环境基于Docker部署Rocketmq服务

    消息队列 基本概述 MQ,Message Queue,基于TCP协议构建的简单协议,区别于具体的通信协议. 基于通信协议定义和抽象的更高层次的通信模型,一般都是生产者和消费者模型,又或者说服务端和客户 ...

  • Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  • Docker环境部署Prometheus Grafana监控系统

    原文链接:https://www.jianshu.com/p/dde0dc1761ec 文章转自:DevOps技术栈 一.Prometheus简介 Prometheus是由SoundCloud开发的开 ...

  • 基于docker快速搭建多节点Hadoop集群

    一.概述 hadoop是什么 Hadoop被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力.几乎所有主流厂商都围绕Hadoop开发工具.开源软件.商业化工具和技术服务.今年大 ...

  • 基于docker快速搭建hive环境

    一.概述 Hive是什么? Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据.它架构在Hadoop之上,总归为大数据,并使得查询和分析方便. 最初,Hive是由Facebook开发,后 ...

  • Linux系统环境基于Docker搭建Mysql数据库服务实战

    开放端口规划: mysql-develop:3407 mysql-test: 3408 mysql-release: 3409 ps: 1.不推荐使用默认端口-3306,建议自定义端口 2.如果采用阿 ...

  • 基于Docker实现MySQL主从复制

    前言 MySQL的主从复制是实现应用的高性能,高可用的基础.对于数据库读操作较密集的应用,通过使数据库请求负载均衡分配到不同MySQL服务器,可有效减轻数据库压力.当遇到MySQL单点故障中,也能在短 ...

  • 基于Docker的Consul集群实现服务发现

    服务发现 其实简单说,服务发现就是解耦服务与IP地址之间的硬绑定关系, 以典型的集群为例,对于集群来说,是有多个节点的,这些节点对应多个IP(或者同一个IP的不同端口号),集群中不同节点责任是不一样的 ...