Способ, которым 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.