π³π¨ Π‘ΡΡΠΎΠΉΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ: ΠΊΠ°ΠΊ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Docker-ΠΎΠ±ΡΠ°Π· Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ
Docker-ΠΎΠ±ΡΠ°Π·Ρ ΡΠ°ΡΡΠΎ ΡΡΡΠ°Π΄Π°ΡΡ ΠΎΡ Π»ΠΈΡΠ½Π΅Π³ΠΎ Π²Π΅ΡΠ°. ΠΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° β ΡΡΠΎ Π²ΠΎΠΏΡΠΎΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. ΠΠΎ Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅: ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½Π°Ρ ΡΠ±ΠΎΡΠΊΠ°.
ΠΠ½ΠΎΠ³ΠΈΠ΅ Dockerfile Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π² ΡΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ Docker-ΠΎΠ±ΡΠ°Π·Ρ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ ΠΊΡΠ΄Π° Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΡΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Π²Π΅Π΄Ρ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΎΠ±ΡΠ°Π·Ρ Ρ Π½Π΅Π½ΡΠΆΠ½ΡΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π»ΠΈΡΠ½Π΅Π΅ ΠΌΠ΅ΡΡΠΎ, Π½ΠΎ ΠΈ ΠΏΠΎΠ²ΡΡΠ°ΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ.
ΠΠΎΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π·Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ
Π£ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΅ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π²ΡΡ ΡΠΈΠΏΠΎΠ²:
- ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ (build-time) β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ Π·Π°ΠΏΡΡΠΊΡ.
- ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (run-time) β ΡΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅.
ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°, ΡΠΎ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ β ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, Π»ΠΈΠ½ΡΠ΅ΡΡ ΠΈ Ρ.Π΄. ΠΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ°ΠΏΠΎΠ² ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ Dockerfile
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Dockerfile Π΄Π»Ρ Go ΠΈ Node.js ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π³Π΄Π΅ Π΄ΠΎΠΏΡΡΠ΅Π½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΠΈΠ΅ ΠΊ Π½Π΅Π½ΡΠΆΠ½ΠΎΠΌΡ ΡΠ°Π·Π΄ΡΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ².
ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Dockerfile Π΄Π»Ρ Go-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΎΠ±ΡΠ°Π· golang:1.23, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΠΈ Π²Π΅ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Go Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ β Π±ΠΎΠ»ΡΡΠ΅ 800 ΠΠ±, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠΌΠΈ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅:
Π‘ΡΡΡΠΊΡΡΡΠ° ΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π΄ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Dockerfile Π΄Π»Ρ Node.js-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ npm ci
ΠΈ npm run build
. ΠΠ΅ΡΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π°. ΠΠΎ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠ±ΡΠ°ΡΡ Π΄Π΅Π²Π΅Π»ΠΎΠΏΠ΅ΡΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° npm run build
Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Π½ΡΠΆΠ½Ρ ΠΎΠ±Π° ΡΠΈΠΏΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ:
Π’Π°ΠΊΠΎΠΉ Π΄ΠΎΠΊΠ΅ΡΡΠ°ΠΉΠ» ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ°Π· Ρ 500 ΠΠ± Π»ΠΈΡΠ½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½Π°Ρ ΡΠ±ΠΎΡΠΊΠ°
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΠΏΠ°ΡΡΠ΅ΡΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Β«Π‘ΡΡΠΎΠΈΡΠ΅Π»ΡΒ». Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Docker, ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π΄Π²ΡΠΌΡ ΠΌΠΎΡΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ Dockerfile β ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄ΠΎΠΊΠ΅ΡΡΠ°ΠΉΠ»Π΅.
ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π°
ΠΠ΄Π½Π° ΠΈΠ· ΡΠ°ΠΌΡΡ
ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² Dockerfile β ΡΡΠΎ COPY
. ΠΠ±ΡΡΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ Ρ
ΠΎΡΡΠ° Π² ΠΎΠ±ΡΠ°Π·:
ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΉΠ»Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ
Docker-ΠΎΠ±ΡΠ°Π·ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ nginx.conf
ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° nginx:latest ΠΏΡΡΠΌΠΎ Π² ΡΠ²ΠΎΠΉ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ°Π·:
ΠΠΌΠ΅Π½Π½ΠΎ ΡΠΈΡΠ° COPY --from=
ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ Β«Π‘ΡΡΠΎΠΈΡΠ΅Π»ΡΒ» β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ°Π·Π° Π΄Π»Ρ Node.js:
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ Dockerfile
Π‘ 2018 Π³ΠΎΠ΄Π° Docker ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΅Π»Π΅Π²ΡΠ΅ Dockerfile: Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ FROM
, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΎΠ±ΡΠ°Π·. ΠΠ΄Π΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΡΠΈ ΡΠ°Π·Π½ΡΡ
ΠΎΠ±ΡΠ°Π·Π° Ρ ΠΈΡ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ:
ΠΡΠ° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ΅Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° --target
Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ docker build
, Π΄Π°Π²Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ Dockerfile ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΎΠ±ΡΠ°Π·Ρ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΡΠ΅Π»ΠΈ:
Π‘ΠΎΠ±ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π· Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ FROM
:
Π‘ΠΎΠ±ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π· Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ FROM
:
Π‘ΠΎΠ±ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π· Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ FROM
:
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ
Dockerfile Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Dockerfile Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ FROM
. ΠΠ΄Π΅ΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ npm run build
, Π° Π²ΡΠΎΡΠΎΠΉ ΡΡΠ°ΠΏ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ:
- ΠΠΎΡΡΠ΄ΠΎΠΊ ΡΡΠ°ΠΏΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ΅Π»ΡΠ·Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ
COPY --from
ΠΈΠ· ΡΡΠ°ΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ. ΠΡΠ°ΠΏΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. - ΠΠ»ΠΈΠ°ΡΡ ΡΡΠ°ΠΏΠΎΠ². ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ AS (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, AS build) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π°ΡΡ ΡΡΠ°ΠΏΡ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ΅ ΠΈΠΌΡ, Π½ΠΎ ΠΈΡ
ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ: Π΅ΡΠ»ΠΈ ΠΈΠΌΡ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π½Π° ΡΡΠ°ΠΏΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ»Π°ΡΡΡΡ ΠΏΠΎ ΠΈΡ
ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΠΎΠΌΡ Π½ΠΎΠΌΠ΅ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
COPY --from=0
). - ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΠ°ΠΏ. ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ»Π°Π³
--target
, ΠΊΠΎΠΌΠ°Π½Π΄Π°docker build
ΡΠΎΠ±Π΅ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΠ°ΠΏ ΠΈ Π²ΡΠ΅ ΡΡΠ°ΠΏΡ, ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ Π·Π°Π²ΠΈΡΠΈΡ.
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Go
Go-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠ΅Π³Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ. ΠΡΠΎΠ³ΠΎΠ²ΡΠΉ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π²ΡΡ ΡΠΈΠΏΠΎΠ²:
- Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ (ΡΠΎΠ±ΡΠ°Π½ Ρ
CGO_ENABLED=0
) β Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π²Π½ΡΡΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠ°. Π’Π°ΠΊΠΎΠΉ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΄Π°ΠΆΠ΅ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ½ΡΡ Π±Π°Π·ΠΎΠ²ΡΡ ΠΎΠ±ΡΠ°Π·Π°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,gcr.io/distroless/static
ΠΈΠ»ΠΈscratch
. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ β ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΡΡΡΠΎΠΉ ΠΎΠ±ΡΠ°Π·, ΠΏΠΎΡΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌ ΠΏΡΠΈ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ. - ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ (ΡΠΎΠ±ΡΠ°Π½ Ρ
CGO_ENABLED=1
) β ΠΎΠ½ ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ C-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ»Ρ Π½Π΅Π³ΠΎ Π½ΡΠΆΠ΅Π½ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π·, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΆΠ΅ Π΅ΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡgcr.io/distroless/cc
, alpine ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ debian.
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π²ΡΠ±ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° Π΄Π»Ρ ΡΡΠ°ΠΏΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΠΎΠ³ΠΎ Dockerfile β Π²Ρ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΎΠ±ΡΠ°Π· Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠ°:
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Rust
Rust-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ cargo. ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ Docker-ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ Rust Π²ΠΊΠ»ΡΡΠ°Π΅Ρ cargo, rustc (ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ) ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠ±ΠΎΡΠΊΠΈ. ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌ β ΠΏΠΎΡΡΠΈ 2 ΠΠ±. ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ Rust-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΡΡ ΡΠ±ΠΎΡΠΊΡ, ΡΡΠΎΠ±Ρ ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ» ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΌ ΠΈ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» Π»ΠΈΡΠ½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ Π²ΡΠ±ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° Π΄Π»Ρ ΡΡΠ°ΠΏΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½ΡΠΆΠ½Ρ Π²Π°ΡΠ΅ΠΌΡ Rust-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Java
Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Maven ΠΈΠ»ΠΈ Gradle, ΠΈ Π΄Π»Ρ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½ΡΠΆΠ½Π° Java Runtime Environment (JRE). ΠΠΎΠ³Π΄Π° Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅, ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ°Π·Ρ Π΄Π»Ρ ΡΡΠ°ΠΏΠΎΠ² ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Π½ΡΠΆΠ΅Π½ Java Development Kit (JDK), ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ΄Π°. Π Π²ΠΎΡ Π΄Π»Ρ ΡΡΠ°ΠΏΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎΠΉ Java Runtime Environment (JRE), ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Dockerfile Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Go ΠΈ Rust, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°ΠΉΠ» Π΄Π»Ρ Java Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΠ°ΠΏ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΄Π° ΠΈ ΡΠ°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
Π ΠΊΠ°ΠΊΠΈΠ΅ Ρ ΠΈΡΡΠΎΡΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Docker-ΠΎΠ±ΡΠ°Π·ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π²Ρ? ΠΠΎΠ΄Π΅Π»ΠΈΡΠ΅ΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΎΠΏΡΡΠΎΠΌ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ !