С развитием микросервисной архитектуры технология контейнеризации стала важной частью разработки приложений. Docker, одна из самых популярных платформ контейнеризации, делает развертывание приложений и управление ими более гибкими.
Обычно я использую контейнеры Docker для развертывания одного небольшого приложения, поэтому использование команд Docker может удовлетворить потребности запуска, остановки, эксплуатации и обслуживания. Но для нескольких контейнеров в приложении необходимы некоторые инструменты для организации этих контейнеров.
k8s — наиболее часто используемый инструмент управления контейнерами, о котором мы слышали.,Но для отдельных разработчиков,k8s слишком тяжеловесен,Содержит множество сложных компонентов.,от обученияи Развертывание занимает определенное время.истоимость ресурса。Так что это просто и легко в использованииdocker-composeЭто становится относительно хорошим выбором。
docker-compose — это инструмент для определения и запуска нескольких Docker контейнер。Пользователи проходятdocker-compose.ymlизYAMLдокумент,Для настройки различных сервисов приложения,Включает услугииззеркало、переменные среды、сопоставление портов、Крепление томаи другая информация。использоватьdocker-compose,Разработчики могут запустить все службы всего приложения одним щелчком мыши.,Облегчает сложность ручного управления каждым контейнером.
Ранее я построил HDP-версию кластера Hadoop на сервере на основе Docker, в общей сложности с 5 узлами, включая 2 NameNode и 3 DataNode. Затем я использовал docker-compose, чтобы запустить и организовать пять узлов в приложение кластера больших данных. В этом приложении DN должен начинаться перед NN.
docker-compose можно установить с помощью yum,Настоящая трудность заключается в том, как написать Yaml-файл docker-compose.,По сути, этот файл похож на Dockerfile.,Освоив синтаксис, вы сможете легко писать,Но будьте осторожныизда:Файлы YAML должны иметь отступ в соответствии с уровнем конфигурации.
Давайте возьмем пример из docker-compose.yaml, чтобы продемонстрировать, как писать конфигурацию:
version: '3' # обозначение Compose Версия файла
services: # Определить услуги
service_name: # Название службы
image: image_name:tag # Зеркало б/у
build: # Необязательно, требуется для создания службы Dockerfile путь
context: ./path/to/dockerfile # Создать контекст
dockerfile: Dockerfile # Dockerfile имя
ports: # сопоставление портов
- "host_port:container_port"
environment: # переменные среды
- VARIABLE_NAME=value
- ANOTHER_VARIABLE=value
volumes: # Крепление тома
- host_path:container_path # общая папка
networks: # подключенная сеть
- network_name
depends_on: # Зависимости службы
- other_service_name
restart: always # Стратегия перезапуска контейнера
Параметры конфигурации описаны ниже:
Вышеизложенное — чисто теоретические знания. Здесь я буду использовать docker-compose для создания контейнерного приложения с 1 Nginx + 2 Tomcat.
Сначала создайте каталог проекта и создайте в нем новый файл docker-compose.yaml, где nginx использует порт 80, а tomcat — порт 8080.
version: '3'
services:
nginx:
build:
context: /root/app/dockerfile/nginx
dockerfile: Dockerfile
ports:
- "800:80"
depends_on:
- tomcat1
- tomcat2
restart: always
tomcat1:
build:
context: /root/app/dockerfile/tomcat
dockerfile: Dockerfile
ports:
- "8081:8080"
restart: always
tomcat2:
build:
context: /root/app/dockerfile/tomcat
dockerfile: Dockerfile
ports:
- "8081:8080"
restart: always
Вы можете создать образ самостоятельно, указав Dockerfile в build. Предыдущий Dockerfile, используемый nginx и tomcat, показан ниже:
Вы также можете напрямую использовать параметр изображения «изображение объекта», созданный ранее.,После написания изменения Yaml,Мы можем начать использовать Compose для управления набором контейнеров, определенных в yaml.
Как упоминалось ранее, файлы yaml имеют требования к иерархической спецификации, поэтому как узнать, соответствует ли наш yaml спецификациям? Мы можем выполнить настроенную команду проверки:
docker-compose config -q
После выполнения выдает сообщение о том, что возникла проблема с файлом конфигурации.
Перейдите к файлу конфигурации, чтобы проверить, нет ли проблем с отступами портов. Измените его и выполните снова. Если вывод не отображается, это означает, что конфигурация в порядке.
Затем приступайте к сборке контейнера. Этот принцип также выполняется с использованием Dockerfile, указанного в yaml.
docker-compose build
Процесс строительства представлен на рисунке:
После создания вы можете увидеть больше изображений, начиная с Compose.
С помощью image вы можете запустить контейнер на основе образа.
docker-compose up -d
-d означает фоновый запуск. Вы можете просмотреть информацию о запущенном контейнере через docker ps:
Приведенную выше команду необходимо выполнить только один раз, а docker-compose связывается с группой контейнеров через файл yaml. Следующим шагом будет управление этим набором контейнеров посредством компоновки.
Чаще всего мы используем запуск и остановку контейнеров.
docker-compose restart
docker-compose start
docker-compose stop
Как показано на рисунке, точно так же, как мы используем docker для запуска одной команды, docker-compose запускает группу контейнеров через файл yaml.
Затем удалите все контейнеры, но после удаления вам останется только запустить контейнеры в фоновом режиме, и этап построения образа не требуется.
docker-compose down
Наконец, есть еще несколько команд, которые можно сравнить с командами докера.
# Войдите в контейнер
docker-compose exec идентификатор контейнера
# Просмотреть все запущенные контейнеры
docker-compose ps
# Просмотр процессов контейнера
docker-compose top
# Просмотр журналов вывода контейнера
docker-compose logs идентификатор контейнера
Из вышесказанного нетрудно увидеть, что работа docker-compose с контейнерами аналогична работе docker. Существует только одна команда для управления группой контейнеров, а другая — для работы с одним контейнером. позволяет разработчикам, знакомым с docker, быстро начать работу с docker-compose.
В то же время docker-compose больше подходит для разработки и тестирования небольших проектов, а K8s — это платформа оркестрации контейнеров, предназначенная для производственных сред и подходящая для крупномасштабных и сложных сценариев применения.