как сократить время на выполнение сервиса Docker - PullRequest
0 голосов
/ 22 мая 2018
  • Я развернул службу узла на Docker.
    • Докеру требуется более 10 минут, чтобы построить сервис и запустить его на компьютере с Ubuntu

Ниже мой Dockerfile

FROM node

ARG ENVIRONMENT
ARG PORT

ENV PORT $PORT
ENV ENVIRONMENT $ENVIRONMENT

RUN apt-get update -qq
RUN apt-get install --yes curl
RUN apt-get update && apt-get install -my wget gnupg
RUN curl --silent --location https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get install --yes nodejs
RUN apt-get install --yes build-essential vim

RUN mkdir /auth_service
ADD . /auth_service
WORKDIR /auth_service

RUN npm install -g express
RUN npm install -g path
RUN npm cache verify
RUN npm install

EXPOSE $PORT

ENTRYPOINT [ "node",  "server.js" ]
CMD [ $PORT, $ENVIRONMENT ]

И я запускаю службу, используя код

#!/bin/bash
ORGANISATION="$1"
SERVICE_NAME="$2"
VERSION="$3"
ENVIRONMENT="$4"
INTERNAL_PORT_NUMBER="$5"
EXTERNAL_PORT_NUMBER="$6"
NETWORK="$7"
sudo docker build -t ${ORGANISATION}/${SERVICE_NAME}:${VERSION} --build-arg PORT=${INTERNAL_PORT_NUMBER} --build-arg ENVIRONMENT=${ENVIRONMENT} --no-cache .
sudo docker stop ${SERVICE_NAME}
sudo docker rm ${SERVICE_NAME}

docker run -p ${EXTERNAL_PORT_NUMBER}:${INTERNAL_PORT_NUMBER} --network ${NETWORK} --name ${SERVICE_NAME} --restart always -m 1024M --memory-swap -1 -itd ${ORGANISATION}/${SERVICE_NAME}:${VERSION}

Кроме того, я получаю ошибку ниже в процессе сборки и развертывания.

debconf: delaying package configuration, since apt-utils is not installed

Пожалуйста, предложите изменения, чтобы улучшить время исполнения

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Здесь есть несколько вопросов, но их можно обобщить в одном ответе:

  1. Не собирайте каждый раз.Построить один раз, запустить несколько раз.
  2. Вы передаете аргументы сборки (PORT, ENVIRONMENT), которые должны быть аргументами времени выполнения.Передайте их как переменные среды в вашей команде запуска docker и программно закодируйте их в entryPoint (в противном случае вам придется создавать каждый раз, и вы никогда не сможете повторно использовать образ для другого ПОРТА / ОКРУЖАЮЩЕЙ СРЕДЫ)
  3. Не использовать опцию no-cache в сборке
  4. Не иметь операторов RUN, выполняющих одну команду ОС, объединить их, например, RUN apt-get update -qq && apt-get install --yes curl и т. Д.
  5. Переупорядочитькоманды, так что те, которые с наименьшей вероятностью изменятся, сначала появятся в файле Docker, это означает, что существующие слои с большей вероятностью будут использоваться повторно при перестроении
0 голосов
/ 22 мая 2018

Есть некоторые улучшения, о которых я могу подумать.

Удалить --no-cache

Как и предлагалось в других комментариях, это значительно сократит ваше время сборки.Другие предложения, приведенные ниже, также требуют, чтобы вы сначала удалили --no-cache.

Переупорядочите свои команды

Переупорядочите некоторые команды до ADD / COPY

RUN npm install -g express
RUN npm install -g path
RUN npm cache verify

С ADD/ COPY проверяет изменения вашего файла, вы, вероятно, будете устанавливать express и path каждый раз, когда создаете образ без использования кеша.

COPY package.json first

Вы можетерассмотрим COPY package.json в одиночку и RUN npm install в первую очередь.Затем COPY другие файлы в контексте.Это обеспечит ваши зависимости и кеширует их, поэтому в следующий раз, если в вашем списке зависимостей не будет изменений, вам не придется тратить время на их установку.

...