Установка плагина docker/compose-bin на ОС Google Container Optimized

Вопрос или проблема

Я пытаюсь установить плагин 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 плагина:

  1. Файловая система COS: Важной особенностью Container Optimized OS является наличие только некоторых доступных для записи и исполнения каталогов. Они включают:

    • /var/lib/{google,docker,toolbox} – важно учесть, что эти каталоги являются стабильными (stateful).
    • /var/lib/cloud, /mnt/disks – временные каталоги, в которых изменения не сохраняются после перезагрузки.
  2. Установка Docker Compose как клиентского плагина: Операционная система используется для запуска Docker как контейнера, поэтому установка плагинов должна опираться на клиентскую часть.

  3. Инструкция по установке 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
  4. Для дополнительных пользователей: Если в системе работают несколько пользователей, каждый из них должен выполнить некоторые команды для настройки доступа к 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, а также обсуждения на соответствующих платформах, чтобы оставаться в курсе последних обновлений и практик.

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

Капча загружается...