Django容器(上): 自定义基础镜像

开始之前

某个 Python 项目,基于 Python:3.6Django:1.11 框架开发,希望项目能够容器化,然后可以通过 docker-compose 等工具编排容器/应用,本篇文章的目标是自定义Django基础镜像

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

最后为能够高效的处理静态文件请求,使用 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
  1. 基础镜像 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 这个文件中定义。

  1. 构建镜像
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
  1. 验证镜像
    基础镜像准备完毕后,就可以在项目镜像使用了,这里没有为基础镜像添加 TAG 标记,所以它是默认的 latest 。
docker images --format "{{.Repository}} {{.Tag}}" 

start-base latest

小结

最后来总结下文章中的知识点

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

参考文章
doker&k8s Qun [703906133]

原文地址:https://blog.51cto.com/14521173/2463894

时间: 2024-11-01 00:42:11

Django容器(上): 自定义基础镜像的相关文章

构建自定义docker镜像,上传至docker hub

docker 优势 (外部参考) Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后 发布到任何流行的Linux机器上,便可以实现虚拟化.Docker改变了虚拟化的方 式,使开发者可以直接将自己的成果放入Docker中进行管理.方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成. 安装docker(请参考外部链接) [Ubuntu Docker 安装](http://www.runoob.com/dock

为什么需要自定义一个基础镜像?

开始之前 为什么需要自定义一个PHP基础镜像? 对于使用php (python)等开发的项目,由于是解释型语言并不需要编译代码这个步骤(go或者java将依赖打包到可执行程序或包中),但是往往还需要安装一些依赖的库或者第三方模块. 在项目实践中一般会先在PHP官方镜像之上,添加项目一些必用扩展模块,例如连接 mysql数据库的 mysqlnd 模块,或者连接 redis.memcache.mongodb 等常用的php扩展模块,以项目实际需求为准. 基础镜像作用是为项目镜像提供支持,准备好php

在Docker Hub上你可以很轻松下载到大量已经容器化的应用镜像,即拉即用——daocloud国内镜像加速

Docker之所以这么吸引人,除了它的新颖的技术外,围绕官方Registry(Docker Hub)的生态圈也是相当吸引人眼球的地方. 在Docker Hub上你可以很轻松下载到大量已经容器化的应用镜像,即拉即用.这些镜像中,有些是Docker官方维护的,更多的是众多开发者自发上传分享的.而且你还可以在Docker Hub中绑定你的代码托管系统(目前支持Github和Bitbucket)配置自动生成镜像功能,这样Docker Hub会在你代码更新时自动生成对应的Docker镜像,是不是很方便?

docker实战之centos6.5上安装、镜像、容器相关操作

学习docker前,理解以下几个概念有助于更好的使用docker.镜像,容器,仓库.镜像,就是一个操作系统环境,里面只有你需要的几个应用程序,如apache,mysql,php之类,只读模板.容器,从镜像创建的运行实例.可视为一个简易环境中和其中运行的应用.仓库,存放镜像的地方.学过git的同学可能更容易理解. 一.安装docker时,增加第三方源epel如果是centos7,下载并安装这个软件包#wget http://mirror.hust.edu.cn/epel/beta/7/x86_64

Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较

1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这三种方式的大致说明请参考yeasy/docker_practice的创建镜像. 最近学习了Dockerfile文件的相关配置,这里做一下简单的总结,并对之前一直感到有些迷惑的CMD和ENTRYPOINT指令做个差异对比. 2.Dockerfile文件总结 Dockerfile 由一行行命令语句组成,

Docker 基础 : 镜像

目录 获取镜像 查看镜像信息 搜索镜像 删除镜像 创建镜像 导出和导入镜像 上传镜像 总结 镜像是 Docker 的三大核心概念之一.Docker 运行容器前需要本地存在对应的镜像,如果本地没有对应的镜像,Docker 会尝试从默认的镜像仓库下载.当然用户也可以通过配置,使用自定义的镜像仓库.本文将介绍镜像的具体操作,包括使用 pull 命令从 Docker Hub 的镜像仓库中拉取(下载)公共镜像:查看本地已有的镜像信息:使用 search 命令搜索镜像:删除镜像标签和镜像文件:创建用户自定义

面向生产和开发环境的LNP基础镜像

GITHUB地址:https://github.com/banyancheung/base-docker-env 这是一份适用于生产和开发环境的 Dockerfile. 在 phuison/baseimage 的基础上,增加了php.php扩展和nginx的安装脚本, 实现了一键安装LNP及其常用扩展的功能.目前已经在我司的生产环境上并运行良好.日常开发中也是基于此镜像进行的. 镜像内容 此镜像包括如下内容: Ubuntu 16.04 LTS correct init process syslo

测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作

本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏数据,导致QA在功能测试和接口测试过程中需要清理测试环境增加工作量,同时QA组在进行异常测试等多维度质量保障时也希望有多套环境进行数据隔离.但目前测试环境多套隔离操作麻烦,每隔离一套环境需要修改大量配置.数据库重新建表到调试可用,在开发的帮助下至少需要3天的时间,在这种场景下,我们借鉴组内大数据QA

上传docker镜像到hub.docker

首先必须得在hub.docker.com上注册账号 如何将镜像上传到hub.docker.com  docker pull caixia/ubuntu14.04docker images先将本地完善的镜像打包docker commit 7aab28da9ee7 caixia/ubuntu14.04:v1或者docker commit <exiting-container> <hub-user>/<repo-name>[:<tag>]上传如下docker pu