Docker – ΡΠ°ΠΌΠ°Ρ ΠΈΠ·Π²Π΅ΡΡΠ½Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΠΈ, Π½ΠΎ ΠΎΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅.
ΠΠΎΠΊΡΡΠ³ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΡΠ΅Π»Π°Ρ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
ΠΠ΄Π΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ 10 Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ², ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΎΡΠΎΠ² ΠΈ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡΠΎΠ² Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ Docker Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ.
ΠΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠ΅ ΡΠ²ΠΎΠΉ ΠΏΡΡΡ Π² Docker ΠΈΠ»ΠΈ ΡΠ²Π»ΡΠ΅ΡΠ΅ΡΡ ΠΎΠΏΡΡΠ½ΡΠΌ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΌ ΡΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π·Π΄Π΅ΡΡ ΡΡΠΎ-ΡΠΎ, ΡΡΠΎ ΡΡΠΎΠΈΡ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΡΠ²ΠΎΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ.
Docker Compose
Docker Compose – Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π² ΡΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Docker.
Compose – ΡΡΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ “ΡΡΠ΅ΠΊΠΎΠ²” ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Docker, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π² ΡΠ½ΠΈΡΠΎΠ½.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Docker CLI ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ.
Compose ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ Π² ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ.
ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠ»ΠΎΠΉ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²ΠΈΡΡ Π² ΡΠ°ΠΉΠ»Π΅ docker-compose.yml, Π° Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» docker-compose, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈΡ Π²ΡΠ΅ Π²ΠΌΠ΅ΡΡΠ΅:
version: 3 services: app: image: example.com/example-app:latest ports: - 80:80 database: image: mysql:latest expose: - 3306 cache: image: redis:latest expose: - 6379
ΡΠΌ. ΡΠ°ΠΊΠΆΠ΅:
- π³Β Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Docker Compose
- ΠΠ°ΠΊ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Docker Compose
- π³Β Docker Compose Up ΠΈΠ»ΠΈ Start ΠΈ Down ΠΈΠ»ΠΈ Stop: Π² ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ°
ΠΠ°ΠΏΡΡΠΊ docker-compose up -d ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΊΡΡ-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ².
ΠΠ½ΠΈ Π±ΡΠ΄ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²ΡΠ·Π°Π½Ρ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ.
ΠΡΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅, ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ docker run Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·.
Portainer

