Няколко ΡΡŠΠ²Π΅Ρ‚Π° ΠΊΠ°ΠΊ Π΄Π° ускоритС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ. НапримСр, Π΄ΠΎ 30 сСкунди

ΠŸΡ€Π΅Π΄ΠΈ функцията Π΄Π° стигнС Π΄ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° срСда, Π² Π½Π°ΡˆΠ΅Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° слоТни оркСстратори ΠΈ CI/CD, тя трябва Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ дълъг ΠΏΡŠΡ‚ ΠΎΡ‚ ΠΊΠΎΠΌΠΈΡ‚Π° Π΄ΠΎ тСстовСтС ΠΈ доставката. По-Ρ€Π°Π½ΠΎ моТСшС просто Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΡˆ Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΠΎ FTP (Π²Π΅Ρ‡Π΅ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ ΠΏΡ€Π°Π²ΠΈ Ρ‚Π°ΠΊΠ°, Π½Π°Π»ΠΈ?), ΠΈ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° β€žΠ΄Π΅ΠΏΠ»ΠΎΠΉβ€œ ΠΎΡ‚Π½Π΅ΠΌΠ°ΡˆΠ΅ сСкунди. Π‘Π΅Π³Π° ΠΎΠ±Π°Ρ‡Π΅ трябва Π΄Π° създадСш merge request ΠΈ Π΄Π° Ρ‡Π°ΠΊΠ°Ρˆ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ функцията стигнС Π΄ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅.

Част ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ Π΅ сборката Π½Π° Docker-ΠΎΠ±Ρ€Π°Π·Π°. Понякога сборката ΠΎΡ‚Π½Π΅ΠΌΠ° ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, понякога β€” дСсСтки ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Ρ€Π΅Ρ‡Π΅ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ. Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ просто ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°ΠΌΠ΅ Π² ΠΎΠ±Ρ€Π°Π·, Ρ‰Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ няколко ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π° ускоряванС Π½Π° сборката ΠΈ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½ΡŽΠ°Π½ΡΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Ρ‚Π΅Π·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ.

Няколко ΡΡŠΠ²Π΅Ρ‚Π° ΠΊΠ°ΠΊ Π΄Π° ускоритС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ. НапримСр, Π΄ΠΎ 30 сСкунди

ИмамС Π΄ΠΎΠ±ΡŠΡ€ ΠΎΠΏΠΈΡ‚ Π² ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅Ρ‚ΠΎ Π½Π° сайтовС Π½Π° ΠΌΠ΅Π΄ΠΈΠΈ: ВАББ, The Bell, "Нова Π³Π°Π·Π΅Ρ‚Π°", Republic… НСотдавна ΠΏΠΎΠΏΡŠΠ»Π½ΠΈΡ…ΠΌΠ΅ ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎΡ‚ΠΎ си, ΠΊΠ°Ρ‚ΠΎ пуснахмС Π² продукция сайта Reminder. И Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π±ΡŠΡ€Π·ΠΎ Π΄ΠΎΠ²ΡŠΡ€ΡˆΠ²Π°Ρ…ΠΌΠ΅ Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ поправяхмС старитС бъговС, бавният Π΄Π΅ΠΏΠ»ΠΎΠΉ сС ΠΎΠΊΠ°Π·Π° голям ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

ДСплоят ΠΏΡ€Π°Π²ΠΈΠΌ Π½Π° GitLab. Π‘ΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅, ΠΏΡƒΡˆΠ²Π°ΠΌΠ΅ Π² GitLab Registry ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°ΠΌΠ΅ Π½Π° продукция. Π’ Ρ‚ΠΎΠ·ΠΈ списък Π½Π°ΠΉ-Π΄ΡŠΠ»Π³ΠΎΡ‚ΠΎ Π΅ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅. НапримСр: Π±Π΅Π· оптимизация всяко ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄ ΠΎΡ‚Π½Π΅ΠΌΠ°ΡˆΠ΅ 14 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ.

Няколко ΡΡŠΠ²Π΅Ρ‚Π° ΠΊΠ°ΠΊ Π΄Π° ускоритС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ. НапримСр, Π΄ΠΎ 30 сСкунди

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка стана ясно, Ρ‡Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Ρ‚Π°ΠΊΠ°, ΠΈ сС Π·Π°Π΅Ρ…ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π·Π°Ρ‰ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ сС ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° дълго. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ успяхмС Π΄Π° ΡΡŠΠΊΡ€Π°Ρ‚ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° сборка Π΄ΠΎ 30 сСкунди!

Няколко ΡΡŠΠ²Π΅Ρ‚Π° ΠΊΠ°ΠΊ Π΄Π° ускоритС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ. НапримСр, Π΄ΠΎ 30 сСкунди

