Докеризация переопределила процесс развертывания и автоматизации в индустрии программного обеспечения. С момента своего появления Docker команда постоянно стремилась сделать автоматизированное развертывание бесшовным. Технология контейнеризации не просто обеспечивает быструю разработку приложений и эффективность, но также экономит время и значительные усилия. Непревзойденные возможности, такие как оркестрация, определение и запуск многоконтейнерных приложений, делают Docker излюбленным выбором разработчиков.
Контейнеры и образы Docker
Прежде чем углубляться в понимание Docker, необходимо освежить в памяти основы. Понять, как работает Docker, может быть непросто, если у вас нет опыта работы с ним. В этом разделе мы определим несколько понятий, которые важны для начинающих. Если вы считаете, что знакомы с этими понятиями, можете смело пропустить их и перейти к следующему разделу. Вы также можете ознакомиться с нашим подробным руководством, объясняющим фундаментальные концепции Docker.
-
Образы Docker
Образы Docker представляют собой набор файлов, доступных только для чтения. Создав образы Docker, вы не сможете их изменить, хотя их можно удалить. Мы используем образ Docker для создания одного или нескольких контейнеров Docker в соответствии с нашими потребностями. Чтобы проверить количество образов, запущенных в вашей системе, используйте команду:
|
1 |
$docker images |
Когда вы загружаете образы из удаленного реестра, такого как Docker Hub, вы скачиваете файлы и папки. Чтобы загрузить образ, используйте команду:
|
1 |
$docker pull (имя of the образа) |
-
Контейнеры Docker
Образы Docker — это шаблоны для контейнеров Docker. Технически контейнер Docker является экземпляром образа Docker. Представьте, что если образ Docker подобен родителю, то контейнер Docker — это ребенок. В отличие от образов Docker, которые создаются один раз, вы можете создать несколько контейнеров на основе одного образа. Чтобы проверить список образов, запущенных в вашей системе, используйте команду:
|
1 |
$docker ps |
Чтобы загрузить контейнер, используйте следующую команду:
|
1 |
$docker pull (имя of the контейнера) |
-
Как работают образы и контейнеры Docker
Образы и контейнеры Docker работают рука об руку, раскрывая весь потенциал Docker. Отдельный контейнер создается на основе образа Docker с помощью команды run. При создании контейнера Docker создается новый слой, известный как слой контейнера (Container Layer). Созданный слой содержит приложение и его зависимости. Каждый создаваемый вами контейнер имеет свой собственный слой контейнера для чтения/записи, и любые изменения, вносимые в контейнер Docker, автоматически отражаются на слое контейнера. Помните, что если вы решите удалить контейнер, вы также потеряете слой контейнера.
Встречайте Docker Compose
Docker Compose — это инструмент управления контейнерами, который позволяет настраивать и оркестровать все ваши контейнеры Docker в одном файле YAML. Запуск, остановка, а также создание связей между контейнерами и томов — все это становится проще с помощью этого инструмента.
-
Что делает Docker Compose?
Проще говоря, Docker Compose упрощает сложные задачи, устраняя конфликты и организационные проблемы. Он позволяет пользователям централизованно управлять различными контейнерами Docker. Другими словами, вместо того чтобы размещать все службы в одном большом контейнере, Docker Compose разбивает службу на несколько служб, чтобы пользователи могли легко получать к ним доступ и управлять ими.
В этом руководстве мы расскажем вам о шагах по установке текущей версии Docker Compose для управления многоконтейнерными приложениями на CentOS 7. Мы также рассмотрим некоторые базовые команды, необходимые для успешного использования этого программного обеспечения.
-
Как использовать Docker Compose
Использовать Docker Compose чрезвычайно просто, даже для новичков. Давайте рассмотрим трехэтапный процесс работы с Docker Compose:
1. Сборка: Сначала соберите образы в Dockerfile в соответствии с потребностями вашего проекта или загрузите их из реестра.
2. Определение: Далее вам нужно определить все компоненты служб в файле compose.yml.
3. Запуск: После определения компонентов пришло время запустить их с помощью команды docker-compose.
Предварительные требования
Прежде чем мы перейдем к установке Docker Compose на ваш сервер CentOS, убедитесь, что у вас есть:
- Пользователь без прав root с доступом sudo на сервере CentOS 7.
- Установленный Docker на вашем компьютере. Пожалуйста, обратитесь к этому руководству по тому, как установить и использовать Docker на Ubuntu 18.04.
Теперь все готово. Далее следуйте приведенным ниже шагам, чтобы установить Docker Compose на CentOS 7.
Шаг 1. Установка Docker Compose
Чтобы получить самую последнюю версию Docker Compose, следуйте инструкциям в документации Docker и скачайте исполняемые файлы из GitHub-репозитория Docker. Убедитесь, что у вас установлена последняя версия программного обеспечения, выполнив команду ниже:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
Чтобы сделать исполняемый файл запускаемым, установите следующие права доступа:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
Затем проверьте версию, чтобы убедиться в успешности установки:
|
1 |
$docker-compose --version |
Приведенный ниже код выведет установленную версию:
Затем вы можете запустить пример “Hello World”, используя установленный Docker Compose.
Шаг 2. Использование Docker Compose для запуска контейнера
В Docker Hub, публичном реестре Docker, есть образ “Hello World”, который можно использовать для демонстрации и тестирования. Он показывает, как запустить контейнер с помощью Docker Compose с минимальной конфигурацией. Сначала вам нужно создать директорию для нашего YAML-файла:
|
1 |
$mkdir hello-world |
Затем перейдите в эту директорию:
|
1 |
$cd hello-world |
Затем, используя предпочитаемый вами текстовый редактор, создайте YAML-файл. В этом руководстве мы будем использовать Vi:
|
1 |
$vi docker-compose.yml |
Нажмите i, чтобы перейти в режим вставки, затем введите в файл следующее:
|
1 2 |
my-test: image: hello-world |
Первая строка будет включена в имя контейнера. Вторая строка указывает программе, какой образ использовать для создания контейнера. docker-composeup будет искать локальный образ с именем hello-world, чтобы проверить его наличие при вводе команды. Чтобы выйти из режима вставки, нажмите ESC. Затем введите :x и нажмите ENTER, чтобы сохранить изменения и закрыть файл. Команду docker images можно использовать для ручной проверки наличия образов на вашем компьютере:
|
1 |
$ sudo docker images |
Если локальных образов вообще нет, отобразятся только заголовки столбцов:
Чтобы создать контейнер, выполните эту команду, все еще находясь в директории /hello-world directory:
|
1 |
$sudo docker-compose up |
При первом запуске команды, если локального образа с именем hello-world нет, он будет загружен из репозитория Docker Hub:
Чтобы убедиться в работоспособности установки, Docker Compose загружает образ, создает контейнер, подключает его и выполняет программу hello:
После этого выводится описание того, что было сделано:
Когда hello завершит свою работу, контейнер будет остановлен, и команда больше не будет выполняться в контейнере. При просмотре активных процессов будут отображаться заголовки столбцов. Однако контейнер hello-world не будет указан в списке, так как в данный момент он не работает:
|
1 |
$sudo docker ps |
Чтобы увидеть все контейнеры, а не только запущенные, используйте флаг -a:
|
1 |
$sudo docker ps -a |
Теперь, когда вы попробовали запустить контейнер, вы можете перейти к изучению некоторых основных команд Docker Compose.
Step 3: Docker Compose Commands
Для начала работы с Docker Compose в этом разделе будут рассмотрены основные команды, предоставляемые инструментом docker-compose. docker-compose — это команда, которая работает на уровне директорий. Создавая по одной директории для каждого контейнера и по одному файлу docker-compose.yml на директорию, вы можете запускать несколько групп контейнеров Docker на одном компьютере.
До сих пор вы запускали Docker Compose самостоятельно. Вы можете отключить его, нажав Ctrl-C. Это позволяет окну терминала отображать отладочные сообщения. Однако при работе в рабочей среде рекомендуется запускать docker-compose как службу. Опцию -d можно использовать как простой способ добиться этого:
|
1 |
docker-compose up -d |
Теперь docker-compose уходит в фоновый режим. Вашей группой контейнеров Docker (остановленных или запущенных) можно управлять с помощью следующей команды:
|
1 |
$sudo docker-compose ps -a |
The State контейнера будет отображаться как Exited, если он остановлен, как показано в примере ниже:
Для запущенного в данный момент контейнера будет отображаться:
|
1 2 3 4 |
Name Command State Ports --------------------------------------------------------------- nginx_nginx_1 nginx -g daemon off; Up 443/tcp, 80/tcp |
Вы можете остановить все запущенные контейнеры Docker в той же директории, где находится файл docker-compose.yml, который вы использовали для запуска группы Docker:
|
1 |
$docker-compose stop |
Примечание: если вам нужно завершить работу более принудительно, docker-compose kill также доступна.
В некоторых случаях контейнеры Docker могут сохранять свои старые данные внутри. Используйте команду rm, чтобы удалить все контейнеры из вашей группы контейнеров, если вы хотите начать с нуля:
|
1 |
$docker-compose rm |
Запуск любой из этих команд из другой директории, отличной от той, где находятся контейнер Docker и файл .yml, приведет к сообщению об ошибке:
|
1 2 3 4 5 6 |
ERROR: Не'удается найти подходящий конфигурационный файл в этом каталоге или любом родительском каталоге. Вы находитесь в правильном каталоге?? Поддерживаемые имена файлов: docker-compose.yml, docker-compose.yaml |
В этом разделе мы рассмотрели основы управления контейнерами с помощью Docker Compose. Как уже упоминалось, в следующем разделе вы сможете получить доступ к файловой системе Docker и запускать команды из командной строки внутри контейнера, если вам потребуется дополнительный контроль над вашими контейнерами.
Шаг 4. Доступ к файловой системе контейнера Docker
Можно запустить командную строку в контейнере и получить доступ к файловой системе контейнера с помощью docker exec, который является инструментом командной строки. В качестве примера запустите «Hello World» и посмотрите, сколько времени потребуется для выполнения команды docker exec. В рамках этого руководства можно использовать образ Nginx из Docker Hub. Создайте новую директорию с именем nginx и перейдите в нее:
|
1 2 |
mkdir ~/nginx cd ~/nginx |
Теперь у вас должен быть файл docker-compose.yml, который вы можете открыть в текстовом редакторе:
|
1 |
vi docker-compose.yml |
Затем добавьте в файл следующее:
|
1 2 |
nginx: image: nginx |
Пришло время закрыть приложение. Чтобы запустить контейнер Nginx в фоновом режиме, используйте следующую команду:
|
1 |
$sudo docker-compose up -d |
Docker Compose загрузит образ Nginx и запустит контейнер в фоновом режиме. Для продолжения вам потребуется ввести CONTAINER ID. Вы можете просмотреть все запущенные в данный момент контейнеры с помощью следующей команды:
|
1 |
$sudo docker ps |
Вы увидите следующее:
Если бы вы хотели изменить файловую систему внутри этого контейнера с помощью docker exec, вы бы использовали уникальный идентификатор контейнера (в данном случае f139d0d78ca7) для запуска оболочки внутри контейнера:
|
1 |
$sudo docker exec -it f139d0d78ca7 /bin/bash |
Интерактивный терминал можно открыть с помощью опции -t, в то время как /bin/bash предоставляет контейнеру оболочку bash. После этого вы увидите следующее приглашение bash для контейнера:
|
1 |
root@b86b6699714c:/# |
Внутри контейнера вы найдете командную строку. Перезапуск контейнера перезапишет любые внесенные вами изменения, если только вы не работаете в каталоге, который был сохранен как часть тома данных. Если вы привыкли работать со средствами командной строки Linux, вам следует знать, что большинство образов Docker создаются с использованием самых базовых дистрибутивов Linux.
Заключение
Мы рассмотрели шаги по установке текущей версии Docker Compose для управления многоконтейнерными приложениями на CentOS 7. Способность Docker Compose одновременно запускать и останавливать большое количество контейнеров впечатляет. Переход от шаблонов к готовым приложениям занимает считанные минуты. Таким образом, если ваша работа связана с одновременным запуском нескольких контейнеров, выбор в пользу Docker Compose — отличный вариант. Тем не менее, это не универсальное решение. Вы также можете найти более подходящие варианты в зависимости от ваших конкретных потребностей, например, Kubernetes.
Чтобы подробнее изучить возможности Docker Compose, вы можете обратиться к этим руководствам из нашего блога:
- Развертывание Laravel, Nginx и MySQL с помощью Docker Compose
- Как установить и настроить Docker Compose на Ubuntu 20.04
Приятной работы!






Комментарии
Комментариев пока нет. Будьте первым.