ο»Ώ
ο»Ώ
ο»Ώ

πŸ—οΈ Π“Π°ΠΉΠ΄: ЭффСктивная оркСстрация ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² с Docker Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½-срСдС

НиТС β€” ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство для ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ коммСнтариями.

1️⃣ Π’Ρ‹Π±ΠΎΡ€ инструмСнта оркСстрации

Docker прСдоставляСт Π±Π°Π·ΠΎΠ²Ρ‹Π΅ возмоТности, Π½ΠΎ для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½-оркСстрации трСбуСтся ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ:

βœ… Docker Swarm β€” встроСнный, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΌΠ°Π»Ρ‹Ρ… ΠΈ срСдних ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²
βœ… Kubernetes (K8s) β€” ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹ΠΉ стандарт, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… систСм
βœ… Nomad (ΠΎΡ‚ HashiCorp) β€” лСгковСсная Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°

πŸ‘‰ Для быстрого старта ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Swarm, для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… систСм β€” Kubernetes.

2️⃣ АрхитСктура кластСра

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ:

β€’ 3 manager-Π½ΠΎΠ΄Ρ‹ (quorum, HA)
β€’ 2+ worker-Π½ΠΎΠ΄Ρ‹
β€’ overlay-ΡΠ΅Ρ‚ΡŒ
β€’ load balancer (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ nginx, HAProxy)
β€’ private registry (Harbor, GitLab Registry)

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ кластСра:

docker swarm init --advertise-addr MANAGER_IP
docker swarm join --token <join-token> MANAGER_IP:2377

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ overlay-сСти:

docker network create --driver overlay --attachable my-overlay

---

3️⃣ Π Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ сСрвисов

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ docker-compose.yml (вСрсии 3 для Swarm):

version: '3.9'

services:
  web:
    image: mycompany/webapp:latest
    replicas: 5
    deploy:
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
    networks:
      - frontend
    ports:
      - "80:80"

networks:
  frontend:
    driver: overlay

Запуск:

docker stack deploy -c docker-compose.yml mystack

---

4️⃣ Zero-Downtime Updates

Π”ΠΎΠ±Π°Π²ΡŒ healthcheck Π² Dockerfile:

HEALTHCHECK --interval=30s --timeout=10s \
  CMD curl -f http://localhost/health || exit 1

Π’ docker-compose.yml ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ update_config β†’ обновлСния происходят Π±Π΅Π· Π΄Π°ΡƒΠ½Ρ‚Π°ΠΉΠΌΠ° (ΠΏΠΎ 2 ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 10s, с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ healthcheck).

---

5️⃣ Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

docker swarm unlock-key
docker swarm join-token manager
docker node ls

Бэкап Raft:

docker container stop $(docker container ls -q --filter name=swarm)
cp -r /var/lib/docker/swarm ~/swarm-backup


6️⃣ ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

βœ… Prometheus + Grafana β€” ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ
βœ… ELK Stack / Loki β€” Π»ΠΎΠ³ΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запуска cAdvisor:

docker run -d \
  -p 9323:9323 \
  --name cadvisor \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  google/cadvisor:latest


7️⃣ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

β€’ Запуск ΠΎΡ‚ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ:

USER appuser

β€’ Read-only root filesystem:

deploy:
  read_only: true

β€’ ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ capability:

deploy:
  cap_drop:
    - ALL

β€’ Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² (Trivy):

trivy image mycompany/webapp:latest

β€’ НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ latest Ρ‚Π΅Π³:

image: mycompany/webapp:1.3.2


8️⃣ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Dockerfile

βœ… multi-stage build
βœ… ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉ слои
βœ… Π΄Π°Π½Π½Ρ‹Π΅ β€” Π²ΠΎ внСшниС volume

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ multi-stage:

FROM node:18 AS build
WORKDIR /app
COPY . .
RUN npm install && npm run build

FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html


9️⃣ Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сСкрСтами

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСкрСта:

echo "my-secret-value" | docker secret create db_password -


ИспользованиС в docker-compose.yml:

secrets:
  - db_password


Π’ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ доступно ΠΊΠ°ΠΊ /run/secrets/db_password.

πŸ”Ÿ CI/CD

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° (GitLab):

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - docker build -t registry.example.com/myapp:$CI_COMMIT_SHA .
    - docker push registry.example.com/myapp:$CI_COMMIT_SHA

deploy:
  stage: deploy
  script:
    - docker service update --image registry.example.com/myapp:$CI_COMMIT_SHA mystack_web


🎯 Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ЭффСктивная оркСстрация =

βœ… грамотная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°
βœ… rolling updates + healthchecks
βœ… Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ (secrets, cap_drop, read_only)
βœ… ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
βœ… CI/CD интСграция
βœ… рСгулярный бэкап

πŸ‘‰ Swarm = быстрый старт, Kubernetes = ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.




Docker
Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ: Π’Ρ‡Π΅Ρ€Π°, 23:21
0
8

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ

ο»Ώο»Ώο»Ώο»Ώο»Ώ
ο»Ώ
НавСрΡ