From 635ea5d58b53d165f7bedae90f8933c720a58150 Mon Sep 17 00:00:00 2001 From: Jonathan Stewmon Date: Fri, 1 Jul 2016 12:30:37 -0500 Subject: [PATCH] add python-3.6 --- .travis.yml | 3 ++ 3.6/Dockerfile | 49 +++++++++++++++++++++++++++++ 3.6/alpine/Dockerfile | 70 +++++++++++++++++++++++++++++++++++++++++ 3.6/onbuild/Dockerfile | 9 ++++++ 3.6/slim/Dockerfile | 71 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 202 insertions(+) create mode 100644 3.6/Dockerfile create mode 100644 3.6/alpine/Dockerfile create mode 100644 3.6/onbuild/Dockerfile create mode 100644 3.6/slim/Dockerfile diff --git a/.travis.yml b/.travis.yml index 1746dbb..24b2e11 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,9 @@ language: bash services: docker env: + - VERSION=3.6 VARIANT= + - VERSION=3.6 VARIANT=slim + - VERSION=3.6 VARIANT=alpine - VERSION=3.5 VARIANT= - VERSION=3.5 VARIANT=slim - VERSION=3.5 VARIANT=alpine diff --git a/3.6/Dockerfile b/3.6/Dockerfile new file mode 100644 index 0000000..d4193d2 --- /dev/null +++ b/3.6/Dockerfile @@ -0,0 +1,49 @@ +FROM buildpack-deps:jessie + +# remove several traces of debian python +RUN apt-get purge -y python.* + +# http://bugs.python.org/issue19846 +# > At the moment, setting "LANG=C" on a Linux system *fundamentally breaks Python 3*, and that's not OK. +ENV LANG C.UTF-8 + +ENV PYTHON_VERSION 3.6.0a2 + +# if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value ''" +ENV PYTHON_PIP_VERSION 8.1.2 + +RUN set -ex \ + && curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz \ + && curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" -o python.tar.xz.asc \ + && export GNUPGHOME="$(mktemp -d)" \ + && curl -fSL https://www.python.org/static/files/pubkeys.txt | gpg --import \ + && gpg --batch --verify python.tar.xz.asc python.tar.xz \ + && rm -r "$GNUPGHOME" python.tar.xz.asc \ + && mkdir -p /usr/src/python \ + && tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \ + && rm python.tar.xz \ + \ + && cd /usr/src/python \ + && ./configure --enable-shared --enable-unicode=ucs4 \ + && make -j$(nproc) \ + && make install \ + && ldconfig \ + && pip3 install --no-cache-dir --upgrade pip==$PYTHON_PIP_VERSION \ + && [ "$(pip list | awk -F '[ ()]+' '$1 == "pip" { print $2; exit }')" = "$PYTHON_PIP_VERSION" ] \ + && find /usr/local -depth \ + \( \ + \( -type d -a -name test -o -name tests \) \ + -o \ + \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \ + \) -exec rm -rf '{}' + \ + && rm -rf /usr/src/python ~/.cache + +# make some useful symlinks that are expected to exist +RUN cd /usr/local/bin \ + && ln -s easy_install-3.6 easy_install \ + && ln -s idle3 idle \ + && ln -s pydoc3 pydoc \ + && ln -s python3 python \ + && ln -s python3-config python-config + +CMD ["python3"] diff --git a/3.6/alpine/Dockerfile b/3.6/alpine/Dockerfile new file mode 100644 index 0000000..8b4097d --- /dev/null +++ b/3.6/alpine/Dockerfile @@ -0,0 +1,70 @@ +FROM alpine:3.4 + +# http://bugs.python.org/issue19846 +# > At the moment, setting "LANG=C" on a Linux system *fundamentally breaks Python 3*, and that's not OK. +ENV LANG C.UTF-8 + +ENV PYTHON_VERSION 3.6.0a2 + +# if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value ''" +ENV PYTHON_PIP_VERSION 8.1.2 + +RUN set -ex \ + && apk add --no-cache --virtual .fetch-deps curl gnupg \ + && curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz \ + && curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" -o python.tar.xz.asc \ + && export GNUPGHOME="$(mktemp -d)" \ + && curl -fSL https://www.python.org/static/files/pubkeys.txt | gpg --import \ + && gpg --batch --verify python.tar.xz.asc python.tar.xz \ + && rm -r "$GNUPGHOME" python.tar.xz.asc \ + && mkdir -p /usr/src \ + && tar -xJC /usr/src -f python.tar.xz \ + && mv "/usr/src/Python-$PYTHON_VERSION" /usr/src/python \ + && rm python.tar.xz \ + && apk del .fetch-deps \ + \ + && apk add --no-cache --virtual .build-deps \ + bzip2-dev \ + gcc \ + libc-dev \ + linux-headers \ + make \ + ncurses-dev \ + openssl-dev \ + pax-utils \ + readline-dev \ + sqlite-dev \ + xz-dev \ + zlib-dev \ + && cd /usr/src/python \ + && ./configure --enable-shared --enable-unicode=ucs4 \ + && make -j$(getconf _NPROCESSORS_ONLN) \ + && make install \ + && pip3 install --no-cache-dir --upgrade pip==$PYTHON_PIP_VERSION \ + && [ "$(pip list | awk -F '[ ()]+' '$1 == "pip" { print $2; exit }')" = "$PYTHON_PIP_VERSION" ] \ + && find /usr/local -depth \ + \( \ + \( -type d -a -name test -o -name tests \) \ + -o \ + \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \ + \) -exec rm -rf '{}' + \ + && runDeps="$( \ + scanelf --needed --nobanner --recursive /usr/local \ + | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \ + | sort -u \ + | xargs -r apk info --installed \ + | sort -u \ + )" \ + && apk add --virtual .python-rundeps $runDeps \ + && apk del .build-deps \ + && rm -rf /usr/src/python ~/.cache + +# make some useful symlinks that are expected to exist +RUN cd /usr/local/bin \ + && ln -s easy_install-3.6 easy_install \ + && ln -s idle3 idle \ + && ln -s pydoc3 pydoc \ + && ln -s python3 python \ + && ln -s python3-config python-config + +CMD ["python3"] diff --git a/3.6/onbuild/Dockerfile b/3.6/onbuild/Dockerfile new file mode 100644 index 0000000..865aaa8 --- /dev/null +++ b/3.6/onbuild/Dockerfile @@ -0,0 +1,9 @@ +FROM python:3.6 + +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app + +ONBUILD COPY requirements.txt /usr/src/app/ +ONBUILD RUN pip install --no-cache-dir -r requirements.txt + +ONBUILD COPY . /usr/src/app diff --git a/3.6/slim/Dockerfile b/3.6/slim/Dockerfile new file mode 100644 index 0000000..7490abd --- /dev/null +++ b/3.6/slim/Dockerfile @@ -0,0 +1,71 @@ +FROM debian:jessie + +# remove several traces of debian python +RUN apt-get purge -y python.* + +# http://bugs.python.org/issue19846 +# > At the moment, setting "LANG=C" on a Linux system *fundamentally breaks Python 3*, and that's not OK. +ENV LANG C.UTF-8 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + libsqlite3-0 \ + libssl1.0.0 \ + && rm -rf /var/lib/apt/lists/* + +ENV PYTHON_VERSION 3.6.0a2 + +# if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value ''" +ENV PYTHON_PIP_VERSION 8.1.2 + +RUN set -ex \ + && buildDeps=' \ + curl \ + gcc \ + libbz2-dev \ + libc6-dev \ + liblzma-dev \ + libncurses-dev \ + libreadline-dev \ + libsqlite3-dev \ + libssl-dev \ + make \ + xz-utils \ + zlib1g-dev \ + ' \ + && apt-get update && apt-get install -y $buildDeps --no-install-recommends && rm -rf /var/lib/apt/lists/* \ + && curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz \ + && curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" -o python.tar.xz.asc \ + && export GNUPGHOME="$(mktemp -d)" \ + && curl -fSL https://www.python.org/static/files/pubkeys.txt | gpg --import \ + && gpg --batch --verify python.tar.xz.asc python.tar.xz \ + && rm -r "$GNUPGHOME" python.tar.xz.asc \ + && mkdir -p /usr/src/python \ + && tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \ + && rm python.tar.xz \ + \ + && cd /usr/src/python \ + && ./configure --enable-shared --enable-unicode=ucs4 \ + && make -j$(nproc) \ + && make install \ + && ldconfig \ + && pip3 install --no-cache-dir --upgrade pip==$PYTHON_PIP_VERSION \ + && [ "$(pip list | awk -F '[ ()]+' '$1 == "pip" { print $2; exit }')" = "$PYTHON_PIP_VERSION" ] \ + && find /usr/local -depth \ + \( \ + \( -type d -a -name test -o -name tests \) \ + -o \ + \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \ + \) -exec rm -rf '{}' + \ + && apt-get purge -y --auto-remove $buildDeps \ + && rm -rf /usr/src/python ~/.cache + +# make some useful symlinks that are expected to exist +RUN cd /usr/local/bin \ + && ln -s easy_install-3.6 easy_install \ + && ln -s idle3 idle \ + && ln -s pydoc3 pydoc \ + && ln -s python3 python \ + && ln -s python3-config python-config + +CMD ["python3"]