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
Мо ҷамъ мекунем, ба вақт ва андозаи васлкунӣ нигаред:
$ 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
Аммо агар мо ба сохтани барномаи 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
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 чархҳоро дастгирӣ намекунад
Агар шумо ба сохтмон, ки ба Debian асос ёфтааст, назар кунед, шумо хоҳед дид, ки он matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64-ро зеркашӣ мекунад.whl.
Чаро? Аксари дистрибюторҳои Linux версияи GNU (glibc)-и китобхонаи стандартии C-ро истифода мебаранд, ки дар асл онро ҳар як барномаи дар C навишташуда, аз ҷумла Python талаб мекунад. Аммо Alpine 'musl'-ро истифода мебарад ва азбаски он дуӣ барои "glibc" тарҳрезӣ шудаанд, онҳо танҳо интихоб нестанд.
Аз ин рӯ, агар шумо Alpine-ро истифода баред, шумо бояд ҳамаи кодҳои дар C навишташударо дар ҳар як бастаи Python тартиб диҳед.