本章将在本地搭建一个容器化的 Django 项目,感受 Docker 的运作方式。
前期准备
开发环境
虽然有基于 Windows 的 Docker 版本,但各方面兼容做得都不太好(安装也麻烦些),因此建议读者在学习前,自行安装好 Linux 或 Mac 系统。当然你愿意折腾的话,在 Windows 上搞也行。
别担心,以后开发 Django 项目仍然可以在 Windows 下进行,仅仅是开发时不使用 Docker 而已。
软件安装
准备就绪后就继续下一步吧。
创建 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