Π—Π° Ρ‚Π°Π·ΠΈ статия, Π·Π° Π΄Π° Π½Π΅ сС ΠΎΠ±Π²ΡŠΡ€Π·Π²Π°ΠΌΠ΅ с ΠΎΠΊΠΎΠ»Π½Π°Ρ‚Π° срСда Π½Π° Reminder-Π°, Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° сборка Π½Π° ΠΏΡ€Π°Π·Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Angular. И Ρ‚Π°ΠΊΠ°, създавамС Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:

ng n app

ДобавямС PWA (Π²Π΅Ρ‡Π΅ смС прогрСсивни):

ng add @angular/pwa --project app

Π”ΠΎΠΊΠ°Ρ‚ΠΎ сС изтСглят ΠΌΠΈΠ»ΠΈΠΎΠ½ npm ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π½Π΅ΠΊΠ° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΅ устроСн docker-ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚. Docker прСдоставя Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° опаковаш прилоТСния ΠΈ Π΄Π° Π³ΠΈ ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Ρˆ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π° срСда, Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° изолацията моТСш Π΄Π° ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Ρˆ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ ΡΡŠΡ€Π²ΡŠΡ€. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ са Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-Π»Π΅ΠΊΠΈ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ машини, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π° ядрото Π½Π° систСмата. Π—Π° Π΄Π° стартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡŠΡ€Π²ΠΎ трябва Π΄Π° създадСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°ΠΌΠ΅ всичко, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ ΡΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° си ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚ Π΅ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΡŠΠΊ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма. НапримСр, Π½Π΅ΠΊΠ° Π²Π·Π΅ΠΌΠ΅ΠΌ Dockerfile:

FROM node:12.16.2
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build --prod

Dockerfile Π΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ инструкции; изпълнявайки всяка ΠΎΡ‚ тях, Docker Ρ‰Π΅ записва ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ във Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма ΠΈ Ρ‰Π΅ Π³ΠΈ Π½Π°Π»Π°Π³Π° Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅. Всяка ΠΊΠΎΠΌΠ°Π½Π΄Π° създава свой слой. Готовият ΠΎΠ±Ρ€Π°Π· Π΅ комбинация ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ слоСвС.

Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅: всСки слой ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠ΅ΡˆΠΈΡ€Π°Π½. Ако Π½ΠΈΡ‰ΠΎ Π½Π΅ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ ΠΎΡ‚ послСдната компилация, Docker Ρ‰Π΅ Π²Π·Π΅ΠΌΠ΅ готовия слой вмСсто Π΄Π° изпълнява ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°. Въй ΠΊΠ°Ρ‚ΠΎ основното ускорСниС Π½Π° компилацията Ρ‰Π΅ бъдС Π·Π° смСтка Π½Π° кСша, Π² измСрванията Π½Π° скоростта Π½Π° компилация Ρ‰Π΅ сС фокусирамС ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΡŠΡ€Ρ…Ρƒ компилацията Π½Π° ΠΎΠ±Ρ€Π°Π·Π° с готовия кСш. Π’Π°ΠΊΠ° Ρ‡Π΅, ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠΈ:

  1. ΠŸΡ€Π΅ΠΌΠ°Ρ…Π²Π°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π·Π° Π΄Π° Π½Π΅ влияят ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ стартирания Π½Π° тСста.
    docker rmi $(docker images -q)
  2. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Π±ΠΈΠ»Π΄ Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚.
    time docker build -t app .
  3. ΠŸΡ€ΠΎΠΌΠ΅Π½ΡΠΌΠ΅ Ρ„Π°ΠΉΠ»Π° src/index.html β€” ΠΈΠΌΠΈΡ‚ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° програмист.
  4. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Π±ΠΈΠ»Π΄ Π·Π° Π²Ρ‚ΠΎΡ€ΠΈ ΠΏΡŠΡ‚.
    time docker build -t app .

Ако срСдата Π·Π° създаванС Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ Π΅ настроСна ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ (Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ), Docker Π²Π΅Ρ‡Π΅ Ρ‰Π΅ ΠΈΠΌΠ° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ кСшовС ΠΏΡ€ΠΈ стартиранС Π½Π° компилацията. ΠΠ°ΡˆΠ°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π΅ Π΄Π° Π½Π°ΡƒΡ‡ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ кСша Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ компилацията Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ максимално Π±ΡŠΡ€Π·ΠΎ. Въй ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅, Ρ‡Π΅ стартиранСто Π½Π° компилацията Π±Π΅Π· кСш сС случва само вСднъТ β€” Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ»ΠΊΠΎ Π±Π°Π²Π½ΠΎ Π΅ Π±ΠΈΠ»ΠΎ Ρ‚ΠΎΠ²Π° ΠΏΡŠΡ€Π²ΠΎ стартиранС. Π’ тСстовСтС Π½ΠΈ Π²Π°ΠΆΠ΅Π½ Π΅ вторият старт Π½Π° компилацията, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ΅ΡˆΠΎΠ²Π΅Ρ‚Π΅ Π²Π΅Ρ‡Π΅ са Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΈ смС Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈΠΌ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, някои ΡΡŠΠ²Π΅Ρ‚ΠΈ Ρ‰Π΅ повлияят ΠΈ Π½Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° компилация.

