Как создать пакет Snap, который использует Docker для загрузки и запуска образов Docker?

У меня есть изображение Docker и инструмент cli. Я хочу создать пакет Snap , который извлекает образ Docker и запускает его на локальном Docker. У меня уже есть snapcraft.yaml, который устанавливает инструмент cli. Я пытаюсь понять, что я должен добавить / отредактировать, чтобы я мог вызывать действия Docker.

Кроме того, я пытаюсь понять, если в таком случае Docker должен быть установлен через Snap или пока Docker каким-то образом установлен на машине, все в порядке? Что происходит, когда Docker не установлен?

Из того, что я нашел в Snap Docs, мне нужно добавить к своему snapcraft.yaml интерфейс докера , чтобы он предоставил доступ к Docker сокет deamon, но я не могу найти ресурсов для вызова команд 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"

Спасибо!

2
задан 31 July 2019 в 14:50

1 ответ

Найденный следующим dockerized-app-snap репозиторием на GitHub, который действительно помог мне создать Снимок, которые запускают 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]

Можно найти общее объяснение в Поспешных Интерфейсах (разъемы и слоты) здесь Короче говоря, интерфейс состоит из соединения между слотом и разъемом. Слот является поставщиком интерфейса, в то время как разъем является потребителем. В моем случае снимок докера имеет 2 интерфейса, которые он обеспечивает (слоты), которые использует мое-приложение (включается) - интерфейс докера под разъемом докера-cli и довольным интерфейс под разъемом исполняемых файлов докера.

Относительно вопроса, если Докер должен быть установлен с помощью Снимка. Поскольку снимок моего-приложения использует интерфейсы снимка докера, ответ это да. Но я не уверен, является ли это конфликт с докером, установленным на машине. обновит, когда у меня будет ответ.

Надеявшийся я помог кому-то!

1
ответ дан 2 December 2019 в 04:36

Другие вопросы по тегам:

Похожие вопросы: