【问题标题】:Convert docker image into Cloud Foundry droplet将 docker 镜像转换为 Cloud Foundry droplet
【发布时间】:2021-02-13 13:05:16
【问题描述】:

有没有一种简单的方法可以将我的 docker 映像 转换为 Cloud Foundry Droplet?

什么不起作用:

docker save registry/myapp1 |gzip > myapp1.tgz
cf push myapp1 --droplet myapp1.tgz
LOG:    2021-02-13T12:36:28.80+0000 [APP/PROC/WEB/0] OUT Exit status 1
LOG:    2021-02-13T12:36:28.80+0000 [APP/PROC/WEB/0] ERR /tmp/lifecycle/launcher: no start command specified or detected in droplet

【问题讨论】:

    标签: docker cloud cloud-foundry


    【解决方案1】:

    如果您想在 Cloud Foundry 上运行 docker 映像,只需运行 cf push -o <your/image>。只要您的运营团队启用了该功能 (not a lot of reason to disable it) 和 you meet the requirements,Cloud Foundry 就可以本地运行 docker 映像。

    您可以通过运行cf feature-flag 并查找diego_docker enabled 行来检查是否启用了Docker 支持。如果显示为disabled,请与您的运营团队讨论启用它。

    通过这样做,您无需进行任何复杂的转换。映像只是直接在 Cloud Foundry 上运行。

    这并不能 100% 回答您的问题,但如果可能的话,我会推荐它。


    要尝试回答您的问题,我认为没有一种简单的方法可以进行这种转换。 docker save 的输出是一堆层。这与 droplet 不同,后者是包含一些特定文件夹的存档(应用程序位 + 由您的 buildpack 安装的内容)。我想你可以转换它们,但没有明确的方法来做到这一点。

    Cloud Foundry 使用 droplet 的方式与 Docker 映像不同,并且受到更多限制。液滴被提取到 Ubuntu Bionic(cflinuxfs3 根文件系统)之上的/home/vcap 中,然后应用程序从那里运行。您的 Droplet 只能包含将进入文件系统中这一位置的文件。

    对于 Docker 映像,您实际上可以拥有一个完全自定义的文件系统。

    因此,鉴于这种差异,我认为没有一种通用方法可以获取随机 docker 图像并将其转换为液滴。您可能做的最好的事情是使用一些受限制的 docker 图像集,例如从 Ubuntu Bionic 构建的那些,使用某些模式,提取运行您的应用程序所需的文件,将它们填充到将解压到 /home/vcap 之上的目录(即类似于一个水滴),tar gzip 并尝试使用它。

    docker save 的输出开始可能是个好主意。然后,您只需要从层的 tar 存档中提取所需的文件(即挖掘每一层,这是另一个 tar 存档并提取文件),然后将它们移动到类似于以下的目录结构中:

    ./
    ./deps/
    ./profile.d/
    ./staging_info.yml
    ./tmp/
    ./logs/
    ./app/
    

    ./deps 通常是 buildpack 安装所需依赖项的位置,./.profile.d/ 是您可以放置​​将在应用程序启动之前运行的脚本的位置,./app 是您的应用程序(大部分文件)将结束的位置。

    staging_info.yml,我不是 100% 肯定是必需的,但基本上可以分解为 {"detected_buildpack":"java","start_command":""}。您可以伪造 detected_buildpack 将其设置为任何值,然后 start_command 显然是要运行的命令(不过您可以稍后覆盖它)。

    我没有尝试这样做,因为cf push -o 更容易,但如果cf push -o 不是一个选项,你可以试一试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2015-09-28
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多