No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Dockerfile
README.md

README.md

如何制作一个定制的 Python 基础 Docker 镜像

目标:准备一个定制的 Python 基础镜像。基础镜像,通常为含最小功能的系统镜像,之后的应用镜像都以此为基础。

本项目代码维护在 DaoCloud/python-sample-base-image 项目中。

您可以在 GitHub 找到本项目并获取本文中所提到的所有脚本文件。

制作基础镜像

  • 选择 Ubuntu 官方的 14.04 版本为我们依赖的系统镜像。
FROM ubuntu:trusty

因所有官方镜像均位于境外服务器,为了确保所有示例能正常运行,可以使用与官方镜像保持同步的 DaoCloud 境内镜像:

FROM daocloud.io/ubuntu:trusty
  • 设置镜像的维护者,相当于镜像的作者或发行方。
MAINTAINER Captain Dao <support@daocloud.io>
  • RUN 命令调用 apt-get 包管理器安装 Python 环境所依赖的程序包。

安装依赖包相对比较固定,因此该动作应该尽量提前,这样做有助于提高镜像层的复用率。

安装完依赖后打扫卫生可以显著的减少镜像大小。

RUN apt-get update && \
  	apt-get install -y python \
    				   python-dev \
                       python-pip && \
  	rm -rf /var/lib/apt/lists/*

以下是一个不建议的做法,原因是比上述命令多添加了一层镜像,然而并没有降低总镜像的体积。

RUN apt-get update && \
 	apt-get install -y python \
   				   python-dev \
                      python-pip 
RUN rm -rf /var/lib/apt/lists/*
  • RUN 命令调用 mkdir 来准备一个干净的放置代码的目录。
RUN mkdir -p /app
  • 指定其为当前的工作目录。
WORKDIR /app
  • 指定暴露的容器内端口地址,最后设置默认启动命令。
EXPOSE 80
CMD ["bash"]

至此一个 Python 的基础镜像制作完毕,您可以在本地运行 docker build -t my-python-base . 来构建出这个镜像并命名为 my-python-base

Python 家族成员众多,因此需要一个通用的基础镜像,并在此基础上根据需求进行定制。

由于国内网络环境的特殊,在本地运行 docker build 的时间会很长,并且有可能失败。推荐使用 DaoCloud Toolbox 和 DaoCloud 的云端 代码构建 功能。

完整 Dockerfile

# Ubuntu 14.04,Trusty Tahr(可靠的塔尔羊)发行版
FROM daocloud.io/ubuntu:trusty

# 道客船长荣誉出品
MAINTAINER Captain Dao <support@daocloud.io>

# APT 自动安装 PHP 相关的依赖包,如需其他依赖包在此添加
RUN apt-get update && \
  	apt-get install -y python \
    				   python-dev \
                       python-pip  \
    # 用完包管理器后安排打扫卫生可以显著的减少镜像大小
    && apt-get clean \
    && apt-get autoclean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# 配置默认放置 App 的目录
RUN mkdir -p /app
WORKDIR /app
EXPOSE 80
CMD ["bash"]