docker自定义Python镜像
前言
当我们使用docker镜像代替搭环境的时候,你的心情是起飞的
正是如此,你是否疑问,这些镜像哪里来的?
so,一起探索下自定义镜像
一、自定义python镜像
dockerfile文件用于自定义镜像,我通过基础镜像centos来构建一个python3.7.5镜像。
dockerfile
FROM daocloud.io/library/centos:centos7
# 下载解压包到dockerfile同级目录 https://www.python.org/downloads/release/python-375/
COPY ./Python-3.7.5 /usr/local/Python-3.7.5
# dockerfile同级目录下配置源文件
COPY ./pip.conf /root/.pip/pip.conf
RUN cd /usr/local/Python-3.7.5 \
&& yum install -y gcc make wget zlib zlib-devel \
bzip2 bzip2-devel libffi-devel readline readline-devel \
ncurses ncurses-devel openssl openssl-devel \
&& ./configure \
&& make \
&& make install \
&& rm -rf /usr/bin/python \
&& rm -rf /usr/bin/pip \
&& ln -s /usr/local/python3.7 /usr/bin/python \
&& ln -s /usr/local/pip3.7 /usr/bin/pip
pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
这里我只用了一层镜像(docker分层原理)。在搭建的过程中只要有一个命令出错了,就得调试重新build,最后的结果如图。
我自定义的python镜像文件有748MB,而别人的镜像才83.4MB,差了10倍,emoji…如何压缩镜像大小?
二、镜像优化
2.1 基础镜像的选择尽量精简
基础镜像centos7可以选择精简版才70MB,甚至可以选择Alpine Linux。
2.2 RUN命令的使用尽量少
因为一个RUN命令就会建立一层自定义镜像层,涉及镜像分层原理。
2.3 清理不必要的镜像构建的中间产物
如不需要的文件、压缩包、目录等等
# 清理yum下载的依赖包等
yum clean all
# 删除python的下载包
rm -rf /usr/local/Python-3.7.5
再次构建镜像,发现减少了100MB
2.4 尽量使用构建缓存
这样多个镜像只需要共享同一个镜像层,并且构建速度很快。
2.5 优化网络请求
也是为了提高构建的速度
2.6 使用多阶段构建镜像
总结
docker自定义镜像简单,镜像优化需要了解原理
欢迎相互交流