Π‘Π»Π°Π³Π°ΠΌΠ΅ Dockerfile, описан ΠΏΠΎ-Π³ΠΎΡ€Π΅, Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ стартирамС компилацията. Всички ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈ листинги са ΡΡŠΠΊΡ€Π°Ρ‚Π΅Π½ΠΈ Π·Π° удобство ΠΏΡ€ΠΈ Ρ‡Π΅Ρ‚Π΅Π½Π΅.

$ time docker build -t app .
Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° контСкста Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π΄ΠΎ Docker Π΄Π΅ΠΌΠΎΠ½ 409MB
Π‘Ρ‚ΡŠΠΏΠΊΠ° 1/5 : FROM node:12.16.2
Бтатус: Π˜Π·Ρ‚Π΅Π³Π»Π΅Π½ ΠΏΠΎ-Π½ΠΎΠ² ΠΎΠ±Ρ€Π°Π· Π·Π° node:12.16.2
Π‘Ρ‚ΡŠΠΏΠΊΠ° 2/5 : WORKDIR /app
Π‘Ρ‚ΡŠΠΏΠΊΠ° 3/5 : COPY . .
Π‘Ρ‚ΡŠΠΏΠΊΠ° 4/5 : RUN npm ci
Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ 1357 ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π·Π° 22.47s
Π‘Ρ‚ΡŠΠΏΠΊΠ° 5/5 : RUN npm run build --prod
Π”Π°Ρ‚Π°: 2020-04-16T19:20:09.664Z - Π₯Сш: fffa0fddaa3425c55dd3 - Π’Ρ€Π΅ΠΌΠ΅: 37581ms
УспСшно ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° c8c279335f46
УспСшно Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½ΠΎ app:latest

Ρ€Π΅Π°Π»Π½ΠΎ 5m4.541s
ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» 0m0.000s
систСмСн 0m0.000s

ΠŸΡ€ΠΎΠΌΠ΅Π½ΡΠΌΠ΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° src/index.html ΠΈ стартирамС Π²Ρ‚ΠΎΡ€ΠΈ ΠΏΡŠΡ‚.

$ time docker build -t app .
Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° контСкста Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π΄ΠΎ Docker Π΄Π΅ΠΌΠΎΠ½ 409MB
Π‘Ρ‚ΡŠΠΏΠΊΠ° 1/5 : FROM node:12.16.2
Π‘Ρ‚ΡŠΠΏΠΊΠ° 2/5 : WORKDIR /app
 ---> ИзползванС на кСша
Π‘Ρ‚ΡŠΠΏΠΊΠ° 3/5 : COPY . .
Π‘Ρ‚ΡŠΠΏΠΊΠ° 4/5 : RUN npm ci
Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ 1357 ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π·Π° 22.47s
Π‘Ρ‚ΡŠΠΏΠΊΠ° 5/5 : RUN npm run build --prod
Π”Π°Ρ‚Π°: 2020-04-16T19:26:26.587Z - Π₯Сш: fffa0fddaa3425c55dd3 - Π’Ρ€Π΅ΠΌΠ΅: 37902ms
УспСшно ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° 79f335df92d3
УспСшно Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½ΠΎ app:latest

Ρ€Π΅Π°Π»Π½ΠΎ 3m33.262s
ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» 0m0.000s
систСмСн 0m0.000s

Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚ Π΅ ΡƒΡΠΏΠ΅ΡˆΠ΅Π½, изпълнявамС ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° docker images:

REPOSITORY   TAG      IMAGE ID       CREATED              SIZE
app          latest   79f335df92d3   ΠΏΡ€Π΅Π΄ΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π°   1.74GB

ΠŸΡ€Π΅Π΄ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Docker Π²Π·ΠΈΠΌΠ° всички Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ‚ тСкущия контСкст ΠΈ Π³ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π½Π° своя Π΄Π΅ΠΌΠΎΠ½ Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° контСкста Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Docker Π΄Π΅ΠΌΠΎΠ½ 409MB. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ΡŠΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ сС Π·Π°Π΄Π°Π²Π° ΠΊΠ°Ρ‚ΠΎ послСдСн Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° build. Π’ нашия случай Ρ‚ΠΎΠ²Π° Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° дирСктория β€” Β«.Β», β€” ΠΈ Docker Π²Π·ΠΈΠΌΠ° всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π² Ρ‚Π°Π·ΠΈ ΠΏΠ°ΠΏΠΊΠ°. 409 MB Π΅ ΠΌΠ½ΠΎΠ³ΠΎ: Π΄Π° помислим ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌ.

НамалявамС контСкста

Π—Π° Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ контСкста, ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°. Или Π΄Π° слоТим всички Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π½ΡƒΠΆΠ½ΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, Π² ΠΎΡ‚Π΄Π΅Π»Π½Π° ΠΏΠ°ΠΏΠΊΠ° ΠΈ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ контСкста Π½Π° Docker ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ ΠΏΠ°ΠΏΠΊΠ°. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π·Π°Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π²ΠΊΠ»ΡŽΡ‡Π²Π° Π² контСкста. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, Ρ‰Π΅ слоТим Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ„Π°ΠΉΠ» .dockerignore ΠΈ Ρ‰Π΅ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅:

.git
/node_modules

ΠΈ Ρ‰Π΅ стартирамС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΎΡ‚Π½ΠΎΠ²ΠΎ:

$ time docker build -t app .
Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° контСкста Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Docker Π΄Π΅ΠΌΠΎΠ½ 607.2kB
Π‘Ρ‚ΡŠΠΏΠΊΠ° 1/5 : FROM node:12.16.2
Π‘Ρ‚ΡŠΠΏΠΊΠ° 2/5 : WORKDIR /app
 ---> ИзползванС на кСша
Π‘Ρ‚ΡŠΠΏΠΊΠ° 3/5 : COPY . .
Π‘Ρ‚ΡŠΠΏΠΊΠ° 4/5 : RUN npm ci
Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ 1357 ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π·Π° 22.47s
Π‘Ρ‚ΡŠΠΏΠΊΠ° 5/5 : RUN npm run build --prod
Π”Π°Ρ‚Π°: 2020-04-16T19:33:54.338Z - Π₯аш: fffa0fddaa3425c55dd3 - Π’Ρ€Π΅ΠΌΠ΅: 37313ms
УспСшно ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° 4942f010792a
УспСшно ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ app:latest

Ρ€Π΅Π°Π»Π½ΠΎ 1m47.763s
ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» 0m0.000s
систСма 0m0.000s

607.2 ΠšΠ±Π°ΠΉΡ‚Π° β€” ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ ΠΎΡ‚ 409 MB. А освСн Ρ‚ΠΎΠ²Π° Π½Π°ΠΌΠ°Π»ΠΈΡ…ΠΌΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΎΠ±Ρ€Π°Π·Π° ΠΎΡ‚ 1.74 Π΄ΠΎ 1.38GB:

REPOSITORY   TAG      IMAGE ID       CREATED         SIZE
app          latest   4942f010792a   ΠΏΡ€Π΅Π΄ΠΈ 3 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ   1.38GB

НСка ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ ΠΎΡ‰Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΎΠ±Ρ€Π°Π·Π°.

ИзползвамС Alpine

ΠžΡ‰Π΅ Π΅Π΄ΠΈΠ½ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° спСстим Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΎΠ±Ρ€Π°Π·Π° β€” Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ малък родитСлски ΠΎΠ±Ρ€Π°Π·. РодитСлският ΠΎΠ±Ρ€Π°Π· Π΅ ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚, Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ сС създава Π½Π°ΡˆΠΈΡΡ‚ ΠΎΠ±Ρ€Π°Π·. Долният слой сС Π·Π°Π΄Π°Π²Π° с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° FROM Π² Dockerfile. Π’ нашия случай ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π· Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° Ubuntu, Π² ΠΊΠΎΠΉΡ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ° инсталиран nodejs. И Ρ‚Π΅ΠΆΠΈ ...

$ docker images -a | grep node
node 12.16.2 406aa3abbc6c ΠΏΡ€Π΅Π΄ΠΈ 17 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ 916MB

... ΠΏΠΎΡ‡Ρ‚ΠΈ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚. Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ ΠΎΠ±Π΅ΠΌΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΎΠ±Ρ€Π°Π· Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° Alpine Linux. Alpine β€” Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ малък линукс. Docker-ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚ Π·Π° nodejs Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° alpine Ρ‚Π΅ΠΆΠΈ само 88.5 MB. Π—Π°Ρ‚ΠΎΠ²Π° Π½Π΅ΠΊΠ° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ нашия Π΄Π΅Π±Π΅Π» ΠΎΠ±Ρ€Π°Π·:

FROM node:12.16.2-alpine3.11
RUN apk --no-cache --update --virtual build-dependencies add 
    python 
    make 
    g++
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build --prod

Π’Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° инсталирамС някои Π½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π”Π°, Angular Π½Π΅ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π±Π΅Π· Python Β―(Β°_o)\/Β―

Но Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° ΠΎΠ±Ρ€Π°Π·Π° намаля с 150 MB:

REPOSITORY   TAG      IMAGE ID       CREATED          SIZE
app          latest   aa031edc315a   ΠΏΡ€Π΅Π΄ΠΈ 22 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ   761MB

ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Π½Π°ΠΏΡ€Π΅Π΄.

ΠœΡƒΠ»Ρ‚ΠΈΡΡ‚Π΅ΠΉΠ΄ΠΆ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅

НС всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ° Π² ΠΎΠ±Ρ€Π°Π·Π°, Π½ΠΈ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π² продукция.

$ docker run app ls -lah
total 576K
drwxr-xr-x 1 root root 4.0K Apr 16 19:54 .
drwxr-xr-x 1 root root 4.0K Apr 16 20:00 ..
-rwxr-xr-x 1 root root 19 Apr 17 2020 .dockerignore
-rwxr-xr-x 1 root root 246 Apr 17 2020 .editorconfig
-rwxr-xr-x 1 root root 631 Apr 17 2020 .gitignore
-rwxr-xr-x 1 root root 181 Apr 17 2020 Dockerfile
-rwxr-xr-x 1 root root 1020 Apr 17 2020 README.md
-rwxr-xr-x 1 root root 3.6K Apr 17 2020 angular.json
-rwxr-xr-x 1 root root 429 Apr 17 2020 browserslist
drwxr-xr-x 3 root root 4.0K Apr 16 19:54 dist
drwxr-xr-x 3 root root 4.0K Apr 17 2020 e2e
-rwxr-xr-x 1 root root 1015 Apr 17 2020 karma.conf.js
-rwxr-xr-x 1 root root 620 Apr 17 2020 ngsw-config.json
drwxr-xr-x 1 root root 4.0K Apr 16 19:54 node_modules
-rwxr-xr-x 1 root root 494.9K Apr 17 2020 package-lock.json
-rwxr-xr-x 1 root root 1.3K Apr 17 2020 package.json
drwxr-xr-x 5 root root 4.0K Apr 17 2020 src
-rwxr-xr-x 1 root root 210 Apr 17 2020 tsconfig.app.json
-rwxr-xr-x 1 root root 489 Apr 17 2020 tsconfig.json
-rwxr-xr-x 1 root root 270 Apr 17 2020 tsconfig.spec.json
-rwxr-xr-x 1 root root 1.9K Apr 17 2020 tslint.json

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° docker run app ls -lah Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Ρ…ΠΌΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° нашия ΠΎΠ±Ρ€Π°Π· app ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ…ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² Π½Π΅Π³ΠΎ ls -lah, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си.

Π’ продукцията Π½ΠΈ Π΅ Π½ΡƒΠΆΠ½Π° само ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° dist. Но ΠΏΠΎ някакъв Π½Π°Ρ‡ΠΈΠ½ трябва Π΄Π° прСдоставим Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ навън. МоТСм Π΄Π° стартирамС HTTP ΡΡŠΡ€Π²ΡŠΡ€ Π½Π° nodejs. Но Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π½Π΅Ρ‰Π°Ρ‚Π° ΠΏΠΎ-прости. ΠŸΠΎΠ·Π½Π°ΠΉΡ‚Π΅ Π±ΡŠΠ»Π³Π°Ρ€ΡΠΊΠ°Ρ‚Π° Π΄ΡƒΠΌΠ° с Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈΡ‚Π΅ Π±ΡƒΠΊΠ²ΠΈ β€žΡŠβ€œ. ΠŸΡ€Π°Π²ΠΈΠ»Π½ΠΎ! ЫнТыныксы. Π’Π·Π΅ΠΌΠ°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π· с nginx, слагамС Π² Π½Π΅Π³ΠΎ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° dist ΠΈ малък ΠΊΠΎΠ½Ρ„ΠΈΠ³:

