一、打包镜像的文件:Dockerfile
# Version 1.0.0
# wget http://ftp.jaist.ac.jp/pub/OpenBSD/LibreSSL/libressl-2.9.2.tar.gz
# wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
# build cmd: docker build -t euleros-python:3.7.3 .
FROM euleros:2.0.5 as create_image
LABEL MAINTAINER="[email protected]"
RUN yum clean all && yum makecache && rpm -rebuilddb && \
yum install -y yum-utils && \
echo "[centos-base]" > /etc/yum.repos.d/CentOS-7.repo && \
echo "name=CentOS-7 - Base - mirrors.huaweicloud.com" >> /etc/yum.repos.d/CentOS-7.repo && \
echo "baseurl=https://mirrors.huaweicloud.com/centos/7/os/\$basearch/" >> /etc/yum.repos.d/CentOS-7.repo && \
echo "gpgcheck=1" >> /etc/yum.repos.d/CentOS-7.repo && \
echo "gpgkey=https://mirrors.huaweicloud.com/centos/RPM-GPG-KEY-CentOS-7" >> /etc/yum.repos.d/CentOS-7.repo && \
echo "enabled=0" >> /etc/yum.repos.d/CentOS-7.repo && \
yum makecache && \
yum-config-manager --enable centos-base && \
yum-config-manager --disable base && \
yum clean all && yum makecache && rpm -rebuilddb && \
yum erase -y uuid uuid-devel && \
yum install -y uuid uuid-devel && \
yum-config-manager --disable centos-base && \
yum-config-manager --enable base && \
yum clean all && yum makecache && rpm -rebuilddb
COPY ./libressl-2.9.2.tar.gz ./
COPY ./Python-3.7.3.tgz ./
RUN yum clean all && yum makecache && rpm -rebuilddb && \
yum install -y tar gzip && \
yum install -y gcc make zlib-devel bzip2-devel ncursess-devel sqlite-devel readline-devel xz-devel libffi-devel uuid-devel libuuid-devel gdbm-devel tk-devel && \
tar xzvf libressl-2.9.2.tar.gz && \
rm libressl-2.9.2.tar.gz && \
cd libressl-2.9.2 && \
export LD_LIBRARY_PATH=/usr/local/gcc-4.9.4/lib64:/usr/local/gmp/lib:/usr/local/mpfr/lib:/usr/local/mpc/lib && \
./configure --prefix=/usr/local/ssl && \
make -j4 && \
make install && \
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl && \
ln -s /usr/local/ssl/include/openssl /usr/include/openssl && \
echo /usr/local/ssl/lib > /etc/ld.so.conf.d/libressl-2.9.2.conf && \
ldconfig -v && \
cd .. && rm -fr ./libressl-2.9.2
RUN tar xzvf Python-3.7.3.tgz && \
rm Python-3.7.3.tgz && \
cd Python-3.7.3 && \
export CFLAGS=" -Wno-error=coverage-mismatch" && \
export CPPFLAGS=" -Wno-error=coverage-mismatch" && \
sed -i "4,9s/^/\/\//" ./Modules/_uuidmodule.c && \
sed -i "5s/\/\///" ./Modules/_uuidmodule.c && \
sed -i "s/Werror=implicit-function-declaration/Wno-error/g" ./configure && \
export LD_LIBRARY_PATH=/usr/local/gcc-4.9.4/lib64:/usr/local/gmp/lib:/usr/local/mpfr/lib:/usr/local/mpc/lib && \
./configure --prefix=/usr/local/python373 --enable-optimizations --with-openssl=/usr/local/ssl --enable-shared && \
export LANGUAGE=en_US.UTF-8 && \
export LANG=en_US.UTF-8 && \
export LC_ALL=en_US.UTF-8 && \
make -j4 && \
make install
RUN ln -s /usr/local/python373/bin/python3.7 /usr/local/bin/python3 && \
ln -s /usr/local/python373/bin/pip3.7 /usr/local/bin/pip3 && \
ln -s /usr/local/python373/bin/python3.7 /usr/bin/python3.7.3 && \
ln -s /usr/local/python373/bin/python3.7 /usr/bin/python373 && \
ln -s /usr/local/python373/bin/python3.7 /usr/bin/python3 && \
ln -s /usr/local/python373/bin/pip3.7 /usr/bin/pip3.7.3 && \
ln -s /usr/local/python373/bin/pip3.7 /usr/bin/pip373 && \
ln -s /usr/local/python373/bin/pip3.7 /usr/bin/pip3 && \
mkdir -p /root/.cache/pip/http && \
cd .. && rm -fr Python-3.7.3
ENV PATH=/usr/local/python373/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV LD_LIBRARY_PATH=/usr/local/python373/lib
COPY ./requirements.txt ./requirements.txt
RUN /usr/bin/python373 -m pip install --upgrade --index-url=https://mirrors.huaweicloud.com/repository/pypi/simple --trusted-host=mirrors.huaweicloud.com pip && \
/usr/bin/pip373 install --upgrade --index-url=https://mirrors.huaweicloud.com/repository/pypi/simple --trusted-host=mirrors.huaweicloud.com -r requirements.txt
RUN find /usr/local/python373 -name "__pycache__"|xargs rm -fr && \
rm -fr /root/.cache/pip/* && \
yum clean all && rm -fr /tmp/* && rm -fr /var/tmp/* && rm -fr /var/cache/*
FROM euleros:2.0.5 as copy_image
LABEL MAINTAINER="[email protected]"
COPY --from=create_image /usr/local/python373 /usr/local/python373
RUN ln -s /usr/local/python373/bin/python3.7 /usr/local/bin/python3 && \
ln -s /usr/local/python373/bin/pip3.7 /usr/local/bin/pip3 && \
ln -s /usr/local/python373/bin/python3.7 /usr/bin/python3.7.3 && \
ln -s /usr/local/python373/bin/python3.7 /usr/bin/python373 && \
ln -s /usr/local/python373/bin/python3.7 /usr/bin/python3 && \
ln -s /usr/local/python373/bin/pip3.7 /usr/bin/pip3.7.3 && \
ln -s /usr/local/python373/bin/pip3.7 /usr/bin/pip373 && \
ln -s /usr/local/python373/bin/pip3.7 /usr/bin/pip3
ENV PATH=/usr/local/python373/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV LD_LIBRARY_PATH=/usr/local/python373/lib
二、打包镜像:
docker build -t euleros-python:3.7.3 .
三、导出编译包:
mkdir -p /tmp/python_dir
docker run -d -v /tmp/python_dir:/tmp/python_dir --name python-back euleros-python:3.7.3 /bin/bash -c "while [ true ]; do sleep 30; date '+%Y-%m-%d %H:%M:%S';done"
docker exec -it python-back /bin/bash
yum -y install tar gzip
cd /tmp/python_dir
tar cvf python373.tar /usr/local/python373
gzip python373.tar
文章来源: www.oschina.net,作者:mbzhong,版权归原作者所有,如需转载,请联系作者。
原文链接:https://my.oschina.net/mengyoufengyu/blog/3220738