ααΈαα»α
Alpine ααΆααΏααααααΌαααΆαααααΆαααΆααΌαααΆαααΌαααααΆααααααΆαα Docker α α’αααααααΌαααΆαααααΆααααΆααΆαααααΎ Alpine ααΉαααααΎα±ααααΆαααΆααααααααα’αααααΌα
ααΆααα»α α αΎαααααΎαααΆαααΆααααααααα’αααααΏαααΆααα»αα
ααα»ααααααααα·αααΎα’αααααααΎ Alpine Linux αααααΆαααααααα·ααΈ Python αααααΆα
- ααααΎα±ααααΆαααΆααααααααα’αααααΊαααΆα
- ααααΎα±ααααΌαααΆαααααα’αααααΆαααααα
- ααααααααΆααααααααΆααααα’αααα
- α αΎααα ααΈαααα ααααΆα’αΆα αααααΆαα±ααααΆαααα α»ααααα»αααααΎαααΆα
ααΌααααα‘ααααΎαααΌαα ααα»ααα Alpine ααααΌαααΆαααααΆα ααα»ααααα ααα»α’αααΈααΆαααΆα’ααααα
αααα·ααα½αααααΎααΆααΆαα½α Pythonα
α ααα»α’αααΈααΆαααΆααα»αααααααΆαα’αΆααααα?
α αΌααααααααΆααΎαααααΌαααΆα gcc ααΆαααααααααΌαααΆαααααααΎα α αΎαααΎαα αααααααααα Alpine Linux αααααΉα Ubuntu 18.04 ααΆααααααΉαααααΏααααααΎα αα·αααα αααΌαααΆαα α»ααααααα
ααααΌα ααΎαααΆαααααΌαααΆαααΈα α αΎαααααααααααα αααααααΆα
$ 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
ααΌα αααα’αααα’αΆα ααΎαααΌαααΆαααΌαααααΆααααααΆααα’αΆαααααααΊααΌα ααΆαα αααΎαα αααααΆαααααααα‘αΎα gcc α αΎαα αΆααααααΎαααΆαα½α 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/*
ααΆαααααα Dockerfile ααααα’α₯αααα ααααΊα α½αααΈαα·ααΆαααΆαααα’ααααααααα
αααααΆααααααΏαααα‘αΎαα
$ 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
ααΎαααααΎααααααααααΆαα Alpine (Dockerfile)α
FROM alpine
RUN apk add --update gcc
ααΎααααααΌααααα»α ααΎααααααααΆ αα·αααα αααααΆααα½αααααα»αααααΆα
$ 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
ααΌα αααααΆααααααΆ ααΌαααΆααααααΆαααΌαααααΆαααΎα’αΆαααααααααΌαααΆααααααΌαααΆαααΏαααΆααα»α αα·αααΆαααα αααΌα ααΆα: 15 αα·ααΆααΈαααα½αα±αα 30 α αΎαααα αααΌαααΆαααΊ 105MB αααααΉα 150MB α ααα’ααΆαα!
ααα»ααααααααα·αααΎααΎαααααΌααα αααααΎααααααα·ααΈ Python αααα’αααΈαααΆααα’αααα·αααΆαααΆαααααααΎααααααα
ααΌαααΆα Python
αααααα·ααΈ Python ααΆααΏααααααΎ pandas αα·α matplotlib α ααΌα αααααααααΎααα½αααΊααααΌαααααΌαααΆαααααΌαααΆααααααΆαααΌαααααΆαααΎ Debian αααααααΎ Dockerfile αααα
FROM python:3.8-slim
RUN pip install --no-cache-dir matplotlib pandas
ααααααααΌαααΆα
$ 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
ααΎαααα½αααΆαααΌαααΆαααα α 363MB α
ααΎααΎαααΉαααααΎααΆαααα’ααΆαααΆαα½αα’αΆαααα·ααα? αααβααΆααααα:
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
ααΎααΆαα’αααΈααΎαα‘αΎα?
Alpine αα·αααΆαααααααααα
ααααα·αααΎα’ααααααα‘ααααΎα build αααααα’ααααΎ Debian α’αααααΉαααΎαααΆααΆααΆααα matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64αwhl.
αααααΊααΆαααααααααααααΈααααααΆαααααα Alpine ααΆαααααααα `matplotlib-3.1.2.tar αgzα
αΆααααΆααααΈααΆαα·αααΆαααααααααααΆα
α ααα»α’αααΈ? ααΆαα ααα αΆαααΈαα»α ααΆαα αααΎαααααΎαααα GNU (glibc) αααααααΆααααααααααΆα C αααααΆααα·ααααααΌααααααΆαααααααα·ααΈαααααααααααα»α C αα½αααΆαα Python αααααα ααα»αααα Alpine ααααΎ 'musl' α αΎαα αΆααααΆααααΈαααααααααααααΈαααΆαααααααααΌαααΆααα ααΆα‘αΎααααααΆαα 'glibc' αα½ααααα·ααααααΆαααααΎαααα
ααΌα ααααααααα·αααΎα’αααααααΎ Alpine α’αααααααΌαα αααααααΌαααΆααα’αααααααααααααα»α C αααα»ααααα αα Python ααΈαα½ααα
α’αΌ ααΆα α’αααααΉαααααΌαααααΎααααααΈααααΆαα’αΆαααααααααααααΆααα’αααααα
αΆαααΆα
αααααΌαα
αααααααααααα½αα―αα
αααα»αααααΈαααααΎαααα½αααΆα:
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
α αΎαβααΆαβααΆααααβααααΌαβα αααΆαβααα...
... 25 ααΆααΈ 57 αα·ααΆααΈ! α αΎαααα αααΌαααΆαααΊ 851MBα
ααΌαααΆααααααΆαααΌαααααΆαααΎααααα’αΆαααααααααΌαα
αααΆααααααΌαααΆααααα»αααΆαααΆαααα αα½αααΆααΆαααα αααααΆα α αΎαα’ααααα
ααααααΌαααααΎαααΆαα’αΆαααααααΆααα’ααα ααΆβααΆαβαα·αβααΆααβα’αααβα’αΆα
βααΆααβαααααβααα αβααα‘αΎαβαααβααααΎβ
ααααα·ααααααΆααα’αααα!
Alpine α’αΆα αααααΆαα±ααααΆαααα α»αααααα·αααΉαααααΆαααααααα»ααααααααΎαααΆα
- ααΆαααααΉααααΈ musl ααΊααααΌαααααΆααΆαα½α glibc ααα»αααααα αααα»αααΆαα’αα»αααα ααΆααα»αααααΆα’αΆα αααααΆαα±ααααΆααααα αΆααΆα αααΎαα α αΎαααααα·αααΎαα½αααααΆα αα½ααααααα ααααΆαα·ααααααΆαα α·αααα αααααΊααΆαααα αΆαα½αα ααα½ααααα’αΆα ααΎαα‘αΎαα
- α’αΆαααααααΆαααα αααΌα
ααΆαααααα»ααααααααα‘αΆαααΆαααααΆαααΎα αααα’αΆα
ααΆααα
ααα
ααα α»ααα αααα»α Python - α’αααααααΎααααΆαααα½αα
ααα½αααΆαααααΎααααα
αααααα·ααΈ Python ααΊααΊαααΆα αααααΆααααα·ααΈ musl αααα ααααΆαα αα αΆα (αα»αααΈ glibc) α - α’αααααααΎααααΆααααααΆαα
ααΆαααααΎαααα α»ααα αααααααΎαααααααααΆαααΆαααα·α αααα
ααααΆααβααΆααβααα α»αβααΆααβαααβααααΌαβααΆαβααβαα½α βα αΎα ααα»ααααβα’αααβααΆβααΉαβααΆβααΉαβααΆαβα ααα½αβααα»ααααΆαβαααα
αα»αααααΎααΌαααΆα Alpine αααααΆαα Python
ααααα·αααΎα’ααααα·αα
ααααααΆαααΆαα½αααΆαααααΆαααΆαα αα·αααα αααααααααΆαα’αΆααααα αα·αααα α»ααααα’αΆα
ααΎαααΆα ααΌααα»αααααΎ Alpine Linux ααΆααΌαααΆαααΌαααααΆαα
ααααα: www.habr.com