Устранение ошибки 'zsh: command not found: docker-compose' с Docker Compose

DockerBeginner
Практиковаться сейчас

Введение

Docker Compose – это важный инструмент для управления многоконтейнерными приложениями Docker. Эта лабораторная работа проведет вас через решение распространенной ошибки "zsh: command not found: docker-compose", с которой сталкиваются многие пользователи при начале работы с Docker Compose.

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

Понимание Docker и Docker Compose

Прежде чем приступить к устранению неполадок, давайте разберемся, что такое Docker Compose и почему он важен в экосистеме Docker.

Что такое Docker?

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

Что такое Docker Compose?

Docker Compose – это инструмент для определения и запуска многоконтейнерных приложений Docker. С помощью Docker Compose вы используете YAML-файл для настройки сервисов, сетей и томов вашего приложения. Затем, с помощью одной команды, вы можете создать и запустить все сервисы из вашей конфигурации.

Давайте проверим, правильно ли установлен Docker в нашей системе:

docker --version

Вы должны увидеть вывод, похожий на этот:

Docker version 20.10.21, build baeda1f

Это подтверждает, что Docker установлен и готов к использованию. Теперь давайте попробуем запустить Docker Compose, чтобы увидеть, установлен ли он:

docker-compose --version

Если Docker Compose не установлен, вы увидите ошибку:

zsh: command not found: docker-compose

Это сообщение об ошибке является основным предметом нашей лабораторной работы – мы устраним неполадки и исправим эту проблему в следующих шагах.

Зачем использовать Docker Compose?

Docker Compose предлагает несколько преимуществ для управления многоконтейнерными приложениями:

  1. Упрощает конфигурацию: Определите весь стек вашего приложения в одном YAML-файле.
  2. Обеспечивает согласованность: Запускайте одну и ту же настройку приложения в нескольких средах.
  3. Управляет зависимостями: Обрабатывайте порядок запуска сервисов и взаимодействие между контейнерами.
  4. Повышает производительность: Экономьте время с помощью простых команд для управления всем жизненным циклом вашего приложения.

На следующем шаге мы установим Docker Compose и решим ошибку "command not found".

Установка Docker Compose

Теперь, когда мы понимаем, что такое Docker Compose, давайте установим его в нашей системе, чтобы решить ошибку "command not found".

Загрузка бинарного файла Docker Compose

Первый шаг – загрузка бинарного файла Docker Compose. Официальный бинарный файл Docker Compose доступен на GitHub. Мы будем использовать команду curl для его загрузки:

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

Эта команда загружает бинарный файл Docker Compose, соответствующий архитектуре вашей операционной системы, и сохраняет его в /usr/local/bin/docker-compose. Выполнение команды займет некоторое время, так как она загружает файл.

Сделать Docker Compose исполняемым

После загрузки бинарного файла нам нужно сделать его исполняемым:

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

Эта команда предоставляет разрешения на выполнение бинарному файлу Docker Compose.

Проверка установки

Теперь давайте проверим, что Docker Compose был установлен правильно:

docker-compose --version

Вы должны увидеть вывод, похожий на этот:

Docker Compose version v2.17.2

Если вы все еще видите ошибку "command not found", это означает, что каталог /usr/local/bin может отсутствовать в вашем системном PATH. Мы решим эту проблему на следующем шаге.

Понимание переменной PATH

Переменная PATH – это переменная окружения в Linux, которая сообщает оболочке, какие каталоги следует искать для исполняемых файлов при выполнении команды. Чтобы просмотреть ваш текущий PATH, выполните:

echo $PATH

Вы должны увидеть список каталогов, разделенных двоеточиями (:). Если /usr/local/bin отсутствует в этом списке, это может объяснить, почему оболочка не может найти команду docker-compose.

На следующем шаге мы устраним неполадки и решим любые оставшиеся проблемы, которые могут помешать нам использовать Docker Compose.

Устранение ошибки "Command Not Found"

Если после установки вы все еще сталкиваетесь с ошибкой "zsh: command not found: docker-compose", давайте устраним некоторые распространенные причины и их решения.

Решение 1: Создание символической ссылки

Одним из распространенных решений является создание символической ссылки на бинарный файл Docker Compose в каталоге, который определенно находится в вашем PATH, например, /usr/bin:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Эта команда создает символическую ссылку (ярлык) на бинарный файл Docker Compose в каталоге /usr/bin, который обычно по умолчанию включен в системный PATH.

После создания символической ссылки попробуйте снова запустить Docker Compose:

docker-compose --version

Теперь вы должны увидеть информацию о версии Docker Compose без каких-либо ошибок.

Решение 2: Использование плагина Docker Compose (альтернативный метод)

В более новых версиях Docker Compose доступен как плагин. Если вы предпочитаете использовать этот метод, вы можете попробовать:

docker compose version

Обратите внимание на отсутствие дефиса между docker и compose. Если эта команда работает, это означает, что Docker Compose доступен как плагин, и вы можете использовать его с этим синтаксисом.

