Docker系列笔记 之使用 Docker 运行 Django 容器
首先此篇笔记默认你已经安装好了 Docker,并了解 Docker 的基础概念,诸如镜像、容器、以及他们之间的关系等。
如果不太了解,等我回头了解清楚以后,可以再写一篇文章阐述一下。(狗头
当然,对于这篇文章,你就算不是很了解相关概念也没关系,照着我的步骤先敲一遍代码,然后慢慢理解也可以。
本文的内容大致如下几步:
- 镜像准备
- Django 文件准备
- Dockerfile 文件准备
- build 构建一个容器
- run 运行该容器
- 测试与查看
1、镜像准备
这里用的是 Python 3.6 版本的镜像,通过如下命令下载:
docker pull python:3.6
信息显示完成以后,通过如下命令确认已经下载的所有镜像:
docker image ls
大概如下图所示:
至此,我们的镜像就准备完了。
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/myapp: COPY 是复制命令, . 表示你所在的操作系统(非镜像操作系统)当前目录,这条语句的意思是把当前文件夹的所有内容都拷贝到镜像系统的 /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 一行一行执行命令的信息输出,类似下图:
当上述指令执行完毕,输出类似于如下信息,则表示容器创建成功:
复制一下倒数第二行 built 后面的一串代码,这个后面构建容器,也就是 container 的时候要用到。
5、run 运行容器
接下来我们运行创建一个容器,使用如下命令:
docker run -p 7979:7979 6811c43789de
6811c43789de 这一串代码,就是上一步复制下来的 id,这一行命令的意思是运行这个容器,并将容器的 7979 端口映射到你本身操作系统的 7979 端口。
为什么要映射端口呢?
因为每一个容器都类似于一个小黑盒,与外界是不连通的,要访问里面的信息,必须将其映射出来。
我看过很多教程教程,他们在执行这一步之后,会输出 Django 系统初始化的一些信息,但我这里,没有显示。
6、 测试与查看
我们在浏览器访问一下,服务器的 ip+port,在我这里是http://192.168.31.222:7979/ ,就可以看到我们搭建的系统已经运行起来了,如下如所示:
在我们执行 run 命令的地方也可以看到 请求的输出信息:
然后,我们可以进入一下我们构建的这个 container 看一下。
首先,docker container ls 查看所有正在运行的 container,可以看到类似如下信息:
有我们刚刚运行的 container 信息,包括 container id, port 映射信息,name 等字段。
我们可以通过 container id 或者 name 这个字段进入我们刚刚创建的 container,我用 container id 进入容器:
docker container exec -it 524d98f18334 bash
然后就进入了我们创建的 container 系统,查看一下 container 里面运行的 Python 进程:
ps -ef | grep python
可以看到有 端口为 7979 的 Django 系统在运行:
然后可以 使用 exit 退出该容器。
以上,就是使用 Docker 来运行一个 Django 容器的全过程。
PS:以上代码放在我个人 github 的 docker 目录下,地址:https://github.com/x1204604036/docker
上一篇: 部署-centos安装docker
推荐阅读
-
Docker系列笔记 之使用 Docker 运行 Django 容器
-
Docker容器使用Centos7运行java后台代码出现中文乱码
-
Docker学习笔记之容器查看启动终止删除的方法
-
Docker学习笔记之Weave实现跨主机容器互联
-
详解Docker学习笔记之搭建一个JAVA Tomcat运行环境
-
docker学习笔记之把容器commit成镜像的方法
-
Docker中Dockerfile之容器中运行MyEclipse搭建的JavaWeb项目
-
在Docker容器中配置和运行Django + Celery
-
asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行
-
8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署