python pyz_python-3.x – 如何在Alpine Linux容器上安装pyz...

使用py3-zmq包

根据我的经验,python:3.6-alpine不适合安装带有C扩展的包,因为缺少Python头.高山图像已经提供了Python 3.6发行版,也提供了precompiled pyzmq package版本,所以它已经足够了:

FROM alpine:edge

RUN apk update && apk add py3-zmq

CMD ["/bin/sh"]

校验:

$docker run --rm -it my/alpine /bin/sh

/ # python3 -c "import zmq; print(zmq.__version__)"

17.1.0

这是在Alpine容器中安装pyzmq的最简单,最可靠的方法.

使用pip install从源代码构建

Alpine不与manylinux1兼容,因此任何包含C扩展的包都必须从源代码构建.这意味着您必须首先安装构建工具.再次,我使用alpine图像而不是python:3.6-alpine:

FROM alpine:edge

RUN apk update && apk add build-base libzmq musl-dev python3 python3-dev zeromq-dev

RUN pip3 install pyzmq

# reduce image size by cleaning up the build packages

RUN apk del build-base musl-dev python3-dev zeromq-dev

CMD ["/bin/sh"]

校验:

$docker run --rm -it my/alpine /bin/sh

/ # python3 -c "import zmq; print(zmq.__version__)"

17.1.0

如果你坚持使用python:3.6-alpine

请注意python:3.6-alpine不通过apk安装Python,它具有从源构建的Python并位于/usr/local下.所以当你从python继承:3.6-alpine,安装python3-dev并运行pip install pyzmq时,你最终将使用Python 3.6中的头文件为Python 3.6.6(来自python:3.6-alpine)构建pyzmq. 4(来自apk添加python3-dev).一般来说,这不应该是一个问题(头文件只在主要的Python版本之间不兼容),但如果头文件由发行版维护者调整,可能会成为一个问题.

编辑:使用日志重现的确切步骤

$docker image rm my/alpine:latest

Untagged: my/alpine:latest

Deleted: sha256:2e613cdc3c90c9d44b23d399bd44069217e5b31c1b4a8fc91e501c5226a4ef6a

Deleted: sha256:d66ac6c96a4fca9c4fe71a73b64a4dd3605a59e570f327974954649b633a7fc5

Deleted: sha256:114efba5527eb4ab23020ef84b6181b6a6ba790059b83ce046c9a1a6c0bdf419

$docker image prune

WARNING! This will remove all dangling images.

Are you sure you want to continue? [y/N] y

Deleted Images:

untagged: alpine@sha256:79c2c5f6db53da44f90bb2731f29f725b5b14c378407a123776b6d3c76e6aebe

untagged: alpine@sha256:ae8a1f9146d74466ddf1def02088ba33544db9aceef01f4b388c674a5ad1d00b

deleted: sha256:5c4fa780951b060bb0a75355765bc58112350d9974970d60561671d552aaf2e2

deleted: sha256:c9e8b5c053a2dda62373bc57fa8cb634230a92ba5f02d2baf5d35b932d04a878

Total reclaimed space: 4.148MB

$cat ./Dockerfile

FROM alpine:edge

RUN apk update && apk add py3-zmq

CMD ["/bin/sh"]

$docker pull alpine:edge

edge: Pulling from library/alpine

a0710691c81a: Pull complete

Digest: sha256:8d9872bf7dc946db1b3cd2bf70752f59085ec3c5035ca1d820d30f1d1267d65d

Status: Downloaded newer image for alpine:edge

$docker build -t my/alpine .

Sending build context to Docker daemon 3.072kB

Step 1/3 : FROM alpine:edge

---> 9d1f27787d39

Step 2/3 : RUN apk update && apk add py3-zmq

---> Running in 0f9bd971b5da

fetch http://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz

fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz

v3.8.0-1447-g6c9915aaa5 [http://dl-cdn.alpinelinux.org/alpine/edge/main]

v3.8.0-1459-g2ff55fde23 [http://dl-cdn.alpinelinux.org/alpine/edge/community]

OK: 9626 distinct packages available

(1/16) Installing libbz2 (1.0.6-r6)

(2/16) Installing expat (2.2.5-r0)

(3/16) Installing libffi (3.2.1-r4)

(4/16) Installing gdbm (1.13-r1)

(5/16) Installing xz-libs (5.2.4-r0)

(6/16) Installing ncurses-terminfo-base (6.1-r0)

(7/16) Installing ncurses-terminfo (6.1-r0)

(8/16) Installing ncurses-libs (6.1-r0)

(9/16) Installing readline (7.0.003-r0)

(10/16) Installing sqlite-libs (3.24.0-r1)

(11/16) Installing python3 (3.6.4-r1)

(12/16) Installing libgcc (6.4.0-r8)

(13/16) Installing libsodium (1.0.16-r0)

(14/16) Installing libstdc++ (6.4.0-r8)

(15/16) Installing libzmq (4.2.3-r0)

(16/16) Installing py3-zmq (17.1.0-r0)

Executing busybox-1.28.4-r0.trigger

OK: 69 MiB in 29 packages

Removing intermediate container 0f9bd971b5da

---> 83a4db72581d

Step 3/3 : CMD ["/bin/sh"]

---> Running in b37e3ef8e639

Removing intermediate container b37e3ef8e639

---> 558bd6427c77

Successfully built 558bd6427c77

Successfully tagged my/alpine:latest

$docker run --rm -it my/alpine python3 -c "import zmq; print(zmq.__version__)"

17.1.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值