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

У цій статті ми використаємо приклад програми для голосування Docker та розгорнемо його за допомогою Docker compose.
Docker Compose
За словами Docker Inc.
Compose - це інструмент для визначення та запуску багатоконтейнерних програм Docker. За допомогою Compose ви використовуєте файл YAML для налаштування служб програми. Потім за допомогою однієї команди ви створюєте та запускаєте всі служби з вашої конфігурації.Додаток для голосування
Представляємо найулюбленіший демонстраційний додаток для спільноти Docker “The Voting App”, ніби він взагалі потребує вступу. Це простий додаток, заснований на архітектурі мікропослуг, що складається з 5 простих сервісів.

- Voting-App : Фронтенд програми, написаної на Python, за допомогою якої користувачі віддають свій голос.
- Redis : база даних у пам’яті, що використовується як проміжне сховище.
- Працівник : Служба .Net, яка використовується для отримання голосів від Redis та зберігання у базі даних Postres.
- БД : база даних PostgreSQL, що використовується як база даних.
- 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.4
can може бути визначений у файлі середовища або може бути визначений у оболонці. Він використовується у файлі створення наступним чином:
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.