在外部 Docker 图像中构建 python 的 gevent
Build python's gevent in outer Docker image
这个docker文件显然不起作用:
FROM python:3.7.0-alpine
RUN pip install gevent
因为alpine中没有编译器。
是否可以将其安装在不同的 docker 映像中,然后将其复制到我的映像中?
换句话说,我可以通过用某些东西替换 <???>
来实现吗?
FROM python:3.7.0-streach as base
RUN pip install gevent
FROM python:3.7.0-alpine
COPY --from=base <???>
Alpine Linux 具有 build-base
,它提供了一种安装编译器和其他构建工具的便捷方式。您还需要安装 libffi-dev
和其他提供 headers 的软件包。
您打算将 gevent
从 Debian-based 容器复制到 Alpine-based 容器的方法将不起作用,因为后者使用 musl
,而不是 libc
.查看 apk
的 --virtual
选项以轻松 un-/install 构建依赖项。
据我所知,由于 ABI 更改 gevent
(或它的某些版本)不针对 CPython 3.7(目前)进行编译。
对于一年后发现这个问题的人来说,这应该有效:
FROM python:3.7.0-stretch as base
RUN apk add build-base
RUN mkdir /install
RUN pip install --install-option="--prefix=/install" gevent
FROM python:3.7.0-alpine
COPY --from=base /install /usr/local
这个docker文件显然不起作用:
FROM python:3.7.0-alpine
RUN pip install gevent
因为alpine中没有编译器。
是否可以将其安装在不同的 docker 映像中,然后将其复制到我的映像中?
换句话说,我可以通过用某些东西替换 <???>
来实现吗?
FROM python:3.7.0-streach as base
RUN pip install gevent
FROM python:3.7.0-alpine
COPY --from=base <???>
Alpine Linux 具有 build-base
,它提供了一种安装编译器和其他构建工具的便捷方式。您还需要安装 libffi-dev
和其他提供 headers 的软件包。
您打算将 gevent
从 Debian-based 容器复制到 Alpine-based 容器的方法将不起作用,因为后者使用 musl
,而不是 libc
.查看 apk
的 --virtual
选项以轻松 un-/install 构建依赖项。
据我所知,由于 ABI 更改 gevent
(或它的某些版本)不针对 CPython 3.7(目前)进行编译。
对于一年后发现这个问题的人来说,这应该有效:
FROM python:3.7.0-stretch as base
RUN apk add build-base
RUN mkdir /install
RUN pip install --install-option="--prefix=/install" gevent
FROM python:3.7.0-alpine
COPY --from=base /install /usr/local