docker基于外部缓存加速构建方案

开启外部缓存

http://your_apt_cacher_ng_server:3142 是一个示例 URL,表示需要设置的 apt-cacher-ng 代理服务器的地址。apt-cacher-ng 是一个本地代理服务器,可以缓存从官方 APT 仓库下载的软件包,从而加速后续的下载过程,并减少带宽消耗。

如何设置和使用 apt-cacher-ng

以下是设置 apt-cacher-ng 代理服务器的步骤:

1. 安装 apt-cacher-ng 服务器

在你的本地机器或一个单独的服务器上安装 apt-cacher-ng

sudo apt-get update
sudo apt-get install apt-cacher-ng
2. 启动 apt-cacher-ng

安装完成后,apt-cacher-ng 服务会自动启动并监听端口 3142。通过以下命令确认它是否正在运行:

sudo systemctl status apt-cacher-ng

在/etc/docker/daemon.json中添加:

{"features": {"buildkit": true}
}
// 重启docker
systemctl restart docker
3. 配置 Dockerfile 使用 apt-cacher-ng 代理

在 Dockerfile 中,配置 APT 使用 apt-cacher-ng 代理。如果 apt-cacher-ng 服务器在本地主机运行,可以使用 host.docker.internal(Docker 在 macOS 和 Windows 上支持,Linux 需要设置具体的 IP)例如我下面的Dockerfile:

