9.1 Мікросервісна архітектура
Docker став незамінним інструментом для сучасної розробки. Він допомагає створювати, запускати і розгортати додатки в ізольованих контейнерах, що робить їх зручними, стабільними і легкими у використанні. У цій лекції ми розглянемо приклади, де Docker значно спрощує життя розробникам та адміністраторам.
Проблема
Розробка монолітних додатків часто викликає труднощі з обслуговуванням і масштабуванням. Будь-яка зміна в одній частині може вплинути на інші, що ускладнює оновлення і тестування.
Рішення з Docker
Docker дозволяє впровадити мікросервісну архітектуру, упаковуючи кожен сервіс в окремий контейнер. Це забезпечує незалежність і ізоляцію мікросервісів.
Приклад
Припустимо, у вас є додаток з трьома мікросервісами: користувачі, замовлення і оплата. З допомогою Docker можна створити три контейнери:
docker run -d --name users-service users-image
docker run -d --name orders-service orders-image
docker run -d --name payment-service payment-image
9.2 Безперервна інтеграція та доставка (CI/CD)
Проблема
Розробка, тестування і розгортання часто займають багато часу, особливо якщо середовища відрізняються між собою.
Рішення з Docker
Docker допомагає створити однакове середовище для всіх етапів розробки. Це гарантує, що додаток працюватиме однаково всюди — від розробки до продакшена.
Приклад
Налаштування CI/CD з Docker дозволяє автоматизувати збірку, тестування і розгортання:
Збірка образу:
docker build -t my-app .
Запуск тестів:
docker run my-app ./run-tests.sh
Розгортання:
docker push my-app:latest
ssh user@production-server "docker pull my-app:latest && docker run -d my-app"
9.3 Портативність і консистентність
Проблема
Часто застосунок працює на одній машині, але відмовляється запускатися на іншій через відмінності в налаштуваннях або версіях залежностей.
Рішення з Docker
Docker дозволяє упакувати застосунок з усіма його залежностями у контейнер, який гарантовано працює в будь-якому середовищі.
Приклад
За допомогою Dockerfile можна описати залежності та команди для запуску застосунку:
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]
Тепер застосунок стабільно працюватиме як на локальній машині, так і на сервері чи у хмарі.
9.4 Забезпечення безпеки
Проблема
Розгортання додатків може бути вразливим, особливо якщо використовуються сторонні бібліотеки та інструменти.
Рішення з Docker
Docker забезпечує ізоляцію контейнерів, що знижує ризики. Контейнери працюють незалежно, обмежуючи вплив на систему.
Приклад
Використовуйте параметри для обмеження ресурсів та покращення безпеки:
docker run -d --name secure-app --memory="512m" --cpus="1" --security-opt=no-new-privileges my-secure-app
9.5 Тестування та автоматизація
Проблема
Тестування в різних конфігураціях потребує часу і може вплинути на основне оточення.
Рішення з Docker
Docker дозволяє створювати ізольовані тестові оточення, не впливаючи на основну систему.
Приклад
Приклад запуску бази даних та застосунку у тестовому оточенні:
docker run -d --name test-db -e POSTGRES_PASSWORD=mysecretpassword postgres
docker run -d --name test-app --link test-db:db my-app
9.6 Хмарні обчислення та масштабування
Проблема
Масштабування додатків у хмарі може бути складним і дорогим.
Рішення з Docker
Docker спрощує масштабування завдяки інтеграції з хмарними платформами, такими як AWS, Azure і Google Cloud.
Приклад
Використовуючи Docker і Kubernetes, можна легко налаштувати масштабування. Ось приклад yaml-файлу. Поки що може бути незрозуміло, але з часом ми у всьому розберемося.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 80
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