如何创建一个使用 Docker 拉取和 运行 一个 Docker 图像的 Snap 包?
How to create a Snap package that uses Docker to pull and run a Docker images?
我有一个 Docker 图像和一个 cli 工具。我想创建一个 Snap 包来拉取 Docker 图像并在本地 Docker 上 运行 它。
我已经有一个安装 cli 工具的 snapcraft.yaml。我正在尝试了解我应该 add/edit 做什么,以便我可以调用 Docker 操作。
此外,我想了解在这种情况下是否必须通过 Snap 安装 Docker,或者只要 Docker 以某种方式安装在机器上就一切正常吗?如果没有安装 Docker 会怎样?
根据我在 Snap Docs 上找到的内容,我需要将 snapcraft.yaml 添加到 docker interface 以便它提供对 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: 未找到
谢谢!
在 GitHub 上发现了以下 dockerized-app-snap repository,这确实帮助我创建了一个 Snap,其中 运行 是一个 dockerzied 应用程序,通过 GitHub 共享的内容界面=24=] 快照。
附上我的 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 个它提供的接口(插槽),我的应用程序使用(插件)- docker-cli 插件下的 docker 接口和内容接口在 docker-可执行文件插件下。
关于 Docker 是否必须通过 Snap 安装的问题。因为 my-app snap 使用 docker snap 接口,所以答案是肯定的。但我不确定它是否与机器上安装的 docker 冲突。当我有答案时会更新。
希望我能帮到别人!
我有一个 Docker 图像和一个 cli 工具。我想创建一个 Snap 包来拉取 Docker 图像并在本地 Docker 上 运行 它。 我已经有一个安装 cli 工具的 snapcraft.yaml。我正在尝试了解我应该 add/edit 做什么,以便我可以调用 Docker 操作。
此外,我想了解在这种情况下是否必须通过 Snap 安装 Docker,或者只要 Docker 以某种方式安装在机器上就一切正常吗?如果没有安装 Docker 会怎样?
根据我在 Snap Docs 上找到的内容,我需要将 snapcraft.yaml 添加到 docker interface 以便它提供对 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: 未找到
谢谢!
在 GitHub 上发现了以下 dockerized-app-snap repository,这确实帮助我创建了一个 Snap,其中 运行 是一个 dockerzied 应用程序,通过 GitHub 共享的内容界面=24=] 快照。
附上我的 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 个它提供的接口(插槽),我的应用程序使用(插件)- docker-cli 插件下的 docker 接口和内容接口在 docker-可执行文件插件下。
关于 Docker 是否必须通过 Snap 安装的问题。因为 my-app snap 使用 docker snap 接口,所以答案是肯定的。但我不确定它是否与机器上安装的 docker 冲突。当我有答案时会更新。
希望我能帮到别人!