Alpine Linux เชจเซ เชกเซเชเชฐ เชฎเชพเชเซ เชฌเซเช เชเชฎเซเช เชคเชฐเซเชเซ เชตเชพเชฐเชเชตเชพเชฐ เชญเชฒเชพเชฎเชฃ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชคเชฎเชจเซ เชเชนเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชเซ เชเชฒเซเชชเชพเชเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชคเชฎเชพเชฐเชพ เชฌเชฟเชฒเซเชก เชจเชพเชจเชพ เช
เชจเซ เชคเชฎเชพเชฐเซ เชฌเชฟเชฒเซเชก เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชกเชชเซ เชฌเชจเชถเซ.
เชชเชฐเชเชคเซ เชเซ เชคเชฎเซ เชชเชพเชฏเชฅเซเชจ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฎเชพเชเซ เชเชฒเซเชชเชพเชเชจ เชฒเชฟเชจเชเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เชคเซ เชคเซ:
- เชคเชฎเชพเชฐเชพ เชฌเชฟเชฒเซเชกเซเชธเชจเซ เชเซเชฌ เชงเซเชฎเซเช เชฌเชจเชพเชตเซ เชเซ
- เชคเชฎเชพเชฐเซ เชเชฌเซเชเชจเซ เชฎเซเชเซ เชฌเชจเชพเชตเซ เชเซ
- เชคเชฎเชพเชฐเซ เชธเชฎเชฏ เชฌเชเชพเชกเชตเซ
- เช เชจเซ เช เชเชคเซ เชคเซ เชฐเชจเชเชพเชเชฎเชฎเชพเช เชญเซเชฒเซเชจเซเช เชเชพเชฐเชฃ เชฌเชจเซ เชถเชเซ เชเซ
เชเชพเชฒเซ เชเซเชเช เชเซ เชถเชพ เชฎเชพเชเซ เชเชฒเซเชชเชพเชเชจเชจเซ เชญเชฒเชพเชฎเชฃ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชชเชฐเชเชคเซ เชคเชฎเชพเชฐเซ เชนเชเซ เชชเชฃ เชชเชพเชฏเชฅเซเชจ เชธเชพเชฅเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเซเชฎ เชจ เชเชฐเชตเซ เชเซเชเช.
เชถเชพ เชฎเชพเชเซ เชฒเซเชเซ เชเชฒเซเชชเชพเชเชจเชจเซ เชญเชฒเชพเชฎเชฃ เชเชฐเซ เชเซ?
เชเชพเชฒเซ เชงเชพเชฐเซเช เชเซ เช เชฎเชจเซ เช เชฎเชพเชฐเซ เชเชฌเซเชจเชพ เชญเชพเช เชฐเซเชชเซ gcc เชจเซ เชเชฐเซเชฐ เชเซ เช เชจเซ เช เชฎเซ เชฌเชฟเชฒเซเชก เชธเซเชชเซเชก เช เชจเซ เช เชเชคเชฟเชฎ เชเชฌเซ เชเชฆเชจเชพ เชธเชเชฆเชฐเซเชญเชฎเชพเช เช เชฒเซเชชเชพเชเชจ เชฒเชฟเชจเชเซเชธ เชตเชฟ เชเชฌเซเชจเซเชเซ 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 เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเช เช เชจเซ เชเชฌเซเชจเซเชเซ เชธเชพเชฅเซ เชชเซเชฐเชพเชฐเชเชญ เชเชฐเซเช:
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/*
เชธเชเชชเซเชฐเซเชฃ เชกเซเชเชฐเชซเชพเชเชฒ เชฒเชเชตเซเช เช เช เชฒเซเชเชจเชพ เช เชตเชเชพเชถเชจเซ เชฌเชนเชพเชฐ เชเซ.
เชเชพเชฒเซ เชเชธเซเชฎเซเชฌเชฒเซ เชเชคเชฟเชจเซ เชฎเชพเชชเซเช:
$ 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
เช เชฎเซ เชเชฒเซเชชเชพเชเชจ (เชกเซเชเชฐเชซเชพเชเชฒ) เชฎเชพเชเซ เชคเซ เช เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เชเชฐเซเช เชเซเช:
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 เชเซ. เชคเซ เชเซเชฌ เชธเชพเชฐเซเช เชเซ!
เชชเชฐเชเชคเซ เชเซ เชเชชเชฃเซ เชชเชพเชฏเชฅเซเชจ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเชตเชพ เชชเชฐ เชธเซเชตเชฟเช เชเชฐเซเช, เชคเซ เชฌเชงเซเช เชเชเชฒเซเช เชฐเซเชเซ เชจเชฅเซ.
เชชเชพเชฏเชฅเซเชจ เชเชฌเซ
เชชเชพเชฏเชฅเซเชจ เชเชชเซเชฒเซเชเซเชถเชจ เชเชฃเซเชตเชพเชฐ เชชเชพเชเชกเชพ เช เชจเซ เชฎเซเชเชชเซเชฒเซเชเชฒเชฟเชฌเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ. เชคเซเชฅเซ, เช เชกเซเชเชฐเชซเชพเชเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเชคเซเชคเชพเชตเชพเชฐ เชกเซเชฌเชฟเชฏเชจ-เชเชงเชพเชฐเชฟเชค เชเชฌเซ เชฒเซเชตเชพเชจเซ เชเช เชตเชฟเชเชฒเซเชช เชเซ:
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
เชถเซเช เชเชพเชฒเซ เชฐเชนเซเชฏเซเช เชเซ?
เชเชฒเซเชชเชพเชเชจ เชตเซเชนเซเชฒเซเชธเชจเซ เชธเชชเซเชฐเซเช เชเชฐเชคเซเช เชจเชฅเซ
เชเซ เชคเชฎเซ เชฌเชฟเชฒเซเชก เชเซเช เชเซ, เชเซ เชกเซเชฌเชฟเชฏเชจ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเซ, เชคเซ เชคเชฎเซ เชเซเชถเซ เชเซ เชคเซ matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64 เชกเชพเชเชจเชฒเซเชก เชเชฐเซ เชเซ.whl.
เช เชเชเซเชฐ เชฎเชพเชเซ เชฆเซเชตเชฟเชธเชเชเซ เชเซ. เชเชฒเซเชชเชพเชเชจ เชธเซเชคเซเชฐเซเชค `matplotlib-3.1.2.tar เชกเชพเชเชจเชฒเซเชก เชเชฐเซ เชเซ.gz` เชเชพเชฐเชฃ เชเซ เชคเซ เชงเซเชฐเชฃเชจเซ เชธเชฎเชฐเซเชฅเชจ เชเชชเชคเซเช เชจเชฅเซ
เชถเชพ เชฎเชพเชเซ? เชฎเซเชเชพเชญเชพเชเชจเชพ Linux เชตเชฟเชคเชฐเชฃเซ C เชธเซเชเชพเชจเซเชกเชฐเซเชก เชฒเชพเชเชฌเซเชฐเซเชฐเซเชจเชพ GNU เชธเชเชธเซเชเชฐเชฃ (glibc) เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เชเซ เชนเชเซเชเชคเชฎเชพเช Python เชธเชนเชฟเชค C เชฎเชพเช เชฒเชเซเชฒเชพ เชฆเชฐเซเช เชชเซเชฐเซเชเซเชฐเชพเชฎ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชเซ. เชชเชฐเชเชคเซ เชเชฒเซเชชเชพเชเชจ `musl` เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เช เชจเซ เชคเซ เชฆเซเชตเชฟเชธเชเชเซ `glibc` เชฎเชพเชเซ เชกเชฟเชเชพเชเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชนเซเชตเชพเชฅเซ, เชคเซ เชเช เชตเชฟเชเชฒเซเชช เชจเชฅเซ.
เชคเซเชฅเซ, เชเซ เชคเชฎเซ เชเชฒเซเชชเชพเชเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เชคเซ เชคเชฎเชพเชฐเซ เชฆเชฐเซเช Python เชชเซเชเซเชเชฎเชพเช C เชฎเชพเช เชฒเชเซเชฒเชพ เชคเชฎเชพเชฎ เชเซเชกเชจเซ เชเชฎเซเชชเชพเชเชฒ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เชเชน, เชนเชพ, เชคเชฎเชพเชฐเซ เชเชตเซ เชฌเชงเซ เชจเชฟเชฐเซเชญเชฐเชคเชพเชเชจเซ เชฏเชพเชฆเซ เชถเซเชงเชตเซ เชชเชกเชถเซ เชเซเชจเซ เชเชพเชคเซ เช เชธเชเชเชฒเชฟเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เช เชเชฟเชธเซเชธเชพเชฎเชพเช เช
เชฎเชจเซ เช เชฎเชณเซ เชเซ:
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 เชเซ.
เชเชฒเซเชชเชพเชเชจ-เชเชงเชพเชฐเชฟเชค เชเชฌเซเช เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชฃเซ เชธเชฎเชฏ เชฒเชพเชเซ เชเซ, เชคเซ เชเชฆเชฎเชพเช เชฎเซเชเซ เชเซ เช
เชจเซ เชคเชฎเชพเชฐเซ เชนเชเซ เชชเชฃ เชคเชฎเชพเชฎ เช
เชตเชฒเชเชฌเชจ เชถเซเชงเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชคเชฎเซ เช
เชฒเชฌเชคเซเชค เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชธเซเชฎเซเชฌเชฒเซ เชเชฆ เชเชเชพเชกเซ เชถเชเซ เชเซ
เชเชเชฒเซเช เช เชจเชนเซเช!
เชเชฒเซเชชเชพเชเชจ เชฐเชจเชเชพเชเชฎเชฎเชพเช เช เชฃเชงเชพเชฐเซ เชญเซเชฒเซเชจเซเช เชเชพเชฐเชฃ เชฌเชจเซ เชถเชเซ เชเซ
- เชธเชฟเชฆเซเชงเชพเชเชคเชฎเชพเช, เชฎเซเชธเชฒ glibc เชธเชพเชฅเซ เชธเซเชธเชเชเชค เชเซ, เชชเชฐเชเชคเซ เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช เชคเชซเชพเชตเชคเซ เชเชฃเซ เชธเชฎเชธเซเชฏเชพเชเชจเซเช เชเชพเชฐเชฃ เชฌเชจเซ เชถเชเซ เชเซ. เช เชจเซ เชเซ เชคเซเช เชนเซเชฏ, เชคเซ เชคเซเช เชเชฆเชพเช เช เชชเซเชฐเชฟเชฏ เชนเชถเซ. เช เชนเซเช เชเซเชเชฒเซเช เชธเชฎเชธเซเชฏเชพเช เชเชตเซ เชถเชเซ เชเซ:
- เชเชฒเซเชชเชพเชเชจเชฎเชพเช เชฎเซเชณเชญเซเชค เชฐเซเชคเซ เชจเชพเชจเชพ เชฅเซเชฐเซเชก เชธเซเชเซเชเชจเซเช เชเชฆ เชนเซเชฏ เชเซ, เชเซ เชชเชฐเชฟเชฃเชฎเซ เชถเชเซ เชเซ
Python เชฎเชพเช เชญเซเชฒเซ - เชเซเชเชฒเชพเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเช เชคเซ เชถเซเชงเซ เชเชพเชขเซเชฏเซเช เชเซ
เชชเชพเชฏเชฅเซเชจ เชเชชเซเชฒเชฟเชเซเชถเชจ เชงเซเชฎเซ เชเซ เชเชพเชฐเชฃ เชเซ เชเซ เชฐเซเชคเซ musl เชฎเซเชฎเชฐเซ เชซเชพเชณเชตเซ เชเซ (glibc เชฅเซ เช เชฒเช). - เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชฎเชพเชเชฅเซ เชเช
เชคเชพเชฐเซเช เชซเซเชฐเซเชฎเซเช เชเชฐเชคเซ เชตเชเชคเซ เชญเซเชฒ เชฎเชณเซ
เชเซเชเซเชเชธ เช เชญเซเชฒเซ เชชเชนเซเชฒเชพเชฅเซ เช เชธเซเชงเชพเชฐเซ เชฆเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชชเชฐเชเชคเซ เชเซเชฃ เชเชพเชฃเซ เชเซเชเชฒเซ เชตเชงเซ เชนเชถเซ.
เชชเชพเชฏเชฅเซเชจ เชฎเชพเชเซ เชเชฒเซเชชเชพเชเชจ เชเชฎเซเชเซเชจเซ เชเชชเชฏเซเช เชเชฐเชถเซ เชจเชนเซเช
เชเซ เชคเชฎเซ เชฎเซเชเชพ เช
เชจเซ เชฒเชพเชเชฌเชพ เชฌเชฟเชฒเซเชกเซเชธ, เชจเชฟเชฐเซเชญเชฐเชคเชพ เช
เชจเซ เชธเชเชญเชตเชฟเชค เชญเซเชฒเซเชจเซ เชถเซเชงเชฎเชพเช เชชเชฐเซเชถเชพเชจ เชจ เชฅเชตเชพ เชฎเชพเชเชเชคเชพ เชนเซ, เชคเซ เชเชฒเซเชชเชพเชเชจ เชฒเชฟเชจเชเซเชธเชจเซ เชฌเซเช เชเชฎเซเช เชคเชฐเซเชเซ เชเชชเชฏเซเช เชเชฐเชถเซ เชจเชนเซเช.
เชธเซเชฐเซเชธ: www.habr.com