Portainer – ΡΡΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Docker.
ΠΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°, ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ².
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Docker, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π·Ρ, ΡΠ΅ΡΠΈ ΠΈ ΡΠΎΠΌΠ°.
- π³Β ΠΠ°ΠΊ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΡΡΠ΅ΠΊ Portainer Π²Π½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Docker Swarm
- π³Β ΠΡΡΡΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Π΄Π»Ρ Docker
Portainer ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Docker:
docker run -d -p 9000:9000 --name=portainer \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΡΡΠ°Π½Π°Π²ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Portainer, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ localhost:9000.
ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΡΠ΅ΠΌ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠ° Docker Π²Π°ΡΠ΅Π³ΠΎ Ρ ΠΎΡΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Portainer.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Portainer ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠΊΠ΅Ρ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΌΠΈ Π½Π° Π²Π°ΡΠ΅ΠΌ Ρ ΠΎΡΡΠ΅.
Kubernetes
Kubernetes – ΡΡΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ².
ΠΡΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠΈΡ Π½Π°Π³ΡΡΠ·ΠΎΠΊ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ.
ΠΠ»Π°ΡΡΠ΅Ρ Kubernetes ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Ρ ΠΎΡΡΠΎΠ² (ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ /Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½), ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ°Π²ΠΎ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ².
Kubernetes ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅.
Π ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΉ Docker ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Kubernetes ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±Π΅ΡΠΏΡΠ΅ΠΏΡΡΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ·Π»Π°Ρ .
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Kubernetes ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ OCI, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ°Π·Ρ Docker Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅:
apiVersion: apps/v1 kind: Deployment spec: replicas: 3 selector: matchLabels: app: example template: metadata: labels: app: example spec: containers: - name: example image: example.com/example-image:latest ports: - containerPort: 80
- βΈοΈΒ Kubernetes β Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
- π³Β ΠΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
- βΈοΈΒ k0s, k3s ΠΈ microk8s Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ² Kubernetes
- βΈοΈΒ ΠΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²ΡΠ΅ ΠΎΠ±ΡΠ°Π·Π° Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Kubernetes ?
kubectl apply -f deployment.yml
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ Kubernetes ΠΎΠ±ΡΠ°Π·Π° example.com/example-image:latest.
ΠΠΎΠ»Π΅ replicas: 3 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ Ρ Π²Π°Ρ Π±ΡΠ΄Π΅Ρ ΡΡΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ.
Π Π°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΡ docker run -d -p 80:80 example.com/example-image:latest, Ρ ΠΎΡΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ.
Traefik
Traefik – ΡΡΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ HTTP-ΠΏΡΠΎΠΊΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ Π½Π°Π³ΡΡΠ·ΠΊΠΈ.
ΠΠ½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π½ΠΎΠ²ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ².
- Docker ΠΠ°ΠΉΠ΄: Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Traefik β ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠΎΠΊΡΠΈ Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ²
- βΈοΈΒ Π£ΡΠ΅Π±Π½ΠΎΠ΅ ΠΏΠΎΡΠΎΠ±ΠΈΠ΅ ΠΏΠΎ Ingress Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ Π² Kubernetes
Traefik ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΡΡ ΠΌΠ΅ΡΠΊΠΈ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ ΠΈΠΌΠ΅Π½ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΎΠΊΡΠΈ-ΠΌΠ°ΡΡΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ ΠΊ ΡΠ΅ΡΠΈ Traefik.

