在 Google 的容器优化操作系统上安装 docker/compose-bin 插件

在 Google 的容器优化操作系统上安装 docker/compose-bin 插件

我正在尝试在带有容器优化操作系统的 Google Cloud VM 上安装 docker/compose-bin 插件(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 "* Add an alias for docker-compose to the shell configuration file ..."
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 "* Pull container image for docker-compose ..."
docker pull docker/compose:${VERSION}

echo "* Done"
echo "* To use docker-compose, run 'source ~/.bashrc' or simply re-login"

取自https://gist.github.com/kurokobo/25e41503eb060fee8d8bec1dd859eff3

但我真的很想使用这个新插件。

答案1

可写和可执行挂载

  • /var/lib/{google,docker,toolbox}(有状态)
  • /var/lib/cloud(无国籍,,tmpfs2 MB)
  • /mnt/disks(无状态,,tmpfs256 KB)

/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
    

为了记录,我还将信息添加到提及的问题

答案2

好吧,我走错了路。Docker Compose 不是服务器插件,而是客户端插件。所以你只需要在你的 ~/.docker 上使用它。

在 COS(容器优化操作系统)中,/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 

相关内容