Docker compose как узнать версию
Перейти к содержимому

Docker compose как узнать версию

  • автор:

Docker совет №25: Какую API версию docker compose использовать?

May 24, 2018 07:08 · 248 words · 2 minute read docker docker-compose

На сегодняшний день Docker Compose имеет 3 основные версии API (v1, v2 и v3). В зависимости от используемой версии вам могут быть доступны (или недоступны) некоторые полезные функции и возможности.

Наверняка вы обращали внимание, что в самом начале файла docker-compose.yml обычно присутствует строка version: ‘2’ или version: ‘3’ . Это и есть версия API Docker Compose!

Если вы не видите строки с явно заданной версии API, это означает что в вашем случае используется самая первая версия ( v1 ). Эта версия уже признана устаревшей и больше не рекомендуется к использованию. Вкратце, в первой версии не поддерживаются именованные тома, сети и некоторые аргументы сборки (build), полный список ограничений можно найти здесь.

Что касается второй и третьей версии API ( v2 / v3 ), то самая простая рекомендация — использовать самую последнюю (актуальную) версию, однако здесь уже нужно исходить из конкретных требований и особенностей вашего проекта. Например, если вы не можете (или не хотите) обойтись без конструкции volume_from , то третья версия API вам не подойдет, а если вы работаете с Docker Swarm, то нужно использовать только версию 3+.

Кроме того, в третьей версии API целая куча настроек использования CPU и памяти перенесена в свойство deploy . Полный список всех изменений и функционал версий v2 и v3 можно найти здесь.

Что касается исполняемого файла docker-compose , то его всегда нужно обновлять до последней актуальной версии — как минимум, они будут содержать исправление ошибок предыдущих версий.

На официальном сайте всегда можно просмотреть матрицу совместимости, чтобы узнать, совместима ли ваша версия API с конкретной бинарной версией docker-compose (да, это совершенно разные вещи).

Read more

© Copyright 2023 Yevhen Lebid

# Установка и настройка Docker Compose

Docker Compose — полезный инструмент, расширяющий функциональные возможности Docker. Он позволяет объединять несколько Docker-контейнеров во внутреннюю сеть для запуска более сложного проекта.

В некоторых случаях Docker Compose устанавливается при установке Docker и не требует дополнительных действий от пользователя. Но иногда его нужно устанавливать вручную.

В этой инструкции мы опишем установку Docker Compose на VPS с системами Ubuntu и CentOS. Эта инструкция — продолжение нашего предыдущего текста об установке Docker.

# Установка Docker Compose на Ubuntu

Устанавливать Docker Compose будем из официального репозитория на GitHub

(opens new window) . Сначала проверим номер доступной версии. На момент написания статьи это была 2.2.3. Скачиваем Docker Compose и сохраняем исполняемый файл в директории /usr/local/bin/docker-compose :

sudo curl -L "https://github.com/docker/compose/releases/download/2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 

Теперь зададим нужные разрешения для исполняемого файла:

sudo chmod +x /usr/local/bin/docker-compose 

Всё готово для начала работы Docker Compose. Проверим его версию:

docker-compose --version Docker Compose version v2.2.3 

Docker Compose установлен и готов к работе.

# Установка Docker Compose на CentOS

Установка Docker Compose на CentOS принципиально практически ничем не отличается от установки на Ubuntu. Используется тот же официальный репозиторий GitHub и та же страница последних релизов

(opens new window) . Основное отличие — синтаксис команд.

Сначала скачиваем последний релиз из репозитория и помещаем его в /usr/local/bin/docker-compose :

sudo curl -L "https://github.com/docker/compose/releases/download/2.2.3/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose 

После этого делаем файл исполняемым:

sudo chmod +x /usr/local/bin/docker-compose 

Готово! Нужная версия Docker Compose установилась и работает:

docker-compose –version docker-compose version 1.27.4, build 40524192 

Чтобы проверить работу Docker Compose, можно запустить первый пробный проект. Например, развернуть CMS WordPRess.

© Джино, 2003–2022. «Джино» является зарегистрированным товарным знаком.
Лицензия на телематические услуги связи №150549 от 09.03.2017.

Шпаргалка по работе с docker-compose

Обновлено

Обновлено: 22.10.2023 Опубликовано: 27.04.2022

В данной инструкции мы приведем различные примеры по работе с docker-compose без подробного описания принципа работы. Данный материал можно использовать в качестве шпаргалки.

Базовый шаблон

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

vi docker-compose.yml

:
image:
container_name:
hostname:
restart: unless-stopped
environment:
TZ: «Europe/Moscow»
networks:
— default

networks:
default:
ipam:
driver: default
config:
— subnet: 172.28.0.0/16

  • services — основной раздел, где мы будем создавать и описывать наши сервисы (контейнеры docker). В данном примере сервис один. Для добавления еще одного добавляем еще строчки .
    • название для нашего сервиса, на основе которого будет создан контейнер.
    • image — имя образа, который будет использоваться для создания контейнера.
    • container_name — имя, которое получен созданный контейнер.
    • hostname — имя хоста внутри контейнера.
    • restart — поведения контейнера при падении. В нашем примере мы указываем на необходимость автоматической перезагрузки, за исключением случаев, когда мы его сами остановили командой stop.
    • environment — задаем переменные окружения. В нашем примере только одна, которая указывает на часовой пояс (московское время).
    • networks — привязываем наш контейнер к сети. Опционально, но лучше определять самому подсеть. Это упрощает настройку некоторых сервисов, например, мы можем ограничить доступ для определенных подсетей и не желательно, чтобы подсети задавалась случайным образом.

    Сервисы

    В данном разделе рассмотрим примеры настроек сервисов (контейнеров). Синтаксис:

    1. Создание контейнера из готового образа. Образ указывается с помощью директивы image:

    * в данном примере будет взят образ nginx для поднятия контейнера.

    2. Сборка контейнера из Dockerfile. Для этого используем опцию build:

    build:
    context: ./web-server/
    args:
    buildno: 22042001

    • build — указание на необходимость сборки из Dockerfile. Пример создания последнего читайте в инструкции Создание собственного образа Docker.
    • context — путь, где нужно искать Dockerfile относительно места, где находится docker-compose файл.
    • buildno — номер для сборки.

    3. Проброс папок (volumes). Настраивается с помощью опции volumes:

    * в нашем примере мы смонтируем локальный каталог /data/mysql на хосте внутрь контейнера в качестве каталога /var/lib/mysql.

    Также мы можем смонтировать папку только на чтение, например:

    4. Работа с портами. Рассмотрим несколько вариантов работы с портами.

    а) Ports (внешняя публикация). С помощью данной опции мы можем указывать, на каких портах должен слушать контейнер и на какие порты должны пробрасываться запросы:

    * в данном примере наш контейнер будет слушать запросы на порту 8080 и передавать их внутрь контейнера на порт 80.

    Или можно прописать так:

    * в этом примере будет настроен проброс на порт 80. Внешний порт будет выбран docker автоматически.

    При необходимости прикрепить проброс с конкретному IP-адресу хостовой машины, используем нотацию:

    * хост docker будет слушать на порту 80 на адресе 192.168.15.15.

    б) Expose (внутрення публикация). Данная опция задает порт, на котором должно слушать приложение внутри контейнера, но проброса с внешнего адреса не будет — отправить запрос по сети на данный порт можно с другого контейнера:

    5. Переменные окружения. В нашей универсальной заготовке мы уже использовали одну системную переменную:

    environment:
    TZ: «Europe/Moscow»

    Чтобы передать несколько переменных, просто их перечисляем:

    environment:
    TZ: «Europe/Moscow»
    MYSQL_ROOT_PASSWORD=password

    Для каждого приложения есть свой набор системных переменных, которые оно понимает и интерпретирует. Например, MYSQL_ROOT_PASSWORD поймет СУБД и установит значение в качестве пароля для пользователя root.

    Также системные переменные можно передать не в сценарии docker-compose, а в файле .env — просто создадим этот файл в одной директории с файлом docker-compose.yml:

    6. Зависимости для контейнеров. Мы можем указать с помощью опции depends_on, от какого контейнера зависит сервис:

    * в конкретном примере, контейнер не запустится, пока не поднимется db.

    7. Переопределить команду. С помощью директивы command мы можем переопределить команду для запуска, например:

    command: [ «redis-server», «/usr/local/etc/redis/redis.conf» ]

    * в данном примере мы запустим redis-server с альтернативным конфигурационным файлом.

    Или можно написать так:

    command:
    — redis-server
    — /usr/local/etc/redis/redis.conf

    Но если нам понадобиться запустить несколько последовательных команд, рабочий вариант с использованием bash:

    command: bash -c «yarn install && yarn start»

    или если в контейнере нет bash:

    command: sh -c «yarn install && yarn start»

    8. Метки. С помощью опции labels мы можем указывать дополнительную информацию для ориентирования или фильтров при поиске контейнеров:

    * данные могут быть произвольные. Обратите внимание, что в качестве значений мы указали переменные, которые можно просто передать из системного окружения.

    9. Пользователь. Директива user позволяет задать конкретного пользователя, от которого будет запускаться и работать контейнер:

    10. Домашняя директория. Определяет положение по умолчанию, откуда будут выполняться команды.

    Healthcheck

    Данная директива, хоть и является частью сервиса, мы рассмотрим ее в отдельном разделе. Синтаксис:

    • test — наш скрипт, который должен вернуть 0, если все хорошо, или 1 — если все плохо.
    • interval — как часто запускать проверку.
    • timeout — как долго нужно ждать ответа.
    • retries — сколько раз тест должен вернуть отрицательный результат, чтобы контейнер перешел в состояние «unhealthy».

    1. Проверка работы веб-портала. Рассмотрим пример, когда сайт при правильной работы должен возвращать слово works:

    healthcheck:
    test: curl -s http://127.0.0.1 | grep works
    interval: 30s
    timeout: 2s
    retries: 10

    * в данном примере мы запросим у нашего сервера страницу по http и выведем строку, в которой есть слово works. Если такой строки не найдется, команда вернет код 1.

    2. Проверка СУБД mysql. Проверку можно выполнить с помощью запроса SELECT 1. В композ-файле это выглядит так:

    healthcheck:
    test: [«CMD», «mysql» ,»-h», «mysql», «-P», «3306», «-u», «root», «-e», «SELECT 1», «cache»]
    interval: 30s
    timeout: 2s
    retries: 10

    Networks

    Отдельно рассмотрим варианты сетевых настроек.

    Список сетей, созданных для docker можно увидеть командой:

    docker network ls

    Получить подробную информацию по сети можно командой:

    docker network inspect

    1. Указать определенную подсеть. Задается с помощью опции subnet в отдельной секции networks. В последней мы создаем конфигурацию для определенной сети (в данном примере, default). Для конкретного сервиса мы также задаем привязку к созданной сети default в подразделе networks:

    networks:
    default:
    ipam:
    driver: default
    config:
    — subnet: 172.28.0.0/16

    * где 172.28.0.0/16 — подсеть, в которой будут работать все контейнеры, которые привязаны к созданной сети default.

    2. Алиасы. Данная настройка позволит видеть контейнеры по альтернативным именам (по умолчанию, они обнаруживаются по имени контейнера). Настройка указывается в подразделе networks сервиса:

    * в данном примере наш контейнер будет также резолвиться по имени .

    3. Внешняя сеть. Если необходимо, чтобы наши контейнеры могли видеть по сети другие контейнеры, создаем сеть external:

    networks:
    dnet:
    external:
    name: dnet

    4. Статические IP-адреса. По docker идеологии все контейнеры должны получать IP-адреса автоматически. Но все же, метод для указания контейнерам статических адресов предусмотрен. Рассмотрим на примере:

    networks:
    vpcbr:
    driver: bridge
    ipam:
    config:
    — subnet: 172.28.0.0/24
    gateway: 172.28.0.1

    * в нашем примере будет создана подсеть 172.28.0.0/24, а контейнеру будет присвоен адрес 172.28.0.2.

    5. Добавить сопоставление имя — IP-адрес (на подобие локального файла hosts). С помощью данной настройки мы можем указать отдельно для контейнеров, в какой IP-адрес должен разрешаться определенный хост. Задается с помощью директивы extra_hosts:

    * в данном примере имени foo будет соответствовать адрес 1.2.3.4, а bar — 5.6.7.8.

    Запуск docker-compose

    Рассмотрим различные примеры выполнения команды docker-compose.

    1. Посмотреть версию:

    2. Создание и запуск контейнеров:

    docker-compose up -d

    * напомним, что в текущем каталоге находится созданный файл с названием docker-compose.yml.

    С указанием альтернатнативного файла docker-compose.

    docker-compose -f /foo/bar/other-docker-compose.yml up -d

    3. Перечитать файл docker-compose:

    docker-compose up -d

    * на самом деле, команда такая же, как для запуска. Система если определит, что есть изменения, пересоздаст контейнер.

    Перечитать и пересобрать контейнеры, если есть инструкция build:

    docker-compose up -d —build

    4. Остановить контейнеры.

    Только остановить контейнеры:

    Остановить контейнеры с удаление данных (в volumes):

    docker-compose down —volumes

    Возможные ошибки

    Network _default Error

    При попытке запустить compose получаем ошибку:

    Network _default Error
    failed to create network _default: Error response from daemon: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

    Причина: при запуске композа автоматически создается сеть с префиксом _default. Данная ошибка означает, что такую сеть не удалось создать, так как существует лимит на пулы IP-адресов и данный лимит был исчерпан.

    Решение: быстрее всего выполнить чистку docker от неиспользуемых сетей. Для этого выполняем команду:

    docker network prune

    Читайте также

    Другие инструкции, связанные с Docker:

    Docker Compose — Docker: Основы

    Docker Compose позволяет управлять набором контейнеров, каждый из которых представляет собой один сервис проекта. Управление включает в себя сборку, запуск с учетом зависимостей и конфигурацию. Конфигурация Docker Compose описывается в файле docker-compose.yml, лежащем в корне проекта.

    Пример файла docker-compose.yml

    # Версия схемы, которую мы используем. # Зависит от установленной версии docker # https://docs.docker.com/compose/compose-file/ version: "3" # Определяем список сервисов — services # Эти сервисы будут частью нашего приложения services: app: # Имя сервиса build: # Контекст для сборки образа, # в данном случае, текущая директория context: . # Имя Docker-файла из которого будет собран образ dockerfile: Dockerfile # Команда, которая будет выполнена после старта сервиса command: make start ports: # Проброс портов - "3000:8000" # Перечисляем тома (volumes) # Они будут подключены к файловой системе сервиса # Например, все что находится в . мы увидим в директории /app volumes: # Текущая директория пробрасывается в директорию /app внутри контейнера # Путь внутри контейнера (после двоеточия) обязательно должен быть абсолютным - ".:/app" - "/tmp:/tmp" # Сервис будет запущен, только после старта db depends_on: - db db: # Имя образа. Здесь мы используем базу данных Postgres image: postgres:latest environment: # А так задаются переменные окружения POSTGRES_PASSWORD: password volumes: - pgdata:/var/lib/postgresql/data volumes: pgdata: 

    Команды для работы с Docker Compose

    # Собирает сервисы, описанные в конфигурационных файлах docker compose build # Запускает собранные сервисы docker compose up # Запуск контейнеров на фоне с флагом -d docker compose up -d # Если какой-то из сервисов завершит работу, # то остальные будут остановлены автоматически docker compose up --abort-on-container-exit # Запустит сервис application и выполнит внутри команду make install docker compose run application make install # А так мы можем запустить сервис и подключиться к нему с помощью bash docker compose run application bash # С флагом --rm запускаемые контейнеры будут автоматически удаляться docker compose run --rm application bash # Останавливает и удаляет все сервисы, # которые были запущены с помощью up docker compose down # Останавливает, но не удаляет сервисы, запущенные с помощью up # Их можно запустить снова с помощью docker-compose start docker compose stop 

    Открыть доступ

    Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

    • 130 курсов, 2000+ часов теории
    • 1000 практических заданий в браузере
    • 360 000 студентов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *