首先此篇笔记默认你已经安装好了 Docker,并了解 Docker 的基础概念,诸如镜像、容器、以及他们之间的关系等。

如果不太了解,等我回头了解清楚以后,可以再写一篇文章阐述一下。(狗头

当然,对于这篇文章,你就算不是很了解相关概念也没关系,照着我的步骤先敲一遍代码,然后慢慢理解也可以。

本文的内容大致如下几步:

  1. 镜像准备
  2. Django 文件准备
  3. Dockerfile 文件准备
  4. build 构建一个容器
  5. run 运行该容器
  6. 测试与查看

1、镜像准备

这里用的是 Python 3.6 版本的镜像,通过如下命令下载:

docker pull python:3.6

信息显示完成以后,通过如下命令确认已经下载的所有镜像:

docker image ls

大概如下图所示:

docker 运行微信 docker运行django_构建Django容器


至此,我们的镜像就准备完了。

2、Django 文件准备

我的测试文件目录在 /home/hunter/docker/ 目录下。
在该目录下开启一个新的 Django 项目:

django-admin startproject Web

编辑 settings.py 文件,将 ALLOWDD_HOSTS 设置为允许所有 ip 访问。

ALLOWED_HOSTS = ['*']

/home/hunter/docker/Web/ 目录下创建一个 requirements.txt 文件,写入如下内容:

#requirements.txt
Django==3.0.3

至此, Django 相关文件创建完毕。

3、Dockerfile 文件准备

Dockerfile 的文件内容如下:

FROM python:3.6
RUN mkdir /usr/src/myapp -p
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN pip install -r requirements.txt -i  https://mirrors.aliyun.com/pypi/simple/
WORKDIR /usr/src/myapp/Web
CMD python manage.py runserver 0:7979

FROM python:3.6 这条命令表明是使用 python:3.6 这个版本的 Python 镜像,其实所谓的 Python 镜像,其实也就是一个只装了 Python 3.6 版本的 Linux 操作系统,这个后面我们可以进入系统看一下。

RUN mkdir /usr/src/myapp -p 这条命令表示的是在该镜像里递归地创建这样一个文件夹, RUN 表示执行什么命令,后面的 mkdir 等命令和 Linux 操作系统都是一致的。

COPY . /usr/src/myappCOPY 是复制命令, . 表示你所在的操作系统(非镜像操作系统)当前目录,这条语句的意思是把当前文件夹的所有内容都拷贝到镜像系统的 /usr/src/myapp 目录下。

WORKDIR /usr/src/myapp: WORKDIR 后面加上镜像操作系统的文件夹,表明工作的文件夹是镜像系统的 /usr/src/myapp 文件夹。

RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/: 上面一条语句切换到了镜像系统的工作文件夹,这条语句则是为上面干净的镜像系统安装相关依赖,这里只用到了 Django 这一个第三方库,所以在 requirements.txt 里面写入即可,-i 是指定下载源,这些都和 Linux 上的命令是一致的。

WORKDIR /usr/src/myapp/Web: 这是把工作目录切换到 我们的 Django 系统的根目录下。

CMD python manage.py runserver 0:7979: CMD 表示的是在镜像系统内执行什么命令,这个是 Django 项目的启动命令。

4、build 构建一个容器

前面我们的所有准备工作都已经做完了,然后使用 build 来把我们构建的系统变成一个可以运行的容器(container)。

Dockerfile 所在的文件夹,在我这里是 /home/hunter/docker/ ,执行如下命令:

docker build . -t python:3.6

然后就可以看到 Dockerfile 一行一行执行命令的信息输出,类似下图:

docker 运行微信 docker运行django_docker 运行微信_02


当上述指令执行完毕,输出类似于如下信息,则表示容器创建成功:

docker 运行微信 docker运行django_docker 运行微信_03


复制一下倒数第二行 built 后面的一串代码,这个后面构建容器,也就是 container 的时候要用到。

5、run 运行容器

接下来我们运行创建一个容器,使用如下命令:

docker run -p 7979:7979 6811c43789de

6811c43789de 这一串代码,就是上一步复制下来的 id,这一行命令的意思是运行这个容器,并将容器的 7979 端口映射到你本身操作系统的 7979 端口。

为什么要映射端口呢?
因为每一个容器都类似于一个小黑盒,与外界是不连通的,要访问里面的信息,必须将其映射出来。

我看过很多教程教程,他们在执行这一步之后,会输出 Django 系统初始化的一些信息,但我这里,没有显示。

6、 测试与查看

我们在浏览器访问一下,服务器的 ip+port,在我这里是http://192.168.31.222:7979/ ,就可以看到我们搭建的系统已经运行起来了,如下如所示:

docker 运行微信 docker运行django_docker 运行微信_04


在我们执行 run 命令的地方也可以看到 请求的输出信息:

docker 运行微信 docker运行django_docker使用Django_05


然后,我们可以进入一下我们构建的这个 container 看一下。首先,docker container ls 查看所有正在运行的 container,可以看到类似如下信息:

docker 运行微信 docker运行django_docker构建Django_06


有我们刚刚运行的 container 信息,包括 container idport 映射信息,name 等字段。

我们可以通过 container id 或者 name 这个字段进入我们刚刚创建的 container,我用 container id 进入容器:

docker container exec -it 524d98f18334 bash

然后就进入了我们创建的 container 系统,查看一下 container 里面运行的 Python 进程:

ps -ef | grep python

可以看到有 端口为 7979 的 Django 系统在运行:

docker 运行微信 docker运行django_docker运行Django_07


然后可以 使用 exit 退出该容器。

以上,就是使用 Docker 来运行一个 Django 容器的全过程。

PS:以上代码放在我个人 github 的 docker 目录下,地址:https://github.com/x1204604036/docker