Решение 3: Добавление Docker Compose в ваш PATH

Если вы предпочитаете оставить Docker Compose в текущем местоположении, но символическая ссылка не работает, вы можете добавить каталог в свой PATH вручную:

echo 'export PATH=$PATH:/usr/local/bin' >> ~/.zshrc
source ~/.zshrc

Это добавляет /usr/local/bin в ваш PATH и немедленно применяет изменения к вашей текущей сессии.

Проверка

Независимо от того, какое решение вы использовали, убедитесь, что Docker Compose теперь работает правильно:

docker-compose --version

Вы должны увидеть вывод, похожий на:

Docker Compose version v2.17.2

Теперь, когда мы успешно установили и настроили Docker Compose, на следующем шаге мы создадим простой проект Docker Compose, чтобы протестировать нашу установку.

Создание простого проекта Docker Compose

Теперь, когда Docker Compose правильно установлен и работает, давайте создадим простой проект, чтобы протестировать нашу настройку. Мы создадим базовое веб-приложение с веб-сервером и базой данных Redis.

Создание каталога проекта

Сначала давайте создадим отдельный каталог для нашего проекта:

mkdir ~/project/docker-compose-test
cd ~/project/docker-compose-test

Создание файла Docker Compose

Теперь давайте создадим файл docker-compose.yml с помощью текстового редактора nano:

nano docker-compose.yml

Скопируйте и вставьте следующее содержимое в файл:

version: "3"
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
  redis:
    image: redis:alpine

Этот файл Docker Compose определяет две службы:

  • web: Веб-сервер Nginx, который будет обслуживать контент из локального каталога
  • redis: База данных Redis для кэширования или хранения данных сеанса

Нажмите Ctrl+O, затем Enter, чтобы сохранить файл, затем нажмите Ctrl+X, чтобы выйти из nano.

Создание HTML-контента

Давайте создадим простую HTML-страницу, которую будет обслуживать наш веб-сервис:

mkdir -p html
nano html/index.html

Скопируйте и вставьте следующее содержимое в файл:

<!DOCTYPE html>
<html>
  <head>
    <title>Docker Compose Test</title>
  </head>
  <body>
    <h1>Hello from Docker Compose!</h1>
    <p>If you can see this, your Docker Compose setup is working correctly.</p>
  </body>
</html>

Нажмите Ctrl+O, затем Enter, чтобы сохранить файл, затем нажмите Ctrl+X, чтобы выйти из nano.

Запуск проекта Docker Compose

Теперь давайте запустим наш проект Docker Compose:

docker-compose up -d

Флаг -d запускает контейнеры в фоновом режиме (detached mode). Вы должны увидеть вывод, похожий на:

Creating network "docker-compose-test_default" with the default driver
Pulling web (nginx:alpine)...
Pulling redis (redis:alpine)...
[...]
Creating docker-compose-test_web_1   ... done
Creating docker-compose-test_redis_1 ... done

Проверка работы служб

Давайте проверим, что наши службы работают правильно:

docker-compose ps

Вы должны увидеть вывод, похожий на:

           Name                         Command               State          Ports
------------------------------------------------------------------------------------
docker-compose-test_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp
docker-compose-test_web_1     /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8080->80/tcp

Доступ к веб-приложению

Теперь вы можете получить доступ к веб-приложению, открыв веб-браузер в интерфейсе LabEx и перейдя по адресу http://localhost:8080. Вы должны увидеть сообщение "Hello from Docker Compose!".

Альтернативно, вы можете использовать curl, чтобы проверить веб-сервер из командной строки:

curl http://localhost:8080

Вы должны увидеть HTML-контент, который мы создали ранее.

Остановка проекта Docker Compose

Когда вы закончите тестирование, вы можете остановить проект Docker Compose:

docker-compose down

Вы должны увидеть вывод, похожий на:

Stopping docker-compose-test_web_1   ... done
Stopping docker-compose-test_redis_1 ... done
Removing docker-compose-test_web_1   ... done
Removing docker-compose-test_redis_1 ... done
Removing network docker-compose-test_default

Поздравляем! Вы успешно установили Docker Compose, решили ошибку "command not found" и протестировали свою настройку с помощью простого многоконтейнерного приложения.

Резюме

В этой лабораторной работе вы узнали, как:

  1. Понять роль Docker Compose в управлении многоконтейнерными приложениями
  2. Установить Docker Compose в вашей системе
  3. Устранять неполадки и решать ошибку "zsh: command not found: docker-compose"
  4. Создавать и запускать простое многоконтейнерное приложение с использованием Docker Compose

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

Для дальнейшего обучения рассмотрите возможность изучения более продвинутых функций Docker Compose, таких как переменные окружения, сети, тома и масштабирование служб. Вы также можете узнать о Docker Compose в производственных средах и о том, как интегрировать его с конвейерами CI/CD.