- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我完全理解 Concourse 是无状态的,但是有没有办法重用已经拉取的 docker 镜像?就我而言,我构建了大约 10 个具有相同基础镜像的 docker 镜像,但每次触发构建时,Concourse 都会拉取基础镜像 10 次。
是否可以使用标准 docker 资源提取该图像一次并在以后重新使用它(至少在同一构建范围内)?
是的,应该可以使用自定义图像并在 sh 脚本中对其进行编码,但我不喜欢邀请自行车。
如果标准 docker 资源不允许这样做,是否可以以某种方式扩展它以启用此类行为?
--cache-from
没有帮助,因为 CI 大部分时间都在提取图像,而不是构建新层。
最佳答案
首先,一些 Concourse 理论(至少从 v3.3.1 开始):
人们经常谈论 Concourse 有一个“缓存”,但误解了它的含义。每个大厅工作人员在磁盘上都有一组卷,这些卷留在周围,形成一个卷缓存。此卷缓存包含已由资源 get
和 put
以及任务 outputs
填充的卷。
人们也经常误解 docker-image-resource
如何使用 Docker。您的 Concourse 安装没有运行全局 docker 服务器,实际上 Concourse 容器不是 Docker 容器,它们是 runC 容器。每个 docker-image-resource
进程(check
、get
、put
)都在其自己的 runC 容器中运行,其中有一个本地 docker 服务器正在运行。这意味着没有全局 docker 服务器正在拉取 docker 图像并缓存层以供进一步使用。
这意味着当我们谈论使用 docker-image-resource 进行缓存时,它意味着将图像加载或预拉到本地 docker 服务器中。
现在是优化构建时间的选项:
load_base
docker-image-resource
put
中的 load_base
参数告诉资源首先 docker load
图像(通过 get
检索)到其本地 docker 服务器,在构建通过 put
参数指定的图像。
当您需要将图像预填充到“docker 缓存”中时,这很有用。在您的情况下,您可能希望预加载 FROM
指令中使用的图像。这更有效,因为它使用 Concourse 自己的卷缓存仅拉取“base”一次,使其在执行 FROM
命令期间可供 docker 服务器使用。
您可以使用 load_base
如下:
假设你想构建一个自定义的 python 镜像,并且你有一个带有 ci/Dockerfile
文件的 git 存储库,如下所示:
FROM ubuntu
RUN apt-get update
RUN apt-get install -y python python-pip
如果您想在利用 Concourse 卷缓存 以及 Docker 镜像层缓存 的同时自动构建/推送此镜像:
resources:
- name: ubuntu
type: docker-image
source:
repository: ubuntu
- name: python-image
type: docker-image
source:
repository: mydocker/python
- name: repo
type: git
source:
uri: ...
jobs:
- name: build-image-from-base
plan:
- get: repo
- get: ubuntu
params: {save: true}
- put: python-image
params:
load_base: ubuntu
dockerfile: repo/ci/Dockerfile
cache
& cache_tag
docker-image-resource
put
中的 cache
和 cache_tag
参数告诉资源首先 < em>从你的远程源中拉一个特定的图像+标签,在构建通过你的 put 参数指定的图像。
当下拉图像比从头构建图像更容易时,这很有用,例如您的构建过程非常漫长,例如昂贵的编译
这不利用了 Concourse 的卷缓存,并利用了 Docker 的 --cache-from
功能(这有可能需要先执行 docker pull
) 在每次 put
期间。
您可以使用 cache
和 cache_tag
如下:
假设你想构建一个自定义的 ruby 镜像,你从源代码编译 ruby,并且你有一个带有 ci/Dockerfile
文件的 git 存储库,如下所示:
FROM ubuntu
# Install Ruby
RUN mkdir /tmp/ruby;\
cd /tmp/ruby;\
curl ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz | tar xz;\
cd ruby-2.0.0-p247;\
chmod +x configure;\
./configure --disable-install-rdoc;\
make;\
make install;\
gem install bundler --no-ri --no-rdoc
RUN gem install nokogiri
如果您想自动构建/推送此镜像,同时仅利用 Docker 镜像层缓存:
resources:
- name: compiled-ruby-image
type: docker-image
source:
repository: mydocker/ruby
tag: 2.0.0-compiled
- name: repo
type: git
source:
uri: ...
jobs:
- name: build-image-from-cache
plan:
- get: repo
- put: compiled-ruby-image
params:
dockerfile: repo/ci/Dockerfile
cache: mydocker/ruby
cache_tag: 2.0.0-compiled
如果你想提高构建 docker 镜像的效率,我个人认为 load_base
应该在大多数情况下使用。因为它使用资源 get
,它利用了 Concourse 卷缓存,并且避免了需要做额外的 docker pull
s。
关于docker - 大厅 CI : leverage docker image cache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44475165/
当我调用 png.Decode(imageFile) 时,它返回类型 image.Image。但我找不到将其转换为 image.NRGBA 或 image.RGBA 的记录方式,我可以在其上调用 At
image/jpeg 和 image/png 包有 Decode 和 Encode 函数,可以读取和写入 jpeg 和 png 图像,但 image/gif 包没有 - 只有 Decode 和 Dec
我正在尝试从一系列任意的非调色板图像创建动画 GIF。为了创建调色板图像,我需要以某种方式想出一个调色板。 // RGBA, etc. images from somewhere else var f
我在今年夏天的空闲时间使用 Go 镜像包进行一些练习。 package main import ( "os" "image" "image/png" "image/co
关闭。这个问题需要debugging details .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 1年前关闭。 Improve this question 今天
我正在尝试在 TilePane 中列出图像。当我尝试创建图像 new ImageView("address"); 时出现错误,地址如下: "file:D:/Chrysanthemum.jpeg/" 以
我有一个用于为画廊选择图像的表单,我希望允许用户仅选择 jpg、gif 和 png 图像格式。 现在,为了测试,我将图像的扩展名更改为 .bmp,例如“image1.bmp”,当我在输入文件中单击以选
我有创建图像的代码:(m_img 是 javafx.scene.image.Image) Image m_img = new Image("file:" + p_Fil.getAbsoluteFile
假设我有一个这样的 8 位灰度图像: var pixels []byte = ... width := 100 height := 100 如何将其转换为实现 image.Image 的东西? 最佳答
这段代码是我在localhost:8088 URL上的索引/主页的一部分,如果我想将用户发送到url localhost:8088/image/1,我应该写href='image/{{$image->
我正在尝试对图像进行简单的裁剪。这是代码 from PIL.Image import Image def get_image_half(image, half="upper"): if hal
我在这个问题上花了一整天,但在堆栈溢出中没有看到答案! 我试过了但是没用: >> pil_image = Image.frombytes('RGBA', wand_image.size, wa
所以,我是那些以始终使用最新版本的浏览器而自豪的人之一(当然 Internet Explorer 除外 - 我说的不是那个浏览器)。 我遇到了 this awesome CSS3 website详细介
如果 image_tag 无法从 url 加载图像,我想呈现默认图像: 因此,如果 image_tag 无法从 url 加载图像: 然后呈现默认值: 这将生成结果 HTML: 关于image -
我正在创建一个类似横幅的组件,并将图像设置为组件的背景,但我无法让它工作。我尝试了网上发布的不同建议,但没有成功,目前我不确定我的错误是否在 react 代码中,或者是 webpack 没有正确加载文
如何解决 Dart 中的这种歧义错误。 import 'dart:io'; import 'package:flutter/material.dart'; import 'package:camera
Center( child: CachedNetworkImage( imageUrl: "http:/ sosme link he
设置 www.website.com/sds/(index.htm) 以便鼠标悬停在不同位置时显示图像。 出于某种原因,当您将鼠标悬停在蓝色气球上时,图像 2.jpg 和 3.jpg(在蓝色气球上来回
社交网络在共享 URL 时可以很好地从网站中提取标题和描述,但对于图像,仍然需要创建自定义元标记:property="og:image" name="twitter:image" itemprop="
我正在尝试写一个简短的,它将读取一个 PNG 文件,并将一个 channel 与另一个 channel (R,G,B) 交换作为可能的选择。 但是,我无法找到如何从 image.At(x,y) 返回的
我是一名优秀的程序员,十分优秀!