server {
    listen 80 default_server;
    server_name localhost;
    charset utf-8;
    root /app/dist;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

Π’ΠΎΠ²Π° Ρ‰Π΅ станС Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠ΅Ρ‚Π°ΠΏΠ½Π°Ρ‚Π° сборка. Π©Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ нашия Dockerfile:

FROM node:12.16.2-alpine3.11 as builder
RUN apk --no-cache --update --virtual build-dependencies add 
    python 
    make 
    g++
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build --prod

FROM nginx:1.17.10-alpine
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/static.conf /etc/nginx/conf.d
COPY --from=builder /app/dist/app .

Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ инструкции FROM Π² Dockerfile, всяка ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ стартира свой Π΅Ρ‚Π°ΠΏ Π½Π° сборка. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π½Π°Ρ€Π΅ΠΊΠΎΡ…ΠΌΠ΅ builder, Π° ΠΎΡ‚ послСдния FROM Ρ‰Π΅ сС приготвя Π½Π°ΡˆΠΈΡΡ‚ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π΅Π½ ΠΎΠ±Ρ€Π°Π·. ΠŸΠΎΡΠ»Π΅Π΄Π½Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π° ΠΎΡ‚ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ Π΅Ρ‚Π°ΠΏ Π² окончатСлния ΠΎΠ±Ρ€Π°Π· с nginx. Π Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ намаля:

REPOSITORY   TAG      IMAGE ID       CREATED          SIZE
app          latest   2c6c5da07802   29 minutes ago   36MB

НСка стартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с нашия ΠΎΠ±Ρ€Π°Π· ΠΈ Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Π΅ всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ:

docker run -p8080:80 app

Π‘ опцията -p8080:80 ΠΏΡ€ΠΎΠ±ΠΈΡ…ΠΌΠ΅ ΠΏΠΎΡ€Ρ‚Π° 8080 Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° хост машина Π΄ΠΎ ΠΏΠΎΡ€Ρ‚Π° 80 Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ nginx. ΠžΡ‚Π²Π°Ρ€ΡΠΌΠ΅ Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° http://localhost:8080/ ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½ΠΈ. Всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ!

Няколко ΡΡŠΠ²Π΅Ρ‚Π° ΠΊΠ°ΠΊ Π΄Π° ускоритС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ. НапримСр, Π΄ΠΎ 30 сСкунди

НамаляванСто Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΎΠ±Ρ€Π°Π·Π° ΠΎΡ‚ 1.74 Π“Π‘ Π΄ΠΎ 36 MB Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΡΡŠΠΊΡ€Π°Ρ‰Π°Π²Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° доставка Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ продукция. Но Π΄Π° сС Π²ΡŠΡ€Π½Π΅ΠΌ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅.

$ time docker build -t app .
Sending build context to Docker daemon 608.8kB
Step 1/11 : FROM node:12.16.2-alpine3.11 as builder
Step 2/11 : RUN apk --no-cache --update --virtual build-dependencies add python make g++
 ---> Using cache
Step 3/11 : WORKDIR /app
 ---> Using cache
Step 4/11 : COPY . .
Step 5/11 : RUN npm ci
added 1357 packages in 47.338s
Step 6/11 : RUN npm run build --prod
Date: 2020-04-16T21:16:03.899Z - Hash: fffa0fddaa3425c55dd3 - Time: 39948ms
 ---> 27f1479221e4
Step 7/11 : FROM nginx:stable-alpine
Step 8/11 : WORKDIR /app
 ---> Using cache
Step 9/11 : RUN rm /etc/nginx/conf.d/default.conf
 ---> Using cache
Step 10/11 : COPY nginx/static.conf /etc/nginx/conf.d
 ---> Using cache
Step 11/11 : COPY --from=builder /app/dist/app .
Successfully built d201471c91ad
Successfully tagged app:latest

real 2m17.700s
user 0m0.000s
sys 0m0.000s

БмСнямС Ρ€Π΅Π΄Π° Π½Π° слоСвСтС

ΠŸΡŠΡ€Π²ΠΈΡ‚Π΅ Ρ‚Ρ€ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ бяха ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΈ (подсказка Using cache). На Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° сС ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ всички Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π½Π° ΠΏΠ΅Ρ‚Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° сС инсталират зависимоститС. RUN npm ci β€” Ρ†Π΅Π»ΠΈ 47.338s. Π—Π°Ρ‰ΠΎ всСки ΠΏΡŠΡ‚ Π΄Π° инсталирамС ΠΎΡ‚Π½ΠΎΠ²ΠΎ зависимоститС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‚Π΅ рядко сС промСнят? НСка Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π·Π°Ρ‰ΠΎ Ρ‚Π΅ Π½Π΅ бяха ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΈ. Π€Π°ΠΊΡ‚ΡŠΡ‚ Π΅, Ρ‡Π΅ Π”ΠΎΠΊΠ΅Ρ€ провСрява слой ΠΏΠΎ слой, Π΄Π°Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΈ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ с нСя Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ са сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΈ. На Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ всички Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° нашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ срСд тях, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, ΠΈΠΌΠ° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π”ΠΎΠΊΠ΅Ρ€ Π½Π΅ само Ρ‡Π΅ Π½Π΅ Π²Π·Π΅ΠΌΠ° ΠΎΡ‚ кСша Ρ‚ΠΎΠ·ΠΈ слой, Π½ΠΎ ΠΈ всички послСдващи! НСка Π΄Π° внСсСм Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ измСнСния Π² Dockerfile.

FROM node:12.16.2-alpine3.11 as builder
RUN apk --no-cache --update --virtual build-dependencies add 
    python 
    make 
    g++
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build --prod

FROM nginx:1.17.10-alpine
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/static.conf /etc/nginx/conf.d
COPY --from=builder /app/dist/app .

ΠŸΡŠΡ€Π²ΠΎ сС ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ package.json ΠΈ package-lock.json, слСд Ρ‚ΠΎΠ²Π° сС инсталират зависимоститС, Π° Π΅Π΄Π²Π° слСд Ρ‚ΠΎΠ²Π° сС ΠΊΠΎΠΏΠΈΡ€Π° цСлият ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚:

$ time docker build -t app .
Sending build context to Docker daemon 608.8kB
Step 1/12 : FROM node:12.16.2-alpine3.11 as builder
Step 2/12 : RUN apk --no-cache --update --virtual build-dependencies add python make g++
 ---> Using cache
Step 3/12 : WORKDIR /app
 ---> Using cache
Step 4/12 : COPY package*.json ./
 ---> Using cache
Step 5/12 : RUN npm ci
 ---> Using cache
Step 6/12 : COPY . .
Step 7/12 : RUN npm run build --prod
Date: 2020-04-16T21:29:44.770Z - Hash: fffa0fddaa3425c55dd3 - Time: 38287ms
 ---> 1b9448c73558
Step 8/12 : FROM nginx:stable-alpine
Step 9/12 : WORKDIR /app
 ---> Using cache
Step 10/12 : RUN rm /etc/nginx/conf.d/default.conf
 ---> Using cache
Step 11/12 : COPY nginx/static.conf /etc/nginx/conf.d
 ---> Using cache
Step 12/12 : COPY --from=builder /app/dist/app .
Successfully built a44dd7c217c3
Successfully tagged app:latest

real 0m46.497s
user 0m0.000s
sys 0m0.000s

46 сСкунди вмСсто 3 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ β€” Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅! Π’Π°ΠΆΠ΅Π½ Π΅ правилният Ρ€Π΅Π΄ Π½Π° слоСвСтС: ΠΏΡŠΡ€Π²ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ сС промСня, слСд Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ рядко сС промСня, Π° накрая β€” Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ чСсто.

Π‘Π»Π΅Π΄Π²Π°Ρ‚ ΠΌΠ°Π»ΠΊΠΎ Π΄ΡƒΠΌΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ Π² систСми CI/CD.

ИзползванС Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ Π·Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅

Ако ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ някакво SaaS Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, локалният кСш Π½Π° Π”ΠΎΠΊΠ΅Ρ€ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС чист ΠΈ свСТ. Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π”ΠΎΠΊΠ΅Ρ€ Π΄Π° сС сдобиС с Π³ΠΎΡ‚ΠΎΠ²ΠΈ слоСвС, Π΄Π°ΠΉΡ‚Π΅ ΠΌΡƒ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎ ΡΡŠΠ±Ρ€Π°Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π·.

НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² GitHub Actions. ИзползвамС Ρ‚Π°ΠΊΠ°Π²Π° конфигурация

on:
  push:
    branches:
      - master

name: Test docker build

jobs:
  deploy:
    name: Build
    runs-on: ubuntu-latest
    env:
      IMAGE_NAME: docker.pkg.github.com/${{ github.repository }}/app
      IMAGE_TAG: ${{ github.sha }}

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Login to GitHub Packages
      env:
        TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: |
        docker login docker.pkg.github.com -u $GITHUB_ACTOR -p $TOKEN

    - name: Build
      run: |
        docker build 
          -t $IMAGE_NAME:$IMAGE_TAG 
          -t $IMAGE_NAME:latest 
          .

    - name: Push image to GitHub Packages
      run: |
        docker push $IMAGE_NAME:latest
        docker push $IMAGE_NAME:$IMAGE_TAG

    - name: Logout
      run: |
        docker logout docker.pkg.github.com

ΠžΠ±Ρ€Π°Π·ΡŠΡ‚ сС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° ΠΈ сС ΠΊΠ°Ρ‡Π²Π° Π² GitHub Packages Π·Π° Π΄Π²Π΅ ΠΌΠΈΠ½ΡƒΡ‚ΠΈ ΠΈ 20 сСкунди:

Няколко ΡΡŠΠ²Π΅Ρ‚Π° ΠΊΠ°ΠΊ Π΄Π° ускоритС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ. НапримСр, Π΄ΠΎ 30 сСкунди

Π‘Π΅Π³Π° Ρ‰Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° кСша Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ:

on:
  push:
    branches:
      - master

name: Test docker build

jobs:
  deploy:
    name: Build
    runs-on: ubuntu-latest
    env:
      IMAGE_NAME: docker.pkg.github.com/${{ github.repository }}/app
      IMAGE_TAG: ${{ github.sha }}

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Login to GitHub Packages
      env:
        TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: |
        docker login docker.pkg.github.com -u $GITHUB_ACTOR -p $TOKEN

    - name: Pull latest images
      run: |
        docker pull $IMAGE_NAME:latest || true
        docker pull $IMAGE_NAME-builder-stage:latest || true

    - name: Images list
      run: |
        docker images

    - name: Build
      run: |
        docker build 
          --target builder 
          --cache-from $IMAGE_NAME-builder-stage:latest 
          -t $IMAGE_NAME-builder-stage 
          .
        docker build 
          --cache-from $IMAGE_NAME-builder-stage:latest 
          --cache-from $IMAGE_NAME:latest 
          -t $IMAGE_NAME:$IMAGE_TAG 
          -t $IMAGE_NAME:latest 
          .

    - name: Push image to GitHub Packages
      run: |
        docker push $IMAGE_NAME-builder-stage:latest
        docker push $IMAGE_NAME:latest
        docker push $IMAGE_NAME:$IMAGE_TAG

    - name: Logout
      run: |
        docker logout docker.pkg.github.com

ΠŸΡŠΡ€Π²ΠΎ трябва Π΄Π° обясним Π·Π°Ρ‰ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ build. Π’ΠΎΠ²Π° Π΅ Ρ‚Π°ΠΊΠ°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² многостСпСнното ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ рСзултатният ΠΎΠ±Ρ€Π°Π· Ρ‰Π΅ бъдС Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ слоСвС ΠΎΡ‚ послСдния Π΅Ρ‚Π°ΠΏ. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ слоСвСтС ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ няма Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ‚ Π² ΠΎΠ±Ρ€Π°Π·Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° финалния ΠΎΠ±Ρ€Π°Π· ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎΡ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, Docker няма Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ слоСвС Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Π·Π° с nodejs (Π΅Ρ‚Π°ΠΏ builder). Π—Π° Π΄Π° Ρ€Π΅ΡˆΠΈΠΌ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, сС създава ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΎΠ±Ρ€Π°Π· $IMAGE_NAME-builder-stage ΠΈ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π² GitHub Packages, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² послСдващото ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° кСш.

Няколко ΡΡŠΠ²Π΅Ρ‚Π° ΠΊΠ°ΠΊ Π΄Π° ускоритС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ. НапримСр, Π΄ΠΎ 30 сСкунди

ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π΅ Π½Π°ΠΌΠ°Π»Π΅Π½ΠΎ Π΄ΠΎ Π΅Π΄Π½Π° ΠΌΠΈΠ½ΡƒΡ‚Π° ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°. Половин ΠΌΠΈΠ½ΡƒΡ‚Π° сС отдСля Π·Π° изтСглянС Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π·ΠΈ.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ

ΠžΡ‰Π΅ Π΅Π΄ΠΈΠ½ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с чистия кСш Π½Π° Docker Π΅ Π΄Π° изнСсСтС част ΠΎΡ‚ слоСвСтС Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Dockerfile, Π΄Π° Π³ΠΎ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ самостоятСлно, Π΄Π° Π³ΠΎ ΠΊΠ°Ρ‡ΠΈΡ‚Π΅ Π² Container Registry ΠΈ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠ°Ρ‚ΠΎ родитСлски.

БъздавамС нашия nodejs ΠΎΠ±Ρ€Π°Π· Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Angular ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. БъздавамС Dockerfile.node Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

FROM node:12.16.2-alpine3.11
RUN apk --no-cache --update --virtual build-dependencies add 
    python 
    make 
    g++

Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ ΠΈ ΠΊΠ°Ρ‡Π²Π°ΠΌΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ ΠΎΠ±Ρ€Π°Π· Π² Docker Hub:

docker build -t exsmund/node-for-angular -f Dockerfile.node .
docker push exsmund/node-for-angular:latest

Π‘Π΅Π³Π° Π² основния Π½ΠΈ Dockerfile ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ готовия ΠΎΠ±Ρ€Π°Π·:

FROM exsmund/node-for-angular:latest as builder
...

Π’ нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π΅ Π΅ Π½Π°ΠΌΠ°Π»Π΅Π½ΠΎ, Π½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΡΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈ всСки ΠΎΡ‚ тях изисква Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ зависимости.

Няколко ΡΡŠΠ²Π΅Ρ‚Π° ΠΊΠ°ΠΊ Π΄Π° ускоритС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ. НапримСр, Π΄ΠΎ 30 сСкунди

Π Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ няколко ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π° ускоряванС Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ. Ако искатС Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π΄Π° Π΅ Π±ΡŠΡ€Π·, ΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° си:

  • намаляванС Π½Π° контСкста;
  • ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ°Π»ΠΊΠΈ родитСлски ΠΎΠ±Ρ€Π°Π·ΠΈ;
  • мултистСйдТ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅;
  • промяна Π½Π° Ρ€Π΅Π΄Π° Π½Π° инструкциитС Π² Dockerfile, Π·Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° кСша Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ;
  • настройка Π½Π° кСша Π² CI/CD систСмитС;
  • ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ създаванС Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ.

Надявам сС с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΄Π° станС ΠΏΠΎ-ясно ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Docker ΠΈ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ дСплоя си. Π—Π° Π΄Π° ΠΏΠΎΠΈΠ³Ρ€Π°Π΅Ρ‚Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΎΡ‚ статията, Π΅ създадСн Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. https://github.com/devopsprodigy/test-docker-build.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster