如何创建使用 Docker 提取并运行 Docker 镜像的 Snap 包?

如何创建使用 Docker 提取并运行 Docker 镜像的 Snap 包?

我有一个 Docker 镜像和一个 cli 工具。我想创建一个折断拉取 Docker 映像并在本地 Docker 上运行它的软件包。我已经有一个安装 cli 工具的 snapcraft.yaml。我试图了解我应该添加/编辑什么,以便我可以调用 Docker 操作。

此外,我想了解在这种情况下是否必须通过 Snap 安装 Docker,或者只要 Docker 以某种方式安装在机器上,一切就都正常了?如果没有安装 Docker,会发生什么?

根据我在 Snap Docs 上找到的信息,我需要将 snapcraft.yaml 添加到我的 snapcraft.yaml 中docker 接口因此它将提供对 Docker 守护进程套接字的访问,但我找不到任何有关如何调用 Docker 命令的资源……

这是我的 snapcraft.yaml:

version: '1.0.0'
summary: |
  Test CLI and Service
description: |
  Some Test Description.

grade: devel
confinement: strict

plugs:
  docker-cli:
    interface: docker
  docker-executables:
    interface: content
    target: $SNAP/docker-exes
    default-provider: docker:docker-executables

parts:
  jre:
    source-type: tar
    source: ./jre-source/zulu11.33.10-sa-jre11.0.4-linux_x64.tar.gz
    plugin: dump
  test-snap:
    source-type: local
    source: ./test-snap-source
    plugin: dump
apps:
  test-snap:
    command: docker ps
    plugs: 
      - docker
      - docker-executables
      - docker-cli

当我运行 test-snap 时,我收到“/snap/test-snap/x6/command-test-snap.wrapper: 4: exec: docker: not found”

谢谢!

答案1

发现以下内容dockerized-app-snap 存储库在 GitHub 上,它确实帮助我创建了一个 Snap,该 Snap 通过 docker snap 共享的内容界面运行一个 dockerzied 应用程序。

附上我的 snapcraft.yaml,供任何尝试做类似事情的人使用:

name: my-app
version: '1.0.0'
summary: |
  my-app Summary
description: |
  Some my-app Description.

grade: devel
confinement: strict

plugs:
  docker-cli:
    interface: docker
  docker-executables:
    content: docker-executables
    default-provider: docker
    interface: content
    target: docker-env

parts:
  environment:
    plugin: dump
    source: ./src/
    organize:
      'docker-wrapper' : bin/

apps:
  my-app:
    command: docker-wrapper docker <any docker command ps/pull/run>
    plugs: [docker-executables, docker-cli]

您可以找到点击此处获取接口(插头和插槽) 简而言之,接口由插槽和插头之间的连接组成。插槽是接口的提供者,而插头是消费者。在我的例子中,docker snap 有 2 个接口,它提供(插槽),my-app 使用(插头)——docker-cli 插头下的 docker 接口和 docker-executables 插头下的内容接口。

关于是否必须通过 Snap 安装 Docker 的问题。由于 my-app snap 使用 docker snap 接口,所以答案是肯定的。但我不确定它是否与机器上安装的 docker 冲突。当我有答案时会更新。

希望我能帮助到别人!

相关内容