Я использую CircleCI и докер для CI / CD конвейера. По сути, я помещаю приложение (python) и среду в новый образ докера каждый раз, когда помещаю новый код в GitHub. Затем я помещаю образ в свой личный реестр Docker, размещенный на Nexus, и внедряю мое приложение, извлекая последний образ из этого реестра и запускаю контейнер.
Моя проблема в том, что эти изображения докера занимают тонны пространства:
REPOSITORY TAG IMAGE ID CREATED SIZE
my-app 0.1.23 6f13476770c2 3 minutes ago 1.99GB
my-app 0.1.22 7ff62dddb50a 10 minutes ago 1.99GB
my-app 0.1.21 55af2d3235c7 3 hours ago 1.99GB
my-app 0.1.20 304543b7fc71 5 hours ago 1.99GB
my-app 0.1.17 fddcef3f262b 2 weeks ago 1.99GB
my-app 0.1.16 a62c9ba1f997 2 weeks ago 1.99GB
my-app 0.1.12 a8d87d86699a 2 weeks ago 1.99GB
Поскольку работающая среда занимает много места в изображении и не меняется часто (не так часто, как при изменении кода), я предполагаю, что много места просто теряется, создавая одни и те же зависимости / среду снова и снова. Итак, вопрос в том, правильно ли я это делаю? Если нет, то какова лучшая практика. Заранее спасибо!
P.S. Среда, которую я использую, требует некоторых зависимостей (numpy, tenorflow и т. Д.), Которым требуется GCC, поэтому я не могу не использовать изображение Python Alpine, если я не ошибаюсь.
Мой Dockerfile:
FROM python:3.6-stretch
# Install app dependencies
RUN apt-get update && apt-get install -y \
python3-dev \
python3-pip
RUN mkdir /opt/working_dir/
WORKDIR /opt/working_dir/
# Copy the entire project into the current directory
COPY . ./
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
Некоторые истории докеров:
$ docker image history my-app:0.1.23
6f13476770c2 19 hours ago /bin/sh -c pip install -r requirements.txt 955MB
<missing> 19 hours ago /bin/sh -c pip install --upgrade pip 4.97MB
<missing> 19 hours ago /bin/sh -c #(nop) COPY dir:5bb6533618d16964c… 16.5MB
<missing> 19 hours ago /bin/sh -c #(nop) WORKDIR /opt/reco_engine/ 0B
<missing> 19 hours ago /bin/sh -c mkdir /opt/reco_engine/ 0B
<missing> 19 hours ago /bin/sh -c apt-get update && apt-get install… 90.6MB
<missing> 6 days ago /bin/sh -c #(nop) CMD ["python3"] 0B
<missing> 6 days ago /bin/sh -c set -ex; wget -O get-pip.py 'ht… 6.04MB
<missing> 6 days ago /bin/sh -c #(nop) ENV PYTHON_PIP_VERSION=19… 0B
<missing> 6 days ago /bin/sh -c cd /usr/local/bin && ln -s idle3… 32B
<missing> 6 days ago /bin/sh -c set -ex && wget -O python.tar.x… 65.3MB
<missing> 6 days ago /bin/sh -c #(nop) ENV PYTHON_VERSION=3.6.8 0B
<missing> 6 days ago /bin/sh -c #(nop) ENV GPG_KEY=0D96DF4D4110E… 0B
<missing> 6 days ago /bin/sh -c apt-get update && apt-get install… 16.9MB
<missing> 6 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B
<missing> 6 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/bin:/… 0B
<missing> 6 days ago /bin/sh -c set -ex; apt-get update; apt-ge… 562MB
<missing> 6 days ago /bin/sh -c apt-get update && apt-get install… 142MB
<missing> 6 days ago /bin/sh -c set -ex; if ! command -v gpg > /… 7.81MB
<missing> 6 days ago /bin/sh -c apt-get update && apt-get install… 23.2MB
<missing> 6 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 6 days ago /bin/sh -c #(nop) ADD file:843b8a2a9df1a0730… 101MB
$ docker image history my-app:0.1.22
IMAGE CREATED CREATED BY SIZE COMMENT
7ff62dddb50a 19 hours ago /bin/sh -c pip install -r requirements.txt 955MB
<missing> 19 hours ago /bin/sh -c pip install --upgrade pip 4.97MB
<missing> 19 hours ago /bin/sh -c #(nop) COPY dir:f054e43f5766a4738… 16.5MB
<missing> 19 hours ago /bin/sh -c #(nop) WORKDIR /opt/reco_engine/ 0B
<missing> 19 hours ago /bin/sh -c mkdir /opt/reco_engine/ 0B
<missing> 19 hours ago /bin/sh -c apt-get update && apt-get install… 90.6MB
<missing> 6 days ago /bin/sh -c #(nop) CMD ["python3"] 0B
<missing> 6 days ago /bin/sh -c set -ex; wget -O get-pip.py 'ht… 6.04MB
<missing> 6 days ago /bin/sh -c #(nop) ENV PYTHON_PIP_VERSION=19… 0B
<missing> 6 days ago /bin/sh -c cd /usr/local/bin && ln -s idle3… 32B
<missing> 6 days ago /bin/sh -c set -ex && wget -O python.tar.x… 65.3MB
<missing> 6 days ago /bin/sh -c #(nop) ENV PYTHON_VERSION=3.6.8 0B
<missing> 6 days ago /bin/sh -c #(nop) ENV GPG_KEY=0D96DF4D4110E… 0B
<missing> 6 days ago /bin/sh -c apt-get update && apt-get install… 16.9MB
<missing> 6 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B
<missing> 6 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/bin:/… 0B
<missing> 6 days ago /bin/sh -c set -ex; apt-get update; apt-ge… 562MB
<missing> 6 days ago /bin/sh -c apt-get update && apt-get install… 142MB
<missing> 6 days ago /bin/sh -c set -ex; if ! command -v gpg > /… 7.81MB
<missing> 6 days ago /bin/sh -c apt-get update && apt-get install… 23.2MB
<missing> 6 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 6 days ago /bin/sh -c #(nop) ADD file:843b8a2a9df1a0730… 101MB