某个 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
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
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
这个文件中定义。
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
docker images --format "{{.Repository}} {{.Tag}}"
start-base latest
最后来总结下文章中的知识点
项目镜像
提供支持,并在基础镜像之上添加项目代码,完成项目镜像构建工作。supervisor
在容器中管理 nginx、gunicorn (python WSGI Server)
进程。pip
是 python
包管理工具,该工具提供了对python
包的查找、下载、安装、卸载的功能。pip -i
选项, 指定仓库地址,默认为 https://pypi.org/simple,**速度很慢**建议使用国内仓库。参考文章
doker&k8s Qun [703906133]
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。