ProHoster > ΠΠ»ΠΎΠ³ > Administrasi > Alpine compiles Docker mbangun kanggo Python 50 kaping alon, lan gambar 2 kaping luwih abot
Alpine compiles Docker mbangun kanggo Python 50 kaping alon, lan gambar 2 kaping luwih abot
Alpine Linux asring dianjurake minangka gambar dhasar kanggo Docker. Sampeyan dikandhani yen nggunakake Alpine bakal nggawe bangunan luwih cilik lan proses mbangun luwih cepet.
Nanging yen sampeyan nggunakake Alpine Linux kanggo aplikasi Python, banjur:
Ayo kang katon ing apa Alpine dianjurake, nanging apa sampeyan isih ora kudu nggunakake karo Python.
Napa wong nyaranake Alpine?
Ayo nganggep manawa kita butuh gcc minangka bagean saka gambar kita lan kita pengin mbandhingake Alpine Linux vs Ubuntu 18.04 babagan kacepetan mbangun lan ukuran gambar pungkasan.
Pisanan, ayo ndownload rong gambar lan mbandhingake ukurane:
$ docker pull --quiet ubuntu:18.04
docker.io/library/ubuntu:18.04
$ docker pull --quiet alpine
docker.io/library/alpine:latest
$ docker image ls ubuntu:18.04
REPOSITORY TAG IMAGE ID SIZE
ubuntu 18.04 ccc6e87d482b 64.2MB
$ docker image ls alpine
REPOSITORY TAG IMAGE ID SIZE
alpine latest e7d92cdc71fe 5.59MB
Minangka sampeyan bisa ndeleng, gambar dhasar kanggo Alpine luwih cilik. Ayo saiki nyoba nginstal gcc lan miwiti karo Ubuntu:
FROM ubuntu:18.04
RUN apt-get update &&
apt-get install --no-install-recommends -y gcc &&
apt-get clean && rm -rf /var/lib/apt/lists/*
Nulis Dockerfile sing sampurna ngluwihi ruang lingkup artikel iki.
Ayo ngukur kacepetan perakitan:
$ time docker build -t ubuntu-gcc -f Dockerfile.ubuntu --quiet .
sha256:b6a3ee33acb83148cd273b0098f4c7eed01a82f47eeb8f5bec775c26d4fe4aae
real 0m29.251s
user 0m0.032s
sys 0m0.026s
$ docker image ls ubuntu-gcc
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-gcc latest b6a3ee33acb8 9 seconds ago 150MB
Baleni maneh kanggo Alpine (Dockerfile):
FROM alpine
RUN apk add --update gcc
Kita ngumpul, ndeleng wektu lan ukuran perakitan:
$ time docker build -t alpine-gcc -f Dockerfile.alpine --quiet .
sha256:efd626923c1478ccde67db28911ef90799710e5b8125cf4ebb2b2ca200ae1ac3
real 0m15.461s
user 0m0.026s
sys 0m0.024s
$ docker image ls alpine-gcc
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine-gcc latest efd626923c14 7 seconds ago 105MB
Kaya sing dijanjekake, gambar adhedhasar Alpine diklumpukake luwih cepet lan luwih cilik: 15 detik tinimbang 30 lan ukuran gambar 105MB lawan 150MB. Iku cukup apik!
Nanging yen kita ngalih kanggo mbangun aplikasi Python, banjur kabeh ora dadi rosy.
Gambar Python
Aplikasi Python asring nggunakake panda lan matplotlib. Mula, salah sawijining pilihan yaiku njupuk gambar berbasis Debian resmi nggunakake Dockerfile iki:
FROM python:3.8-slim
RUN pip install --no-cache-dir matplotlib pandas
Ayo ngumpulake:
$ docker build -f Dockerfile.slim -t python-matpan.
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM python:3.8-slim
---> 036ea1506a85
Step 2/2 : RUN pip install --no-cache-dir matplotlib pandas
---> Running in 13739b2a0917
Collecting matplotlib
Downloading matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.whl (13.1 MB)
Collecting pandas
Downloading pandas-0.25.3-cp38-cp38-manylinux1_x86_64.whl (10.4 MB)
...
Successfully built b98b5dc06690
Successfully tagged python-matpan:latest
real 0m30.297s
user 0m0.043s
sys 0m0.020s
Kita entuk gambar ukuran 363MB.
Apa kita bakal luwih apik karo Alpine? Ayo jajal:
FROM python:3.8-alpine
RUN pip install --no-cache-dir matplotlib pandas
$ docker build -t python-matpan-alpine -f Dockerfile.alpine .
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM python:3.8-alpine
---> a0ee0c90a0db
Step 2/2 : RUN pip install --no-cache-dir matplotlib pandas
---> Running in 6740adad3729
Collecting matplotlib
Downloading matplotlib-3.1.2.tar.gz (40.9 MB)
ERROR: Command errored out with exit status 1:
command: /usr/local/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/
tmp/pip-install-a3olrixa/matplotlib/setup.py'"'"'; __file__='"'"'/tmp/pip-install-a3olrixa/matplotlib/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-a3olrixa/matplotlib/pip-egg-info
...
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
The command '/bin/sh -c pip install matplotlib pandas' returned a non-zero code: 1
Apa sing kelakon?
Alpine ora ndhukung gembong
Yen katon ing mbangun, kang adhedhasar Debian, sampeyan bakal weruh sing download matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.whl.
Iki minangka binar kanggo wheel . Alpine ngundhuh sumber `matplotlib-3.1.2.tar.gz` amarga ora ndhukung standar gembong.
Kenging punapa? Umume distribusi Linux nggunakake versi GNU (glibc) saka perpustakaan standar C, sing sejatine dibutuhake saben program sing ditulis ing C, kalebu Python. Nanging Alpine nggunakake `musl`, lan amarga binari kasebut dirancang kanggo `glibc`, mula ora dadi pilihan.
Mulane, yen sampeyan nggunakake Alpine, sampeyan kudu ngumpulake kabeh kode sing ditulis ing C ing saben paket Python.
Oh, ya, sampeyan kudu nggoleki dhaptar kabeh dependensi sing kudu dikompilasi dhewe.
Ing kasus iki, kita entuk iki:
FROM python:3.8-alpine
RUN apk --update add gcc build-base freetype-dev libpng-dev openblas-dev
RUN pip install --no-cache-dir matplotlib pandas
Mesthine kesalahan kasebut wis didandani, nanging sapa ngerti bakal ana maneh.
Aja nggunakake gambar Alpine kanggo Python
Yen sampeyan ora pengin ngganggu mbangun gedhe lan dawa, nggoleki dependensi lan kesalahan potensial, aja nggunakake Alpine Linux minangka gambar dhasar. Milih gambar dhasar sing apik.