# syntax=docker/dockerfile:1.3
FROM {{ .BaseInfo.BaseImage }}{{ if .BaseInfo.Maintainer }}
LABEL maintainer="{{ .BaseInfo.Maintainer }}"
{{ end }}{{ if .BaseInfo.User }}
USER {{ .BaseInfo.User }}
{{ else }}
USER root
{{ end }}# 使用更快的 apt 源并配置 apt-cacher-ng 代理
RUN sed -i 's|http://archive.ubuntu.com/ubuntu/|http://mirrors.aliyun.com/ubuntu/|g' /etc/apt/sources.list
RUN echo 'Acquire::http::Proxy "http://host.docker.internal:3142";' > /etc/apt/apt.conf.d/01proxy# 安装基础依赖,并使用缓存
RUN --mount=type=cache,target=/var/cache/apt \apt-get update && apt-get install -y \gnupg \apt-utils \curl \software-properties-common# 设置 DEBIAN_FRONTEND 环境变量
ENV DEBIAN_FRONTEND=noninteractive# 安装其他依赖,并使用缓存
RUN --mount=type=cache,target=/var/cache/apt \apt-get update && \apt-get install -y \openssh-server \vim \language-pack-en \lxde-core \lxterminal \tightvncserver \expect \python3-pip && \rm -rf /var/lib/apt/lists/*# 更新 pip 并安装 jupyterlab,使用缓存
RUN mkdir -p /root/.pip
COPY pip.conf /root/.pip/pip.confRUN python3 -m pip install -U pipRUN --mount=type=cache,target=/root/.cache/pip \python3 -m pip install jupyterlab && mkdir /root/jupyterlab# 设置 SSH 环境
RUN mkdir /run/sshd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd# 设置 VNC 环境
ENV USER root# 清理
RUN apt-get -qq -y autoremove && apt-get autoclean && rm -rf /var/lib/apt/lists/* /var/log/dpkg.log# 复制 shell 脚本
COPY start-notebook.sh /usr/local/bin/
COPY entrypoint.sh /usr/local/bin/# 赋予执行权限
RUN chmod u+x /usr/local/bin/start-notebook.sh
RUN chmod u+x /usr/local/bin/entrypoint.sh# 解决 locale 问题
ENV LANGUAGE en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ENV LC_CTYPE en_US.UTF-8
RUN locale-gen en_US.UTF-8# 暴露端口
EXPOSE 22
EXPOSE 8888
EXPOSE 5901ENTRYPOINT ["entrypoint.sh"]
CMD []
4. 测试构建

确保在构建镜像时启用 BuildKit:

DOCKER_BUILDKIT=1 docker build -t your_image_name .

通过这种方法,可以在不同的基础镜像之间共享 APT 包的缓存,加快镜像构建速度。

可以通过多种方式查看 apt-cacher-ng 中缓存的内容。以下是一些常见的方法:

查看缓存内容

1. 访问 Web 界面

打开浏览器,访问:

http://localhost:3142/acng-report.html
2. 查看日志文件
less /var/log/apt-cacher-ng/apt-cacher.log
3. 查看缓存目录
ls /var/cache/apt-cacher-ng/
du -sh /var/cache/apt-cacher-ng/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux c 递归锁的介绍

递归锁的递归特性确实只是对于持有锁的线程。当一个线程获取了递归锁后,它可以多次重复获取该锁,而不会导致自身阻塞或死锁。这是递归锁的重要特点,它允许同一个线程在已经持有锁的情况下,再次获取相同的锁。 然而,对…

Zabbix基本介绍

文章目录 一、监控为什么需要监控需要监控什么Zabbix使用场景及系统概述zabbix介绍Zabbix功能Zabbix架构Zabbix术语 二、部署安装编译安装 一、监控 为什么需要监控 监控功能 在需要的时刻,提前预警即将出问题,避免故障发生。实时监控系统和业务,当出问题之后&am…

在本地远程访问云Linux服务器部署的tomcat管理控制台

样例: 我们将创建一个 SSH 隧道,将本地计算机的端口映射到远程服务器的端口,以达到在本地的windows系统中访问云Linux中tomcat的管理控制台的目的 1.打开终端,输入以下字段 ssh -L 8080:localhost:8080 userserver_ip 其中各项代表的值为: -L [local_port]:[remo…

Android11 framework 禁止三方应用通过广播开机自启动-独立方案

之前的文章Android11 framework 禁止三方应用开机自启动记录了我调试Android11应用自启动限制的全过程,但是之前的方案感觉还能再研究,所以有了这一篇文章。 这一篇文章主要探讨Android11上,以广播来进行自启动的应用的限制,极个别…

数据库安全:MySQL安全配置,MySQL安全基线检查加固

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 这一章节我们需…

Java中的字符串类型——String

字符串类型 不可变类型:一旦创建,值就不会改变fianl修饰类不能继承,不能被重写,修饰char类型后,地址不可变,内容可变,没有具体方法修改内容,保证不可变性 常用方法 长度&#xff…

(十七)原生js案例之h5中的几个特性记录

h5 中的新特性 语义化标签增强型表单元素选择器 querySelectorquerySelectorAllgetElementsByClassName class 的操作 classList.addclassList.removeclassList.toggleclassList.containsclassList.replace JSON JSON.stringifyJSON.parseeval 可以解析任何字符串变成 jspares…

配置Linux客户端免密登录服务端Linux主机的root用户

1.安装shh服务 首先安装shh服务,redhat端通过下面代码进行安装服务 sudo yum install sshd sudo yum install openssh-server 2.生成密钥(公钥+私钥) 执行ssh-keygen命令,会生成id_rsa(私钥&#xff0…

【ffmpeg命令入门】再论ffmpeg通用选项

文章目录 前言强制使用特定的文件格式1. 将 MP4 文件转换为 AVI 格式2. 录制音频3. 从摄像头录制视频 指定输入文件覆盖同名文件限制输入/输出文件的时间指定结束点时间主要区别举例说明1. 使用 -t 截取前 10 秒的视频2. 使用 -to 截取到第 10 秒的视频 实际应用中的区别1. 从第…

并发编程--synchronized介绍

1.初步认识synchronized 先来看下利用 synchronized 实现 同步的基 础 : Java 中的每一个 对 象都可以作 为锁 。具体表 现 为 以下 3 种形式。 : 对于普通同步方法, 锁 是当前 实 例 对 象。 对于静 态 同步方法, 锁 是当前 类…

python-首字母移位(PythonTip)

[题目描述] 编写一个程序,将句子中每个单词的首字母移位到下一个单词。定义函数shift_first_letter(),参数为sentence(字符串)。在函数内,将句子中每个单词的首字母移位到下一个单词。最后一个单词的首字母移位到句子的…

python进阶---闭包与装饰器

一、闭包 在Python中,闭包是指一个函数内部定义的函数,这个内部函数可以访问并修改其外部函数的局部变量,即使外部函数已经执行完毕。闭包可以通过多层函数嵌套来实现。 闭包的三要素: 1、外部函数嵌套内部函数 2、外部函数返回内…

SQL 注入漏洞详解 - Union 注入

1)漏洞简介 SQL 注入简介 SQL 注入 即是指 Web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 Web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,…

罗技 F710 无线游戏手柄用户指南

罗技 F710 无线游戏手柄用户指南 Gamepad F710功能系统XInput 游戏DirectInput的 游戏1.左键/触发器按钮为数字; 触发器是模拟的按钮和触发器是数字的和可编程的*2.右键/触发器按钮为数字; 触发器是模拟的按钮和触发器是数字的和可编程的*3.方向键8 向方…

记录|C#+winform创建扁平化风格界面

本项目的C#内容是自己跟做的,自己做的内容已经打包,可以通过自己跟做写的Dashboard界面,C#下的winform模式下载获得,但是需要花费3个积分 目录 前言一、左边设置和步骤界面步骤Step1.Step2.Step3.Step4Step5 二、右边属性和步骤属…

【BUG】已解决:ModuleNotFoundError: No module named ‘requests‘

ModuleNotFoundError: No module named ‘requests‘ 目录 ModuleNotFoundError: No module named ‘requests‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身&a…

Django已经登录但是还是提示登录

问题描述 在使用 Django 开发网站时,你可能会遇到一个问题:当用户在访问网站时,如果 URL 从 https://200sm.com/chat/ 切换到 https://www.200sm.com/chat/,用户可能会被要求重新登录或遇到其他验证问题。这是因为 Django 默认情…

Python怎样读取URL生成PDF

1. 安装依赖的exe 需要在这个网址,安装一个exe包,地址:https://wkhtmltopdf.org/ 进入网址后,点这个位置: 选择一个你的操作系统的下载链接: 安装后的exe文件: C:\Program Files\wkhtmltopdf…

vue3.2使用@wangeditor/editor-for-vue实现富文本编辑器,后端使用thinkphp上传图片

Vue 组件代码 npm i wangeditor/editor-for-vue<template><div style"border: 1px solid #ccc;height:600px;"><Toolbar style"border-bottom: 1px solid #ccc" :editor"editorRef" :defaultConfig"toolbarConfig" :m…

记录解决springboot项目上传图片到本地,在html里不能回显的问题

项目场景&#xff1a; 项目场景&#xff1a;在我的博客系统里&#xff1a;有个相册模块&#xff1a;需要把图片上传到项目里&#xff0c;在html页面上显示 解决方案 1.建一个文件夹 例如在windows系统下。可以在项目根目录下建个photos文件夹&#xff0c;把上传的图片文件…