Trivy
Trivy – ΡΡΠΎ ΡΠΊΠ°Π½Π΅Ρ ΠΎΠ±ΡΠ°Π·ΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ.
Π‘ΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½ Π΄Π°Π΅Ρ Π²Π°ΠΌ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Π°ΡΠΈ ΡΠ°Π±ΠΎΡΠΈΠ΅ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ.
Trivy Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² Π²ΠΈΠ΄Π΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° Docker.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π·Π° example-image:latest Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
docker run --rm \
-v trivy-cache:/root/.cache/ \
-v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy:latest image example-image:latest
Trivy ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π·Π΅, ΠΈΡΠ΅Ρ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΡΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ CVE, ΡΡΠ΅ΠΏΠ΅Π½Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΡΡΠΈ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π²Π΅ΡΡΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ FIXED VERSION, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Trivy.
ΠΠ°ΠΏΡΡΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ°Π·Π° – ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ²ΡΡΠΈΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ Π²Π°ΡΠΈΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΉ
Syft
Syft Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ SBOM (ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ) ΠΈΠ· ΠΎΠ±ΡΠ°Π·ΠΎΠ² Docker.
ΠΡΠΎ ΡΠΏΠΈΡΠΊΠΈ Π²ΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΠ‘ ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ Π² ΠΎΠ±ΡΠ°Π·.
Syft ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π°ΡΠ΄ΠΈΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΏΠΎΡΡΠ°Π²ΠΎΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ.
Docker ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ, Π½Π΅ ΠΎΡΠΎΠ·Π½Π°Π²Π°Ρ ΡΡΠΎΠ³ΠΎ.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π²Π°ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°Π·Π° Π΅ΡΠ΅ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ.
Dive
Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ Dive ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ² Docker.
ΠΠ±ΡΠ°Π·Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΏΡΠΎΠ·ΡΠ°ΡΠ½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΡΡΠΎΠ±Ρ Π²ΡΡΡΠ½ΠΈΡΡ, ΡΡΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ.
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π½ΡΡΡ Π²Π°Ρ ΡΠΈΡΠΊΡ, Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΠ°Π· ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.
Dive ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΏΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΎΠ±ΡΠ°Π·Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π΄ΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ»ΠΎΠΈ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ Π±ΡΠ» ΡΠΎΠ±ΡΠ°Π½ ΠΎΠ±ΡΠ°Π·.
ΠΡΠΎΡΠΌΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ»ΠΎΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π²Π½ΠΎΡΠΈΠΌΡΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π½Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ Dockerfile.
Flocker
Flocker – ΡΡΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠΎΠΌΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ ΠΈ ΠΈΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΡ ΠΎΡΡΠΎΠ²ΡΠ΅ ΡΡΠ΅Π΄Ρ, ΡΠΏΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΡΠΎΠΌΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Ρ ΠΎΡΡΠ°ΠΌΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ΅Π΄ΡΠ»Π»Π΅ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ².
Π’Π°ΠΊΠ°Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΡΠΎΠΌΠΎΠ² Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ.
Π’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΎΠΌΠ° Docker Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΊΠΈΠ½ΡΡΡ Ρ ΠΎΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½.
Flocker ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ΅Π΄Π°Ρ , ΡΠΎΡ ΡΠ°Π½ΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
ΠΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΊΠ°ΠΊ Amazon EBS, Google GCE ΠΈ OpenStack Block Storage.
Dokku
Dokku ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Docker Π΄Π»Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΊΠ°ΠΊ ΡΡΠ»ΡΠ³ΠΈ (PaaS).
ΠΠ½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Docker, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΠ΅ ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Git.
ΠΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Dokku ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ Π΄ΠΎΠΌΠ΅Π½Ρ, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ SSL, ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π΅ΡΠΎΠΊ Git ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
ΠΡΠΎ ΠΎΡΠ»ΠΈΡΠ½Π°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΠΌ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΠΌ, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Heroku ΠΈ Firebase, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° Dokku ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ Π±Π΅Π· ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΠΎΠ½ΠΊΠΎΡΡΠ΅ΠΉ ΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΈ ΡΠΈΠΊΡΠΎΠ² ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π° Π±Π°Π·Π΅ Git.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Dokku Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Git remote ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ git push Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅, ΡΠ°ΠΊ ΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° CI.
Hadolint
Hadolint – ΡΡΠΎ Π»ΠΈΠ½ΡΠ΅Ρ Dockerfile, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΡΠ°ΠΏΠΎΠ² ΡΠ±ΠΎΡΠΊΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠΌ Π»ΡΡΡΠΈΠΌ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°ΠΌ.
ΠΠ°ΠΏΡΡΠΊ Hadolint ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΠΎΠ±ΡΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ Π²Π°ΡΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ.
Hadolint ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ShellCheck Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ shell-ΡΠΊΡΠΈΠΏΡΠΎΠ² Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ ΠΏΠΎ Π·Π°ΠΏΡΡΠΊΡ Dockerfile.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Hadolint ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉΒ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ, ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π· Docker, hadolint/hadolint.
ΠΠ°ΡΠ½ΠΈΡΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΊΠ°Π·Π°Π² ΠΏΡΡΡ ΠΊ Dockerfile Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΡ Hadolint:
π³Β dockle: Π»ΠΈΠ½ΡΠ΅Ρ + ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΠ±ΡΠ°Π·ΠΎΠ² Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ
hadolint Dockerfile

ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Docker – ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², Π½ΠΎ ΠΎΠ½ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΅ΡΠ΅ Π»ΡΡΡΠ΅ Π² ΠΏΠ°ΡΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ.
ΠΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Ρ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ²ΡΡΠΈΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ Π²Π°ΡΠΈΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ², ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² Π²Π°ΡΠΈΡ Docker-ΡΠ°ΠΉΠ»Π°Ρ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ.
![]()
