Dockerfile 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. ARG DOCKER_VERSION=19.03
  2. ARG PYTHON_VERSION=3.7.10
  3. ARG BUILD_ALPINE_VERSION=3.12
  4. ARG BUILD_CENTOS_VERSION=7
  5. ARG BUILD_DEBIAN_VERSION=slim-stretch
  6. ARG RUNTIME_ALPINE_VERSION=3.12
  7. ARG RUNTIME_CENTOS_VERSION=7
  8. ARG RUNTIME_DEBIAN_VERSION=stretch-slim
  9. ARG DISTRO=alpine
  10. FROM docker:${DOCKER_VERSION} AS docker-cli
  11. FROM python:${PYTHON_VERSION}-alpine${BUILD_ALPINE_VERSION} AS build-alpine
  12. RUN apk add --no-cache \
  13. bash \
  14. build-base \
  15. ca-certificates \
  16. curl \
  17. gcc \
  18. git \
  19. libc-dev \
  20. libffi-dev \
  21. libgcc \
  22. make \
  23. musl-dev \
  24. openssl \
  25. openssl-dev \
  26. zlib-dev
  27. ENV BUILD_BOOTLOADER=1
  28. FROM python:${PYTHON_VERSION}-${BUILD_DEBIAN_VERSION} AS build-debian
  29. RUN apt-get update && apt-get install --no-install-recommends -y \
  30. curl \
  31. gcc \
  32. git \
  33. libc-dev \
  34. libffi-dev \
  35. libgcc-6-dev \
  36. libssl-dev \
  37. make \
  38. openssl \
  39. zlib1g-dev
  40. FROM centos:${BUILD_CENTOS_VERSION} AS build-centos
  41. RUN yum install -y \
  42. gcc \
  43. git \
  44. libffi-devel \
  45. make \
  46. openssl \
  47. openssl-devel
  48. WORKDIR /tmp/python3/
  49. ARG PYTHON_VERSION
  50. RUN curl -L https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz | tar xzf - \
  51. && cd Python-${PYTHON_VERSION} \
  52. && ./configure --enable-optimizations --enable-shared --prefix=/usr LDFLAGS="-Wl,-rpath /usr/lib" \
  53. && make altinstall
  54. RUN alternatives --install /usr/bin/python python /usr/bin/python2.7 50
  55. RUN alternatives --install /usr/bin/python python /usr/bin/python$(echo "${PYTHON_VERSION%.*}") 60
  56. RUN curl https://bootstrap.pypa.io/get-pip.py | python -
  57. FROM build-${DISTRO} AS build
  58. ENTRYPOINT ["sh", "/usr/local/bin/docker-compose-entrypoint.sh"]
  59. WORKDIR /code/
  60. COPY docker-compose-entrypoint.sh /usr/local/bin/
  61. COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/docker
  62. RUN pip install \
  63. virtualenv==20.4.0 \
  64. tox==3.21.2
  65. COPY requirements-dev.txt .
  66. COPY requirements-indirect.txt .
  67. COPY requirements.txt .
  68. RUN pip install -r requirements.txt -r requirements-indirect.txt -r requirements-dev.txt
  69. COPY .pre-commit-config.yaml .
  70. COPY tox.ini .
  71. COPY setup.py .
  72. COPY README.md .
  73. COPY compose compose/
  74. RUN tox -e py37 --notest
  75. COPY . .
  76. ARG GIT_COMMIT=unknown
  77. ENV DOCKER_COMPOSE_GITSHA=$GIT_COMMIT
  78. RUN script/build/linux-entrypoint
  79. FROM scratch AS bin
  80. ARG TARGETARCH
  81. ARG TARGETOS
  82. COPY --from=build /usr/local/bin/docker-compose /docker-compose-${TARGETOS}-${TARGETARCH}
  83. FROM alpine:${RUNTIME_ALPINE_VERSION} AS runtime-alpine
  84. FROM debian:${RUNTIME_DEBIAN_VERSION} AS runtime-debian
  85. FROM centos:${RUNTIME_CENTOS_VERSION} AS runtime-centos
  86. FROM runtime-${DISTRO} AS runtime
  87. COPY docker-compose-entrypoint.sh /usr/local/bin/
  88. ENTRYPOINT ["sh", "/usr/local/bin/docker-compose-entrypoint.sh"]
  89. COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/docker
  90. COPY --from=build /usr/local/bin/docker-compose /usr/local/bin/docker-compose