Изображение Docker для похудения для приложения Python - PullRequest
0 голосов
/ 25 марта 2019

Я разработал приложение на Python, которое должно работать в Docker-контейнере.Все прошло очень хорошо, и контейнер, и приложение работают отлично.Дело в том, что я просто попытался запустить Docker-контейнер в первый раз.С этого момента я хочу улучшить свой образ докера.Прямо сейчас я хочу уменьшить размер изображения, удалив ненужные зависимости.Мой Dockerfile выглядит следующим образом:

###############################################################
# Use the Ubuntu 16.04 as a base image
FROM ubuntu:16.04

###############################################################
# Update the dependencies in the image
RUN apt-get update && apt-get install locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8


###############################################################
# Install necessary overall dependencies
RUN apt-get update && apt-get install -y \
python3-dev \
python3-pip \
vim \
build-essential \
zlib1g-dev \ \
gfortran \
libblas-dev \
liblapack-dev \
libatlas-base-dev \
libzmq3-dev \
pkg-config \
libffi-dev \
libxml2 \
libxml2-dev \
zlib1g-dev \
libcairo-dev \
&& rm -rf /var/likb/apt/lists/*

###############################################################
# Install necessary Python dependencies
RUN pip3 install --upgrade pip
RUN pip3 install numpy==1.16.1
RUN pip3 install scipy
RUN pip3 install cython
RUN pip3 install pyzmq==17.0.0
RUN pip3 install utm
RUN pip3 install python-igraph==0.7.1post6
RUN pip3 install matplotlib==3.0.2
RUN pip3 install cycler==0.10.0
RUN pip3 install dill==0.2.8.2
RUN pip3 install kiwisolver==1.0.1
RUN pip3 install pyparsing==2.3.0
RUN pip3 install pyreadline==2.1
RUN pip3 install python-dateutil==2.7.5
RUN pip3 install scikit-learn==0.20.2
RUN pip3 install six==1.12.0
RUN pip3 install sklearn==0.0

Мой образ докера имеет размер 1 ГБ и предназначен только для приложения на Python.Я попытался уменьшить размер, не добавляя Ubuntu в качестве изображения, а просто работая с базовым образом Python.Каждый раз, когда я использую другой базовый образ, я получаю сообщения о том, что библиотеки или зависимости не найдены.Возможно, у вас есть несколько советов и подсказок, как уменьшить изображение питона.Спасибо!

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Способ, которым Docker создает изображение, - по слоям. Таким образом, каждая команда (будь то RUN или что-то еще) в вашем Dockerfile представляет новый уровень.

Хороший способ уменьшить размер изображения - свести к минимуму количество слоев в Dockerfile. В вашем случае для начала лучше всего включить следующую строку:

RUN apt-get update && apt-get install locales

в

RUN apt-get update && apt-get install -y \
    python3-dev \
    python3-pip \
    vim \
    build-essential \
    zlib1g-dev \ \
    gfortran \
    libblas-dev \
    liblapack-dev \
    libatlas-base-dev \
    libzmq3-dev \
    pkg-config \
    libffi-dev \
    libxml2 \
    libxml2-dev \
    zlib1g-dev \
    libcairo-dev \
    && rm -rf /var/likb/apt/lists/*

это гарантирует, что при удалении / var / likb / apt / lists / * в конце вашей команды RUN не будет слоев, уже содержащих эти списки перед ним.

Кроме того, поскольку вы ищете только выполнение сценария Python, возможно, стоит поискать меньший базовый образ, поскольку в Ubuntu: 16.04 есть множество функций, которые вы не используете. Например, вы можете использовать официальное изображение python: python: $ version.

0 голосов
/ 25 марта 2019

Чтобы улучшить ваш образ докера, уменьшить размер изображения, уменьшить количество слоев и установить / удалить в один слой.

###############################################################
# Use the Ubuntu 16.04 as a base image
FROM ubuntu:16.04

###############################################################
# Update the dependencies in the image
RUN apt-get update && apt-get install locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8


###############################################################
# Install necessary overall dependencies
RUN apt-get update && apt-get install -y \
python3-dev \
python3-pip \
vim \
build-essential \
zlib1g-dev \ \
gfortran \
libblas-dev \
liblapack-dev \
libatlas-base-dev \
libzmq3-dev \
pkg-config \
libffi-dev \
libxml2 \
libxml2-dev \
zlib1g-dev \
libcairo-dev \
\
\
&& pip3 install --upgrade pip \
&& pip3 install numpy==1.16.1 \
&& pip3 install scipy \
&& pip3 install cython \
&& pip3 install pyzmq==17.0.0 \
&& pip3 install utm \
&& pip3 install python-igraph==0.7.1post6 \
&& pip3 install matplotlib==3.0.2 \
&& pip3 install cycler==0.10.0 \
&& pip3 install dill==0.2.8.2 \
&& pip3 install kiwisolver==1.0.1 \
&& pip3 install pyparsing==2.3.0 \
&& pip3 install pyreadline==2.1 \
&& pip3 install python-dateutil==2.7.5 \
&& pip3 install scikit-learn==0.20.2 \
&& pip3 install six==1.12.0 \
&& pip3 install sklearn==0.0 \
\
\
&& apt-get remove -y \
python3-dev \
python3-pip \
vim \
build-essential \
zlib1g-dev \ \
gfortran \
libblas-dev \
liblapack-dev \
libatlas-base-dev \
libzmq3-dev \
pkg-config \
libffi-dev \
libxml2 \
libxml2-dev \
zlib1g-dev \
libcairo-dev \
&& rm -rf /var/likb/apt/lists/* \

другой подход заключается в использовании подхода многостадийного сборщика Docker и установке пакета Python в другой каталог.,

###############################################################
# Use the Ubuntu 16.04 as a base image
FROM ubuntu:16.04 as sourceImage

###############################################################
# Update the dependencies in the image
RUN apt-get update && apt-get install locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8


###############################################################
# Install necessary overall dependencies
RUN apt-get update && apt-get install -y \
python3-dev \
python3-pip \
vim \
build-essential \
zlib1g-dev \ \
gfortran \
libblas-dev \
liblapack-dev \
libatlas-base-dev \
libzmq3-dev \
pkg-config \
libffi-dev \
libxml2 \
libxml2-dev \
zlib1g-dev \
libcairo-dev \
&& rm -rf /var/likb/apt/lists/*

###############################################################
# Install necessary Python dependencies
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   --upgrade pip
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   numpy==1.16.1 
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   scipy
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   cython
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   pyzmq==17.0.0
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   utm
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   python-igraph==0.7.1post6
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   matplotlib==3.0.2
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   cycler==0.10.0
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   dill==0.2.8.2
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   kiwisolver==1.0.1
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   pyparsing==2.3.0
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   pyreadline==2.1
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   python-dateutil==2.7.5
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   scikit-learn==0.20.2
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   six==1.12.0
RUN pip3 install --install-option="--prefix=/opt/pip-packages"   sklearn==0.0



FROM ubuntu:16.04 
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8

ENV PYTHONPATH=$PYTHONPATH:/opt/python-packages

COPY --from=sourceImage /opt/pip-packages/ /opt/python-packages

#### install system required packages, if needed
RUN apt-get update && apt-get install -y \
vim \
gfortran \
pkg-config \
libxml2 \
&& rm -rf /var/likb/apt/lists/*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...