Como criar um pacote Snap que usa o Docker para extrair e executar imagens de um Docker?

1

Eu tenho uma imagem do Docker e uma ferramenta CLI. Quero criar um pacote Snap que puxe a imagem do Docker e execute-a no Docker local. Eu já tenho um snapcraft.yaml que instala a ferramenta cli. Estou tentando entender o que devo adicionar / editar para poder chamar ações do Docker.

Além disso, estou tentando entender se, nesse caso, o Docker deve ser instalado via Snap ou enquanto o Docker estiver instalado de alguma forma na máquina, tudo está bem? O que acontece quando não há o Docker instalado?

Pelo que encontrei no Snap Docs, preciso adicionar ao snapcraft.yaml a interface do docker para fornecer acesso ao soquete do Docker deamon, mas não consigo encontrar recursos para chamar os comandos do Docker ...

Este é o meu 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

Quando executo o teste-snap, recebo "/snap/test-snap/x6/command-test-snap.wrapper: 4: exec: docker: not found"

Obrigado!

ZNone
fonte

Respostas:

0

Encontrei o seguinte repositório dockerized-app-snap no GitHub que realmente me ajudou a criar um Snap que executa um aplicativo dockerzied por meio da interface de conteúdo compartilhada pelo snap docker.

Anexou meu snapcraft.yaml para quem tentar fazer algo semelhante:

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]

Você pode encontrar explicações gerais sobre as interfaces de encaixe (plugues e slots) aqui. Em resumo, uma interface consiste em uma conexão entre um slot e um plugue. O slot é o provedor da interface enquanto o plug é o consumidor. No meu caso, o encaixe do docker possui 2 interfaces que ele fornece (slots) que meu aplicativo consome (plugues) - a interface do docker no plug-dock do cli e a interface do conteúdo no plug-executáveis ​​do docker.

Em relação à pergunta se o Docker deve ser instalado via Snap. Como o snap do meu aplicativo usa as interfaces de encaixe do docker, a resposta é sim. Mas não tenho certeza se está em conflito com uma janela de encaixe instalada na máquina. será atualizado quando eu tiver a resposta.

Esperava ter ajudado alguém!

ZNone
fonte