如何创建使用Docker拉动并运行Docker映像的Snap软件包?

时间:2019-07-31 09:31:04

标签: docker snapcraft

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

此外,我想了解是否在这种情况下必须通过Snap安装Docker,或者只要以某种方式将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:未找到”

谢谢!

1 个答案:

答案 0 :(得分:1)

在GitHub上找到以下dockerized-app-snap repository,这确实帮助我创建了一个通过docker snap共享的内容界面运行dockerzied应用程序的Snap。

为尝试执行类似操作的任何人附加了我的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有两个供我的应用程序使用(插入)的(插槽)接口-docker-cli插件下的docker接口和docker-executables插件下的内容接口。

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

希望我帮助了某人!