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

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

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

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

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

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

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

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

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

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

ng n app

Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ PWA към Π½Π΅Π³ΠΎ (Π½ΠΈΠ΅ смС прогрСсивни):

ng add @angular/pwa --project app

Π”ΠΎΠΊΠ°Ρ‚ΠΎ сС изтСглят ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ npm ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Π½Π΅ΠΊΠ° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠΊΠ΅Ρ€ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. 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 .
Sending build context to Docker daemon 409MB
Step 1/5 : FROM node:12.16.2
Status: Downloaded newer image for node:12.16.2
Step 2/5 : WORKDIR /app
Step 3/5 : COPY . .
Step 4/5 : RUN npm ci
added 1357 packages in 22.47s
Step 5/5 : RUN npm run build --prod
Date: 2020-04-16T19:20:09.664Z - Hash: fffa0fddaa3425c55dd3 - Time: 37581ms
Successfully built c8c279335f46
Successfully tagged app:latest

real 5m4.541s
user 0m0.000s
sys 0m0.000s

ΠŸΡ€ΠΎΠΌΠ΅Π½ΡΠΌΠ΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° src/index.html ΠΈ Π³ΠΎ изпълнявамС Π²Ρ‚ΠΎΡ€ΠΈ ΠΏΡŠΡ‚.

$ time docker build -t app .
Sending build context to Docker daemon 409MB
Step 1/5 : FROM node:12.16.2
Step 2/5 : WORKDIR /app
 ---> Using cache
Step 3/5 : COPY . .
Step 4/5 : RUN npm ci
added 1357 packages in 22.47s
Step 5/5 : RUN npm run build --prod
Date: 2020-04-16T19:26:26.587Z - Hash: fffa0fddaa3425c55dd3 - Time: 37902ms
Successfully built 79f335df92d3
Successfully tagged app:latest

real 3m33.262s
user 0m0.000s
sys 0m0.000s

Π—Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° docker images:

REPOSITORY   TAG      IMAGE ID       CREATED              SIZE
app          latest   79f335df92d3   About a minute ago   1.74GB

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

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

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

.git
/node_modules

ΠΈ стартирайтС компилацията ΠΎΡ‚Π½ΠΎΠ²ΠΎ:

$ time docker build -t app .
Sending build context to Docker daemon 607.2kB
Step 1/5 : FROM node:12.16.2
Step 2/5 : WORKDIR /app
 ---> Using cache
Step 3/5 : COPY . .
Step 4/5 : RUN npm ci
added 1357 packages in 22.47s
Step 5/5 : RUN npm run build --prod
Date: 2020-04-16T19:33:54.338Z - Hash: fffa0fddaa3425c55dd3 - Time: 37313ms
Successfully built 4942f010792a
Successfully tagged app:latest

real 1m47.763s
user 0m0.000s
sys 0m0.000s

607.2 KB Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ ΠΎΡ‚ 409 MB. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π½Π°ΠΌΠ°Π»ΠΈΡ…ΠΌΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ 1.74 Π½Π° 1.38 GB:

REPOSITORY   TAG      IMAGE ID       CREATED         SIZE
app          latest   4942f010792a   3 minutes ago   1.38GB

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

ИзползвамС Alpine

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

$ docker images -a | grep node
node 12.16.2 406aa3abbc6c 17 minutes ago 916MB

... ΠΏΠΎΡ‡Ρ‚ΠΈ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ силата Π½Π° Π·Π²ΡƒΠΊΠ°, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° Alpine Linux. Alpine Π΅ ΠΌΠ½ΠΎΠ³ΠΎ малък Linux. Π”ΠΎΠΊΠ΅Ρ€ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° 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 minutes ago   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. Но Π½ΠΈΠ΅ Ρ‰Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΠΎ-лСсно. ΠŸΠΎΠ·Π½Π°ΠΉΡ‚Π΅ руска Π΄ΡƒΠΌΠ°, която ΠΈΠΌΠ° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Π±ΡƒΠΊΠ²ΠΈ "y". вярно! ИнТиникси. Π”Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с 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 GB Π½Π° 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. Π—Π°Ρ‰ΠΎ Π΄Π° прСинсталиратС зависимости всСки ΠΏΡŠΡ‚, Π°ΠΊΠΎ сС промСнят ΠΌΠ½ΠΎΠ³ΠΎ рядко? НСка Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π·Π°Ρ‰ΠΎ Π½Π΅ са Π±ΠΈΠ»ΠΈ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΈ. Π’ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π΅, Ρ‡Π΅ Docker Ρ‰Π΅ провСрява слой ΠΏΠΎ слой, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈ Π΄Π°Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΈ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ с нСя Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ са сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΈ. На Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ всички Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° нашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ срСд тях, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, ΠΈΠΌΠ° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Docker Π½Π΅ само Π½Π΅ Π²Π·Π΅ΠΌΠ° Ρ‚ΠΎΠ·ΠΈ слой ΠΎΡ‚ кСша, Π½ΠΎ ΠΈ всички слСдващи! НСка Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ някои ΠΌΠ°Π»ΠΊΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² 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 Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ, Ρ‚ΠΎΠ³Π°Π²Π° локалният кСш Π½Π° Docker ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ чист ΠΈ свСТ. Π—Π° Π΄Π° Π΄Π°Π΄Π΅Ρ‚Π΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ€Π° място Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΠΈΠ·ΠΏΠ΅Ρ‡Π΅Π½ΠΈΡ‚Π΅ слоСвС, Π΄Π°ΠΉΡ‚Π΅ ΠΌΡƒ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎΡ‚ΠΎ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

НСка Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² 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 (Π΅Ρ‚Π°ΠΏ Π½Π° строитСл). Π—Π° Π΄Π° сС Ρ€Π΅ΡˆΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, сС създава ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΎΠ±Ρ€Π°Π· $IMAGE_NAME-builder-stage ΠΈ сС насочва към GitHub Packages, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² слСдваща компилация ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° кСш.

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

ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° сглобяванС бСшС Π½Π°ΠΌΠ°Π»Π΅Π½ΠΎ Π΄ΠΎ Π΅Π΄Π½Π° ΠΌΠΈΠ½ΡƒΡ‚Π° ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°. Половин ΠΌΠΈΠ½ΡƒΡ‚Π° сС ΠΈΠ·Ρ€Π°Π·Ρ…ΠΎΠ΄Π²Π° Π·Π° изтСглянС Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈ изобраТСния.

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

Π”Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с чист Docker кСш Π΅ Π΄Π° прСмСститС някои ΠΎΡ‚ слоСвСтС Π² Π΄Ρ€ΡƒΠ³ Dockerfile, Π΄Π° Π³ΠΎ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ, Π΄Π° Π³ΠΎ поставитС Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠ°Ρ‚ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π».

НиС създавамС наш собствСн 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 сСкунди

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

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

Надявам сС, Ρ‡Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΡŠΡ‚ Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎ-ясно ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Docker ΠΈ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΎ Π²Π°ΡˆΠ΅Ρ‚ΠΎ внСдряванС. Π—Π° Π΄Π° сС ΠΈΠ³Ρ€Π°Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΎΡ‚ статията, Π΅ създадСно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ https://github.com/devopsprodigy/test-docker-build.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€