Повышение скорости сборки Docker для приложения Angular

Многие ответы здесь говорят о том, что слияние превращает все ваши коммиты в одну, и поэтому предлагаю использовать rebase для сохранения ваших коммитов. Это неверно. И плохая идея, если вы уже сделали свои коммиты.

Слияние not уничтожает ваши коммиты. Слияние сохраняет историю! (просто посмотрите на gitk) Rebase перезаписывает историю, которая является Bad Thing после того, как вы нажали .

Использовать слияние - не переустанавливать всякий раз, когда вы уже нажали.

Вот Линус (автор git) берет на себя . Это действительно хорошо читать. Или вы можете прочитать мою собственную версию той же идеи ниже.

Снятие ветви на master:

  • дает неправильное представление о том, как были созданы коммиты
  • загрязняет мастер с кучей промежуточных коммитов, которые, возможно, не были хорошо протестированы
  • , могут фактически вводить разрывы на основе этих промежуточных коммитов из-за изменений, которые были сделаны для освоения, когда была создана оригинальная ветка темы и когда он был переустановлен.
  • затрудняет поиск хороших мест у мастера для проверки.
  • Заставляет метки времени на фиксации не совпадать с их хронологическим порядком в дереве. Таким образом, вы увидите, что commit A предшествует фиксации B в master, но commit B сначала был автором. (Что?!) [/ ​​G7]
  • Вызывает больше конфликтов, потому что отдельные фиксации в ветви темы могут включать конфликты слияния, которые должны быть индивидуально разрешены (далее лежат в истории о том, что произошло в каждой фиксации).
  • является переписью истории. Если ветка, подлежащая переустановке, была нажата куда-нибудь (поделилась с кем-либо, кроме вас самого), тогда вы повредили всех, кто имеет эту ветвь, с тех пор, как вы переписали историю.

Напротив, объединение ветви темы в master:

  • сохраняет историю того, где были созданы ветви тем, включая любые слияния от мастера к ветке темы, помогите сохранить его в актуальном состоянии. Вы действительно получаете точное представление о том, с каким кодом работал разработчик, когда они строились.
  • master - это ветвь, состоящая в основном из слияний, и каждая из этих коммитов слияния обычно является «хорошими моментами» в истории которые безопасны для проверки, потому что именно там было готово интегрироваться ветвь темы.
  • сохраняются все отдельные фиксации ветви темы, в том числе тот факт, что они были в ветке темы, поэтому выделение этих изменения являются естественными, и вы можете сверлить их там, где это необходимо.
  • конфликты слияния должны быть разрешены только один раз (в точке слияния), поэтому промежуточные изменения фиксации, сделанные в ветке темы, не должны быть разрешены независимо.
  • можно выполнять несколько раз плавно. Если вы периодически интегрируете ветвь темы в мастер, люди могут продолжать строить ветку темы, и она может продолжать быть объединенной независимо.

2
задан Saurabh Palatkar 2 March 2019 в 06:59
поделиться

3 ответа

Вы можете создать приложение вне докера и скопировать только папку dist в образ докера nginx .

После этого вам не нужно устанавливать node_modules evrey time.

Пример Dockerfile

FROM nginx:latest
ENV TZ=Europe/Moscow
COPY ./dist/my-app /usr/share/nginx/html
COPY ./nginx/nginx.conf /etc/nginx/nginx.conf

Пример nginx.conf

server {
  server_name my-app;
  root /var/www/frontend/src;

  try_files $uri $uri/ index.html;
}
0
ответ дан Kliment Ru 2 March 2019 в 06:59
поделиться

Хорошей практикой является использование многоэтапных сборок при построении изображений с помощью Docker.

Пример Dockerfile будет:

FROM node:10 as build
WORKDIR /home
COPY package.json package-lock.json .
RUN npm install
COPY . .
RUN npm build # or any other command to package

FROM nginx:alpine
COPY --from=build /home/dist/* /usr/share/nginx/html/

Вот и все:)

0
ответ дан Cedric 2 March 2019 в 06:59
поделиться

Вместо того, чтобы копировать всю папку node_modules в ваш контейнер, попробуйте скопировать только package.json и после этого запустить «npm install». Папка node_module не нужно копировать в контейнер, поскольку «npm install» устанавливает все необходимые модули в контейнере, она считывает все зависимости из package.json.

Это сократит время строительства :)

0
ответ дан kboul 2 March 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: