Вопрос или проблема
Я пытаюсь установить плагин docker/compose-bin на виртуальную машину Google Cloud с операционной системой Container Optimized OS (https://hub.docker.com/r/docker/compose-bin/tags).
Кто-нибудь добился этого?
Я понимаю, что docker запускается в виде контейнера, и думаю, что нужно установить бинарный плагин в соответствующую папку плагинов внутри контейнера. Я двигаюсь в правильном направлении?
Я могу использовать старую версию docker-compose (https://hub.docker.com/r/docker/compose/tags) в контейнере, используя этот скрипт и алиас:
#!/bin/bash
VERSION=${1:-1.27.4}
echo "* Добавляем алиас для docker-compose в файл конфигурации оболочки ..."
echo alias docker-compose="'"'docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$PWD:$PWD" \
-w="$PWD" \
docker/compose:'"${VERSION}"''"'" >> ~/.bashrc
echo "* Загружаем образ контейнера для docker-compose ..."
docker pull docker/compose:${VERSION}
echo "* Готово"
echo "* Чтобы использовать docker-compose, выполните 'source ~/.bashrc' или просто перезайдите"
взято из https://gist.github.com/kurokobo/25e41503eb060fee8d8bec1dd859eff3
Но я действительно хотел бы использовать новый плагин.
Доступные для записи и выполнения монтирования являются:
/var/lib/{google,docker,toolbox}
(состояние хранится)/var/lib/cloud
(бездисковый,tmpfs
, 2 МБ)/mnt/disks
(бездисковый,tmpfs
, 256 КБ)
/var/lib/{google,docker,toolbox}
кажется лучшим вариантом, а /var/lib/google
лучше, чем /var/lib/docker
, потому что у него есть o+x
(я предполагаю, что /var/lib/docker
нет o+x
по какой-то причине):
$ sudo curl -sSL \
https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 \
-o /var/lib/google/docker-compose
$ sudo chmod o+x /var/lib/google/docker-compose
$ mkdir -p ~/.docker/cli-plugins
$ ln -sf /var/lib/google/docker-compose \
~/.docker/cli-plugins/docker-compose
$ docker compose version
официальные инструкции по установке
где docker
ищет плагины
Альтернативно можно использовать docker
образ:
-
используя
alias
:~/.profile
:if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
~/.bashrc
:alias docker-compose="docker run --rm docker compose"
$ docker-compose version
-
используя функцию:
~/.profile
:docker() { if [ "$1" = compose ]; then command docker run --rm docker "$@" else command docker "$@" fi } export -f docker
$ docker compose version
-
используя скрипт:
/var/lib/google/bin/docker
:#!/bin/sh -eu if [ "$1" = compose ]; then /usr/bin/docker run --rm docker "$@" else /usr/bin/docker "$@" fi
~/.profile
:export PATH=/var/lib/google/bin:$PATH
$ sudo chmod o+x /var/lib/google/bin/docker $ docker compose version
Для протокола, я также добавил информацию в упомянутую проблему.
ОК, я был не на правильном пути. Docker compose не является серверным плагином, а клиентским. Так что он нужен только в вашем ~/.docker.
В COS (Container Optimized OS) директория /var/lib/docker доступна для записи и хранится, так что вы можете сохранить там бинарные файлы и создать символическую ссылку для каждого пользователя, который хочет его использовать.
Вот инструкции, которые сработали безупречно:
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
CLI_PLUGINS=/var/lib/docker/cli-plugins
mkdir -p $DOCKER_CONFIG
sudo mkdir -p $CLI_PLUGINS
sudo curl -SL https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64 -o $CLI_PLUGINS/docker-compose
sudo chmod -R 755 /var/lib/docker
ln -s $CLI_PLUGINS $DOCKER_CONFIG/cli-plugins
Благодаря https://github.com/docker/compose/issues/10463
Другим пользователям на том же компьютере нужно будет выполнить:
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
CLI_PLUGINS=/var/lib/docker/cli-plugins
mkdir -p $DOCKER_CONFIG
ln -s $CLI_PLUGINS $DOCKER_CONFIG/cli-plugins
Использование официального docker образа с docker-credential-gcr. Это позволяет использовать контейнеры из артефактория.
Ответ или решение
Установка плагина docker/compose-bin на ОС Container Optimized от Google требует внимательного подхода, учитывая специфику файловой системы этой ОС. Container Optimized OS (COS) разработана для обеспечения надежной работы контейнерных приложений, и ее файловая архитектура определяет, какие каталоги могут быть изменены пользователем.
Основные шаги для установки docker/compose-bin плагина:
-
Файловая система COS: Важной особенностью Container Optimized OS является наличие только некоторых доступных для записи и исполнения каталогов. Они включают:
/var/lib/{google,docker,toolbox}
– важно учесть, что эти каталоги являются стабильными (stateful)./var/lib/cloud
,/mnt/disks
– временные каталоги, в которых изменения не сохраняются после перезагрузки.
-
Установка Docker Compose как клиентского плагина: Операционная система используется для запуска Docker как контейнера, поэтому установка плагинов должна опираться на клиентскую часть.
-
Инструкция по установке Docker Compose плагина: Для корректной установки и работы Docker Compose выполните следующие действия:
# Определяем параметры конфигурации Docker DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} CLI_PLUGINS=/var/lib/docker/cli-plugins # Создаем необходимые директории mkdir -p $DOCKER_CONFIG sudo mkdir -p $CLI_PLUGINS # Скачиваем бинарный файл Docker Compose sudo curl -SL https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64 -o $CLI_PLUGINS/docker-compose # Устанавливаем права доступа sudo chmod -R 755 /var/lib/docker # Создаем символическую ссылку для плагина ln -s $CLI_PLUGINS $DOCKER_CONFIG/cli-plugins
-
Для дополнительных пользователей: Если в системе работают несколько пользователей, каждый из них должен выполнить некоторые команды для настройки доступа к Docker Compose:
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} CLI_PLUGINS=/var/lib/docker/cli-plugins mkdir -p $DOCKER_CONFIG ln -s $CLI_PLUGINS $DOCKER_CONFIG/cli-plugins
Заключение
Эти шаги помогут вам настроить плагин Docker Compose на вашей виртуальной машине Google Cloud с Container Optimized OS. Убедитесь, что все команды выполняются с учетом прав доступа, чтобы избежать неисправностей. Поддержка клиентских плагинов позволяет гибко управлять контейнерами без необходимости внесения изменений в саму серверную часть. Задача по интеграции Docker Compose на COS, как вы видите, обычно решается клиентским образом и требует только учета особенностей файловой системы данной ОС.
Если у вас возникли дополнительные вопросы или трудности, обязательно проверяйте актуальные форумы и официальные руководства, такие как документация Docker, а также обсуждения на соответствующих платформах, чтобы оставаться в курсе последних обновлений и практик.