dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2198
  • 铜币14124枚
  • 威望6134点
  • 银元155个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 喜欢达人
  • 原创写手
阅读:794回复:0

如何自定义 Django Docker镜像?

楼主#
更多 发布于:2018-06-12 10:02
开始之前
某个 `Python` 项目,基于 `Python:3.6` 与 `Django:1.11` 框架开发,希望项目能够容器化,然后可以通过 `docker-compose` 等工具编排容器/应用,**本篇文章的目标是自定义Django基础镜像**。

与《为什么需要自定义一个基础镜像?》文章相同,**基础镜像作用是为项目镜像提供支持**。它构建在 `Python` 官方镜像之上,添加项目一些需要的扩展模块,例如 `Django`、`pymysql`、`Gunicorn`等常用模块,具体以项目实际需求为准。

最后为能够高效的处理静态文件请求,使用 `Nginx` 反向代理 `Django` 应用,不过这是下一篇文章要讲的了,《Django容器(下): 使用Gunicorn管理Django》,**敬请期待**  公众号每周四 docker专题更新文章。。


环境描述
容器镜像: python:3.6
容器系统: debian 9 (stretch)
Docker版本: CE - 17.06.0
Docker主机: Ubuntu Server 16.04


操作步骤
1. 基础镜像构建目录
tree base/

base/
├── conf
│   ├── 404.html
│   ├── default.conf
│   ├── nginx.conf
│   ├── requirements.txt
│   ├── sources.list
│   ├── ssl
│   │   ├── domain.crt
│   │   └── domain.key
│   └── supervisord.conf
└── `Dockerfile`

2 directories, 9 files

2. 基础镜像 Dockerfile 文件
cat base/Dockerfile

# start-base
FROM python:3.6
MAINTAINER dongnan #<@微信公众号:运维录>

# apt
COPY conf/sources.list /etc/apt/sources.list
RUN apt-get update \
    && apt-get install -y supervisor nginx \
    && apt-get clean \
    && rm -r /var/lib/apt/lists/*

# env
ENV TZ=Asia/Shanghai \
    LANG=en_US.UTF-8

# django
COPY conf/requirements.txt /root/
RUN pip --no-cache-dir install -r /root/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
这个 `Dockerfile` 很短,因为是项目基础镜像,只做一些基础工作就可以了。
它首先安装 `supervisor nginx` 软件包,然后是设置容器的环境变量。
最后使用 `pip` 安装项目依赖,`django 、pymysql` 都在 `requirements.txt` 这个文件中定义。

3. 构建镜像
docker build -t start-base .

Sending build context to Docker daemon    767kB
Step 1/8 : FROM python:3.6
# ...省略
Successfully built fc3f6f242301
Successfully tagged start-base

4. 验证镜像
基础镜像准备完毕后,就可以在项目镜像使用了,这里没有为基础镜像添加 TAG 标记,所以它是默认的 latest 。
docker images --format "pw_.Repository pw_.Tag"

start-base latest


小结
最后来总结下文章中的知识点
- 基础镜像作用是为`项目镜像`提供支持,并**在基础镜像之上添加项目代码**,完成项目镜像构建工作。
- 使用 `supervisor` 在容器中管理 `nginx、gunicorn (python WSGI Server)`进程。
- `pip` 是 `python` 包管理工具,该工具提供了对`python` 包的查找、下载、安装、卸载的功能。
- `pip -i` 选项, 指定仓库地址,默认为 https://pypi.org/simple,**速度很慢**建议使用国内仓库。

#
欢迎关注微信公众号: 运维录
游客

返回顶部