【问题标题】:How to install certificates on docker images without dockerfile?如何在没有 dockerfile 的 docker 镜像上安装证书?
【发布时间】:2022-01-01 11:58:29
【问题描述】:

我的中间件团队在 azure devops 上有一个管道,它会定期从 docker hub 拉出一堆图像,并将其重新发布到我们的私有存储库中。

我想更改管道,不仅可以复制/粘贴图像,还可以安装我们的 CA 根证书。

发布管道由 3 个步骤组成:

  1. 一堆docker pull RemoteRepository.com/image:latest
  2. docker tag RemoteRepository.com/image:latest InternalACR.io/image:latest
  3. docker push InternalACR.io/image:latest

因为没有涉及dockerfile,所以我想知道是否可以保持这种状态。

这里推荐的方法是什么?

【问题讨论】:

  • 1) 最简单的方法是使用 Dockerfile。 2) 你可以使用 docker exec 然后 docker commit。您的根 CA 需要可供 Azure DevOps 访问。
  • 而且docker commit 基本上从来都不是最佳实践;每次生成新版本时,您都必须以完全相同的方式重复完全相同的步骤。您可以编写一个非常简单的 Dockerfile FROM remoterepository.com/image:latest(或特定于构建的标签),将 COPY 证书文件放到已知位置,然后设置您的 CI 系统以构建和推送图像。
  • 我实际上使用了近 100 个不同的基础镜像...有什么方法可以不用创建 100 个不同的 dockerfile?

标签: azure docker azure-devops azure-container-registry


【解决方案1】:

嗯...我实际上并没有在没有 dockerfile 的情况下这样做,但是我创建了一个模板文件并在管道上循环。像这样:Azure Pipeline to build and push docker images in batch?

【讨论】:

  • 这应该添加到您的问题中,因为这不是您问题的答案。
  • @JohnHanley 请发表您的评论作为答案,我不接受它并删除我的...如果您可以链接其他问题以获得完整的参考,我将不胜感激
【解决方案2】:

最简单且推荐的方法是使用 Dockerfile。获取现有容器然后对其进行修改以创建新容器是一项简单的任务。

例子:

FROM mcr.microsoft.com/dotnet/#{baseImage}# AS base

COPY RootCA-1.crt /usr/local/share/ca-certificates/
COPY RootCA-SubCA-1.crt /usr/local/share/ca-certificates/

RUN update-ca-certificates

您还可以运行现有容器,在容器运行时对其进行修改。然后,您可以将更改提交到新容器。

示例命令:

docker exec ...
docker cp ...
docker commit ...

有关 Azure Pipeline 的其他技术,请参阅此答案:

https://stackoverflow.com/a/70088802/8016720

【讨论】:

    猜你喜欢
    • 2021-03-06
    • 2023-01-10
    • 2022-01-08
    • 2021-08-15
    • 1970-01-01
    • 2021-11-23
    • 2020-01-25
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多