当前位置: 首页 > news >正文

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.lryc.cn/news/404792.html

相关文章:

  • 【C语言】 作业11 链表+实现函数封装
  • 【Ubuntu】Ubuntu20修改MAC地址
  • ClickHouse集成LDAP实现简单的用户认证
  • C语言-预处理详解
  • 计算机网络-VLAN间通信(三层通信)模拟实现
  • 【JAVA】数据类型及变量
  • 微软蓝屏事件暴露的网络安全问题
  • 11 - FFmpeg - 编码 AAC
  • OS Copilot初体验的感受与心得
  • Ajax学习笔记
  • 医学深度学习与机器学习融合的随想
  • 坑人的macos tar 命令 (实际上是bsdtar)换用 gnu tar
  • 【SpringBoot3】全局异常处理
  • vue-Treeselect
  • 【机器学习框架TensorFlow和PyTorch】基本使用指南
  • matlab 中的methods(Access = protected) 是什么意思
  • 【漏洞复现】Netgear WN604 downloadFile.php 信息泄露漏洞(CVE-2024-6646)
  • 图像处理 -- ISP调优(tuning)的步骤整理
  • 【中项】系统集成项目管理工程师-第4章 信息系统架构-4.2系统架构
  • node.js中nodemon : 无法加载和使用问题,这是由于windows安全策略影起的按如下操作即可
  • 【SD】 Stable Diffusion(SD)原理详解与ComfyUI使用 2
  • 【学习笔记】无人机系统(UAS)的连接、识别和跟踪(七)-广播远程识别码(Broadcast Remote ID)
  • VMware 虚拟机 ping 不通原因排查
  • websocket状态机
  • JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】
  • 力扣3226 使两个整数相等的位更改次数
  • VLAN 划分案例详解
  • [技术总结] C++ 使用经验
  • 音频数据集
  • Java | Leetcode Java题解之第268题丢失的数字