【问题标题】:How to create a Snap package that uses Docker to pull and run a Docker images?如何创建使用 Docker 拉取和运行 Docker 映像的 Snap 包?
【发布时间】:2019-12-08 18:50:25
【问题描述】:

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

此外,我想了解在这种情况下,Docker 是否必须通过 Snap 安装,或者只要 Docker 以某种方式安装在机器上,一切都好吗?没有安装 Docker 会怎样?

根据我在 Snap Docs 上找到的内容,我需要将 docker interface 添加到我的 snapcraft.yaml 中,以便它可以访问 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

当我运行测试快照时,我得到了 "/snap/test-snap/x6/command-test-snap.wrapper: 4: exec: docker: not found"

谢谢!

【问题讨论】:

    标签: docker snapcraft


    【解决方案1】:

    在 GitHub 上找到了以下 dockerized-app-snap repository,它确实帮助我创建了一个 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]
    

    你可以在Snap Interfaces(plugs and slots) here找到一般解释 简而言之,接口由插槽和插头之间的连接组成。插槽是接口的提供者,而插头是消费者。 在我的例子中,docker snap 有 2 个接口,它提供(插槽)my-app 使用(plugs) - docker-cli 插件下的 docker 接口和 docker-executables 插件下的内容接口。

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

    希望我能帮助到别人!

    【讨论】:

      猜你喜欢
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2017-04-24
      相关资源
      最近更新 更多