Вывод списка всех служб в стеке
На этом этапе вы научитесь выводить список всех служб, работающих в стеке Docker. Прежде чем мы сможем вывести список служб, нам нужно запустить стек. Поскольку Docker Compose не предустановлен, мы сначала установим его, а затем развернем простой стек.
Сначала установим Docker Compose. Мы скачаем бинарный файл и сделаем его исполняемым.
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Теперь, когда Docker Compose установлен, создадим простой файл docker-compose.yml
для определения нашего стека. Мы создадим файл с именем docker-compose.yml
в директории ~/project
.
nano ~/project/docker-compose.yml
Добавьте следующее содержимое в файл:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
app:
image: alpine:latest
command: sleep 3600
Этот файл определяет стек с двумя службами: web
, использующей образ nginx
, и app
, использующей образ alpine
. Служба web
сопоставляет порт 80 на хосте с портом 80 в контейнере. Служба app
просто выполняет команду sleep 3600
, чтобы контейнер оставался запущенным.
Сохраните файл и выйдите из редактора (Ctrl+X, Y, Enter в nano).
Теперь развернем стек с помощью команды docker stack deploy
. Мы назовем наш стек mystack
.
docker stack deploy -c ~/project/docker-compose.yml mystack
Эта команда считывает файл docker-compose.yml
и создает определенные в нем службы в виде стека Docker с именем mystack
. Вы должны увидеть вывод, указывающий на то, что службы создаются.
После развертывания стека вы можете вывести список всех служб в стеке, используя команду docker stack services
, за которой следует имя стека.
docker stack services mystack
Эта команда отобразит таблицу с информацией о службах в стеке mystack
, включая их идентификатор, имя, режим, количество реплик, образ и порты.
Вы должны увидеть вывод, похожий на следующий:
ID NAME MODE REPLICAS IMAGE PORTS
xxxxxxxxxxxx mystack_app replicated 1/1 alpine:latest
xxxxxxxxxxxx mystack_web replicated 1/1 nginx:latest *:80->80/tcp
В выводе перечислены службы mystack_app
и mystack_web
, что подтверждает, что они работают в рамках стека mystack
.