В дополнение к k8s, docker-compose также является хорошим выбором для оркестровки контейнеров.
В дополнение к k8s, docker-compose также является хорошим выбором для оркестровки контейнеров.

Предисловие

С развитием микросервисной архитектуры технология контейнеризации стала важной частью разработки приложений. Docker, одна из самых популярных платформ контейнеризации, делает развертывание приложений и управление ими более гибкими.

Обычно я использую контейнеры Docker для развертывания одного небольшого приложения, поэтому использование команд Docker может удовлетворить потребности запуска, остановки, эксплуатации и обслуживания. Но для нескольких контейнеров в приложении необходимы некоторые инструменты для организации этих контейнеров.

k8s — наиболее часто используемый инструмент управления контейнерами, о котором мы слышали.,Но для отдельных разработчиков,k8s слишком тяжеловесен,Содержит множество сложных компонентов.,от обученияи Развертывание занимает определенное время.истоимость ресурса。Так что это просто и легко в использованииdocker-composeЭто становится относительно хорошим выбором。

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 должны иметь отступ в соответствии с уровнем конфигурации.

конфигурация Yaml

Давайте возьмем пример из docker-compose.yaml, чтобы продемонстрировать, как писать конфигурацию:

Язык кода: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  # Стратегия перезапуска контейнера

Параметры конфигурации описаны ниже:

  1. версия: укажите версию файла Docker Compose. Обычно используются версии «2» и «3».
  2. службы: определяет все службы приложения, каждая служба содержит ряд конфигураций.
  3. service_name: уникальное имя каждой службы, которое можно настроить.
  4. изображение: указывает используемый образ Docker, который может включать теги (например, последний).
  5. build: указывает путь к файлу Dockerfile службы сборки, включая контекст и необязательный файл dockerfile.
  6. порты: определяет сопоставление портов между контейнером и хостом в формате хост_порт:контейнер_порт.
  7. среда: установите переменные среды, вы можете использовать формат пары ключ-значение.
  8. тома: настройте тома данных, используемые для сохранения данных, в формате хост_путь:контейнер_путь.
  9. Сети: укажите сеть, к которой подключена служба. Вы можете настроить имя сети.
  10. depend_on: определяет порядок запуска служб, чтобы гарантировать, что зависимые службы запускаются перед текущей службой.
  11. перезапуск: Определите стратегию перезапуска контейнера, например «нет», «всегда», «при сбое».

создать зеркальную операцию

Вышеизложенное — чисто теоретические знания. Здесь я буду использовать docker-compose для создания контейнерного приложения с 1 Nginx + 2 Tomcat.

Сначала создайте каталог проекта и создайте в нем новый файл docker-compose.yaml, где nginx использует порт 80, а tomcat — порт 8080.

Язык кода:yaml
копировать
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.

1. Проверьте конфигурацию

Как упоминалось ранее, файлы yaml имеют требования к иерархической спецификации, поэтому как узнать, соответствует ли наш yaml спецификациям? Мы можем выполнить настроенную команду проверки:

Язык кода:bash
копировать
docker-compose config -q

После выполнения выдает сообщение о том, что возникла проблема с файлом конфигурации.

Перейдите к файлу конфигурации, чтобы проверить, нет ли проблем с отступами портов. Измените его и выполните снова. Если вывод не отображается, это означает, что конфигурация в порядке.

2. Создайте контейнер на основе yml.

Затем приступайте к сборке контейнера. Этот принцип также выполняется с использованием Dockerfile, указанного в yaml.

Язык кода:bash
копировать
docker-compose build

Процесс строительства представлен на рисунке:

После создания вы можете увидеть больше изображений, начиная с Compose.

3. Запустите все контейнеры в фоновом режиме.

С помощью image вы можете запустить контейнер на основе образа.

Язык кода:bash
копировать
docker-compose up -d

-d означает фоновый запуск. Вы можете просмотреть информацию о запущенном контейнере через docker ps:

Приведенную выше команду необходимо выполнить только один раз, а docker-compose связывается с группой контейнеров через файл yaml. Следующим шагом будет управление этим набором контейнеров посредством компоновки.

составлять контейнерные операции

Чаще всего мы используем запуск и остановку контейнеров.

Запуск и остановка контейнеров

Язык кода:bash
копировать
docker-compose restart
docker-compose start
docker-compose stop

Как показано на рисунке, точно так же, как мы используем docker для запуска одной команды, docker-compose запускает группу контейнеров через файл yaml.

Прекратить удаление всех контейнеров

Затем удалите все контейнеры, но после удаления вам останется только запустить контейнеры в фоновом режиме, и этап построения образа не требуется.

Язык кода:bash
копировать
docker-compose down

Прочие операции

Наконец, есть еще несколько команд, которые можно сравнить с командами докера.

Язык кода:bash
копировать
# Войдите в контейнер
docker-compose exec идентификатор контейнера
# Просмотреть все запущенные контейнеры
docker-compose ps 
# Просмотр процессов контейнера
docker-compose top
# Просмотр журналов вывода контейнера
docker-compose logs идентификатор контейнера

Заключение

Из вышесказанного нетрудно увидеть, что работа docker-compose с контейнерами аналогична работе docker. Существует только одна команда для управления группой контейнеров, а другая — для работы с одним контейнером. позволяет разработчикам, знакомым с docker, быстро начать работу с docker-compose.

В то же время docker-compose больше подходит для разработки и тестирования небольших проектов, а K8s — это платформа оркестрации контейнеров, предназначенная для производственных сред и подходящая для крупномасштабных и сложных сценариев применения.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose