Практичний вступ до Docker Compose

Контейнери Docker відкрили широкий спектр можливостей для технічного співтовариства, клопоти з налаштуванням нового програмного забезпечення зменшились на відміну від старих часів, коли безлад потрібно було сортувати у важкому форматі, це скоротило час на встановлення та використання нового програмного забезпечення, яке врешті-решт зіграло важлива частина для техніків дізнаватися нові речі, розгортати їх у контейнер і смітити, коли закінчите. Все стало легким, і найкраще, що його відкритий код може використовувати кожен, хоча і має трохи кривої навчання.

Із незліченних можливостей була можливість впровадження складних технологічних стеків для наших додатків, які раніше були б сферою експертів. Сьогодні за допомогою контейнерів інженери-програмісти, що добре розуміють основні системи, можуть реалізувати складний стек, і чому б це не потреба години, фігура мови "Джек всіх професій" отримала вигадливе оновлення; “Господар деяких”, виходячи з потреб віку. Простіше кажучи, навички у формі Т.

Можливість визначити складний стек у файлі та запустити його за допомогою однієї команди, досить спокусливо. Хлопці з Docker Inc. вирішили назвати це Docker compose.

У цій статті ми використаємо приклад програми для голосування Docker та розгорнемо його за допомогою Docker compose.

Docker Compose

За словами Docker Inc.

Compose - це інструмент для визначення та запуску багатоконтейнерних програм Docker. За допомогою Compose ви використовуєте файл YAML для налаштування служб програми. Потім за допомогою однієї команди ви створюєте та запускаєте всі служби з вашої конфігурації.

Додаток для голосування

Представляємо найулюбленіший демонстраційний додаток для спільноти Docker “The Voting App”, ніби він взагалі потребує вступу. Це простий додаток, заснований на архітектурі мікропослуг, що складається з 5 простих сервісів.

  1. Voting-App : Фронтенд програми, написаної на Python, за допомогою якої користувачі віддають свій голос.
  2. Redis : база даних у пам’яті, що використовується як проміжне сховище.
  3. Працівник : Служба .Net, яка використовується для отримання голосів від Redis та зберігання у базі даних Postres.
  4. БД : база даних PostgreSQL, що використовується як база даних.
  5. Result-App : Фронтальна частина програми, написана в Node.js, відображає результати голосування.

У репозиторії для голосування є файл, який називається docker-compose.ymlцим файлом, і містить конфігурацію для створення контейнерів, виставлення портів, томів прив'язки та підключення контейнерів через мережі, необхідні для роботи програми для голосування. Звучить багато довго, docker runі docker network createкоманди в іншому випадку, docker compose дозволяє нам розмістити все це в одному файлі docker-compose у форматі yaml.

version: "3" services: vote: build: ./vote command: python app.py volumes: - ./vote:/app ports: - "5000:80" networks: - front-tier - back-tier result: build: ./result command: nodemon server.js volumes: - ./result:/app ports: - "5001:80" - "5858:5858" networks: - front-tier - back-tier worker: build: context: ./worker depends_on: - "redis" networks: - back-tier redis: image: redis:alpine container_name: redis ports: ["6379"] networks: - back-tier db: image: postgres:9.4 container_name: db volumes: - "db-data:/var/lib/postgresql/data" networks: - back-tier volumes: db-data: networks: front-tier: back-tier:

Git cloneта cdв репо додатку для голосування.

dockersamples / example-vote-app

приклад-голосування-додаток - Приклад програми Docker Compose github.com

Скласти час

З усім нашим додатком, визначеним в одному складеному файлі, ми можемо зітхнути з полегшенням, охолодитись і просто запустити додаток. Краса складання полягає в тому, що одна команда створює всі служби, підключає мережі (буквально), монтує всі томи і виставляє порти. Пора вітати upкоманду, вона виконує всі вищезазначені завдання. $ Docker-compose up

Після великої кількості "Витягніть завершено", сотні мегабайт і кілька хвилин (можливо, більше). . .

Вуаля, у нас запущено додаток для голосування.

Команда docker psперераховує всі запущені контейнери

$ docker ps -a --format="table {{.Names}}\t{{.Image}}\t{{.Ports}}" NAMES IMAGE PORTS voting_worker_1 voting_worker db postgres:9.4 5432/tcp voting_vote_1 voting_vote 0.0.0.0:5000->80/tcp voting_result_1 voting_result 0.0.0.0:5858->5858/tcp, 0.0.0.0:5001->80/tcp redis redis:alpine 0.0.0.0:32768->6379/tcp

Вищенаведена команда відображає всі запущені контейнери, відповідні зображення та відкриті номери портів.

До програми для голосування можна отримати доступ // // localhost: 5000

Так само до програми результатів голосування можна отримати доступ // // localhost: 5001

Кожен голос, поданий у програмі Voting, спочатку зберігається в базі даних Redis в пам'яті, службовець .Net отримує голос і зберігає його в БД Postgres, до якого доступний інтерфейс Node.js.

Скласти особливості

Композиція надає гнучкість використання назви проекту для ізоляції середовищ одне від одного, назва проекту є базовою назвою каталогу, що містить проект. У нашому додатку для голосування це позначається назвою контейнерів, voting_worker_1де votingє базовою назвою каталогу. Ми можемо встановити власне ім'я проекту, використовуючи -pпрапор, за яким йде власне ім'я.

Compose зберігає всі томи, що використовуються службами, визначеними у файлі складання, отже, дані не втрачаються при відтворенні контейнерів за допомогою docker-compose up. Ще однією цікавою особливістю є те, що відтворюються лише контейнери, які змінилися, контейнери, стан яких не змінився, залишаються недоторканими.

Ще однією цікавою особливістю є підтримка змінних у файлі створення, ми можемо визначати змінні у .envфайлі та використовувати їх у файлі docker-compose. Тут POSTGRES_VERSION=9.4can може бути визначений у файлі середовища або може бути визначений у оболонці. Він використовується у файлі створення наступним чином:

db: image: "postgres:${POSTGRES_VERSION}"

Код шпаргалки

Легко, як вітерець, запустити, зупинитись і пограти з композицією.

$ docker-compose up -d $ docker-compose down $ docker-compose start $ docker-compose stop $ docker-compose build $ docker-compose logs -f db $ docker-compose scale db=4 $ docker-compose events $ docker-compose exec db bash

Резюме

Docker Compose is a great tool to quickly deploy and scrap containers, the compose file can run seamlessly on any machine installed with docker-compose. Experimentation and learning technologies is just a Compose file away ;).

I hope this article helped in the understanding of Docker Compose. I’d love to hear about how you use Docker Compose in your projects. Share the knowledge, help it reach more people.