当前位置 主页 > 网站技术 > 代码类 >

    Django Docker容器化部署之Django-Docker本地部署

    栏目:代码类 时间:2019-10-16 21:06

    本章将在本地搭建一个容器化的 Django 项目,感受 Docker 的运作方式。

    前期准备

    开发环境

    虽然有基于 Windows 的 Docker 版本,但各方面兼容做得都不太好(安装也麻烦些),因此建议读者在学习前,自行安装好 Linux 或 Mac 系统。当然你愿意折腾的话,在 Windows 上搞也行。

    别担心,以后开发 Django 项目仍然可以在 Windows 下进行,仅仅是开发时不使用 Docker 而已。

    软件安装

    Docker:学习 Docker 当然要安装 Docker 软件了(免费的社区版),安装方法见官方文档。 Docker-compose:这是 Docker 官方推出的用于编排、运行多个容器的工具,安装方法见官方文档。本教程大部分内容都与它有关。 Python3:教程部署的是 Django 项目,那 Python3 是当然要有的了(包括 python 的包管理工具 pip)。

    准备就绪后就继续下一步吧。

    创建 Django 项目

    打开 Linux/Mac 的终端,安装 Django 库:

    $ pip install django==2.2

    在一个你喜欢得位置(比如/home/)创建新的 Django 项目:

    $ django-admin startproject django_app

    进入项目根目录:

    $ cd django_app

    教程后面的内容全部都在此目录中操作了。为方便阅读,命令提示符 $ 代表目前在项目根目录 django_app/,mysql $ 则代表目前在目录 django_app/mysql/ 中,请读者操作时稍加留意当前的工作目录。

    然后迁移数据:

    $ python manage.py migrate
    
    Operations to perform:
     Apply all migrations: admin, auth, contenttypes, sessions
    Running migrations:
     Applying contenttypes.0001_initial... OK
     ...
     Applying sessions.0001_initial... OK
    
    

    准备工作就搞定了。

    用Docker构建项目

    初识Docker

    Docker 的整个生命周期由三部分组成:镜像(image)+ 容器(container)+ 仓库(repository)。

    容器是由镜像实例化而来,这有点像面向对象的概念:镜像就是类,容器是类实例化之后的对象。

    镜像是一个只读的模板,它包括了运行容器所需的数据。镜像可以包含一个完整的 Linux 操作环境,里面仅安装了 Python 或者其他用户需要的程序。

    容器是由镜像创建出来的实例,类似虚拟机,里面可以运行特定的应用,并且容器与容器是相互隔离的。

    仓库概念与 Git 和 Github 类似,如果你用过它们就非常容易理解。Docker 使用的默认仓库是由官方维护的 Docker hub 公共仓库,从中上传、拉取的操作类似 Git。

    目前需要了解的就这么多,下面通过实践来理解。

    Hello-world

    为了确认 Docker 已经正确安装了,运行以下指令:

    $ docker run hello-world
    
    Unable to find image 'hello-world:latest' locally
    ...
    latest: Pulling from library/hello-world
    1b930d010525: Pull complete 
    ...
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    ...
    
    

    一切正常的话,终端将打印出如上图所示的欢迎语句。docker run hello-world 指令的含义是:用名称为 hello-world 的镜像构建一个容器并运行。如果本地上没有这个 hello-world 的镜像, Docker 会自动从仓库搜索并下载同名的镜像。

    我们可以用 docker images 查看本地已有的镜像:

    $ docker images
    
    REPOSITORY   TAG    IMAGE ID      CREATED      SIZE
    hello-world   latest   fce289e99eb9    9 months ago   1.84kB