Как ускорить КОПИРОВАНИЕ с одного изображения на другое в Dockerfile - PullRequest
0 голосов
/ 31 октября 2018

Я создаю образ своего приложения, который включает в себя упаковку различных приложений.

После установки test / npm / bower и т. Д. Я пытаюсь скопировать содержимое предыдущего изображения в новое изображение. Но эта копия кажется очень очень медленной и занимает больше 3-4 минут.

COPY --from=0 /data /data

(размер папки / data составляет около 800 МБ и тысячи файлов)

Может кто-нибудь предложить лучшую альтернативу или идею оптимизировать это:

Вот мой докер-файл:

FROM node:10-alpine
RUN apk add python git \
  && npm install -g bower

ENV CLIENT_DIR /data/current/client
ENV SERVER_DIR /data/current/server
ENV EXTRA_DIR /data/current/extra

ADD src/client $CLIENT_DIR
ADD src/server $SERVER_DIR

WORKDIR $SERVER_DIR
RUN npm install
RUN npm install --only=dev
RUN npm run build

WORKDIR $CLIENT_DIR
RUN bower --allow-root install

FROM node:10-alpine 
COPY --from=0 /data /data # This step is very very slow.
EXPOSE 80
WORKDIR /data/current/server/src
CMD ["npm","run","start:staging"]

Или, если кто-нибудь может помочь мне очистить первую фазу (чтобы уменьшить размер изображения), чтобы не требовалось использование следующего изображения, которое также будет полезно.

1 Ответ

0 голосов
/ 31 октября 2018

Это занимает время, потому что количество файлов велико. Если вы можете сжать папку данных как tar, а затем скопировать и извлечь будет полезно в вашей ситуации.

В противном случае Если вы можете сделать этот шаг для запуска контейнеров, это будет очень быстро. Согласно вашему требованию вам необходимо скопировать изображение вашего приложения, которое уже создано в другом изображении. Вы можете использовать функцию совместного использования томов, которая будет делить том между 2 или более контейнерами док-станции.

Создать 1-й контейнер:

docker run -ti --name=Container -v datavolume:/datavolume ubuntu

2-й контейнер:

docker run -ti --name=Container2 --volumes-from Container ubuntu

Или вы можете использовать опцию -v, поэтому с опцией v создайте свой контейнер 1st и 2nd как:

docker run -v docker-volume:/data-volume --name centos-latest -it centos

docker run -v docker-volume:/data-volume --name centos-latest1 -it centos

Это создаст и предоставит доступ к одной и той же папке тома с объемом данных в обоих контейнерах. docker-volume - это имя тома, а data-volume - это имя папки в этом контейнере, которое будет указывать на docker-volume volume Таким же образом вы можете разделить том более чем с 2 контейнерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...