【Docker 实用技巧】动态切换国内外源

news2024/12/24 10:05:08

目录

前言:

1、背景

2、ChatGPT 的方案

3、我的方案

3.1 本地构建

3.2 Github Action 构建

3.3 实际方案


前言:

Docker 是一个非常流行的开发和部署平台,它可以帮助开发者快速构建、部署和管理应用程序。在使用 Docker 的过程中,我们可能需要切换国内外源来获取更快速的软件包和镜像。

1、背景

在国内,docker build 的时候,如果没有修改为国内的源或者使用国内镜像(包括 yum,pip,apt-get,npm 等等),网络会非常的慢,有时候甚至用不了。

但是,如果在使用 Github Action docker build 时,机器是在美国,使用国内的源或者镜像,就会适得其反。

慢到令人发指.png

查看详细的 log,发现大部分时间消耗在这一层

# 更换apt源为阿里云镜像源,更新系统和安装一些基本软件包
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    apt-get update && \
    apt-get install -y wget unzip openjdk-11-jdk ant

那么问题来了,怎么样优雅的实现,同一份 Dockerfile 在 Github Action 构建时就是用国外的源,本地开发就使用国内的源

2、ChatGPT 的方案

image.png

怎么说?使用 ARG 搭配 ENV 是一个不错的方案。

但在 Dockerfile 里面增加 if 判断似乎不是那么的优雅
但还有其他方案吗?

3、我的方案

3.1 本地构建

这里可以看到执行替换 apt 源为阿里云的

本地构建docker镜像

3.2 Github Action 构建

这里看到也执行了替换源,只不过是 debian 默认的源

Github Action构建docker镜像

整体的耗时耗时都降下来啦

image.png

3.3 实际方案

docker-compose args + Dockerfile ARG

image.png

含义解释:

DEBIAN_REPO: ${DEBIAN_REPO:-mirrors.aliyun.com}
PIP_INDEX_URL: ${PIP_INDEX_URL:-https://pypi.tuna.tsinghua.edu.cn/simple}

在 docker-compose.yml 里面定义了两个变量

  • DEBIAN_REPO,默认值是mirrors.aliyun.com
  • PIP_INDEX_URL,默认值是https://pypi.tuna.tsinghua.edu.cn/simple

在本地开发时,执行docker-compose -f docker-compose.yml up -d --build --remove-orphans(当然,我不会输入那么长命令,记不住;就算记得也会累死。你们会吗?我都是通过 Makefile 来自定义各种命令,最终效果是输入make up就能实现这个命令,看上面 3.1 的截图)构建的时候,

docker-compose 里面定义变量的默认值,会替覆盖掉 Dockerfile 的同名变量(DEBIAN_REPO 和 PIP_INDEX_URL)

这样一来,本地就能够使用国内的镜像和源啦

在 Github Action 构建时,直接使用 Dockerfile,没有传入参数,就直接使用默认的源。

完美解决问题~~

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

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

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

相关文章

聊聊STM32 ADC的话题

STM32 微控制器系列提供了多个模拟数字转换器(ADC)模块,用于实现模拟信号的采集和转换为数字信号。ADC 在很多应用中都是非常重要的,例如传感器数据采集、电压测量等。 在 STM32 中,ADC 可以通过 STM32HAL 库提供的函…

Unity游戏源码分享-3d机器人推箱子游戏

Unity游戏源码分享-3d机器人推箱子游戏 一个非常意思的3D游戏 工程地址:https://download.csdn.net/download/Highning0007/88098014

leetcode5. 最长回文子串(Manacher - java)

Manacher回文算法 leetcode5. 最长回文子串Manacher 算法 manacher 算法 leetcode5. 最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s “…

pear文件利用 (远程文件下载、生成配置文件、写配置文件) 从一道题看——CTFshow私教 web40

web40 考点:pear文件包含 pear是PHP的一个扩展 条件: 1 有文件包含点 2 开启了pear扩展 (可以当他是一个框架) 3 配置文件中register_argc_argv 设置为On,而默认为Off($_SERVER[‘argv’]生效) 4 找到…

互联网创业项目整合:提高成功率的关键方法

互联网创业是当前非常火热的话题,但是市场竞争也异常激烈,成功率不高。今天,我来分享一些互联网创业项目整合的方法,帮助大家创造更大的机会。 1️⃣ 选择适合自己的领域 在选择创业项目时,一定要根据自己的专业、兴…

kafka权威指南学习

0、kafka常用命令 Kafka是一个分布式流处理平台,它具有高度可扩展性和容错性。以下是Kafka最新版本中常用的一些命令: 创建一个主题(topic): bin/kafka-topics.sh --create --topic my-topic --partitions 3 --replic…

【Nodejs】Express基本使用

Express 中文网 基于 Node.js 平台,快速、开放、极简的 web 开发框架。 1.Express的安装方式 Express的安装可直接使用npm包管理器上的项目,在安装npm之前可先安装淘宝镜像: npm install -g cnpm --registryhttps://registry.npmmirror.com/…

安全渗透--正则表达式

什么是正则表达式? 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。 一个正则表达式是一种从左到右匹配主体字符串的模式。 “Regular expression”这个词比较拗口,我们常使用缩写的术语“regex…

【高危】Apache ShardingSphere 反序列化漏洞

漏洞描述 Apache ShardingSphere 是一个开源的分布式数据库中间件。 在 Apache ShardingSphere 受影响版本中,由于 Apache ShardingSphere-Agent 在反序列化 YAML 配置文件时未正确验证不受信任数据,攻击者可以利用 SnakeYAML 反序列化 java.net.URLCl…

阿里云盘自动每日签到无需部署无需服务器(仅限学习交流使用)

一、前言 阿里云盘自动每日签到,无需部署,无需服务器 执行思路:使用金山文档的每日定时任务,执行阿里云盘签到接口。 二、效果展示: 三、步骤: 1、进入金山文档网页版 金山文档官网:https:…

【C++】STL——list的介绍和使用、list增删查改函数的介绍和使用、push_back、pop_back

文章目录 1.list的使用2.list的增删查改函数(1)push_front 在list首元素前插入值为val的元素(2)pop_front 删除list中第一个元素(3)push_back 在list尾部插入值为val的元素(4)pop_ba…

【深度学习笔记】动量梯度下降法

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记,视频由网易云课堂与 deeplearning.ai 联合出品,主讲人是吴恩达 Andrew Ng 教授。感兴趣的网友可以观看网易云课堂的视频进行深入学习,视频的链接如下: 神经网络和…

Asp.Net 6中使用Log4Net

Asp.Net 6中使用Log4Net 1. 先新建一个ASP.NET Core空项目 2. 通过Nuget包管理器安装下面两个包 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 3. 在项目根目录下新建log4net的配置文件log4net.config&#xff0c;并将其设置为始终复制。 <?xml version&quo…

最新Ai创作源码ChatGPT商用运营源码/支持GPT4.0+支持ai绘画+支持Mind思维导图生成

本系统使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到本系统&#xff01; 支持GPT3模型、GPT4模型Midjourney专业绘画&#xff08;全自定义调参&#xff09;、Midjourney以图生图、Dall-E2绘画Mind思维导图生成应用工作台&#xff08;Prompt&#xff09;AI绘画广场自定…

高效复用:RecyclerView Item中嵌套列表时的优化技巧

文章目录 背景实现思路方式一方式二方式三 性能对比总结 背景 如上面截图中的效果&#xff0c;首先这是一个多样式的滑动列表&#xff08;截图里只列举了其中的3 种样式&#xff09;&#xff0c;整体使用 RecyclerView 来实现毋庸置疑。接下来要探讨的是截图中第3个ItemView 中…

Linux系列---【CentOS 7通过MSTSC连接远程桌面】

安装对应的yum源 yum list lightdm xorgxrdp xrdp 可以看到这些软件都在epel中&#xff0c;如果没有的话&#xff0c;请先安装对应的yum源。命令如下&#xff1a; yum install -y epel-release 确认yum源没有问题之后&#xff0c;我们就可以进行安装了。 安装lightdm xorgxrdp…

QT【day1】

登录框&#xff1a; #include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {//窗口设置this->setFixedSize(600,600); //大小this->setWindowTitle("MUMU"); //文本内容this->setWindowOpacity(0.8); //透…

Java五大内存区域介绍与常见异常

jvm虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的区域。这些区域各自有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而存在&#xff0c;有的区域则依赖用户进程的启动和结束而建立和销毁。 1、程序计数器 程序计…

《动手学深度学习》——2.6概率(模拟掷色子代码解析)

文章目录 完整代码代码解析结果展示 完整代码 %matplotlib inline !pip install d2l import torch from torch.distributions import multinomial from d2l import torch as d2l fair_probs torch.ones([6]) / 6 counts multinomial.Multinomial(10, fair_probs).sample((50…

redis中缓存雪崩,缓存穿透,缓存击穿的原因以及解决方案

一 redis的缓存雪崩 1.1 缓存雪崩 在redis中&#xff0c;新&#xff0c;旧数据交替时候&#xff0c;旧数据进行了删除&#xff0c;新数据没有更新过来&#xff0c;造成在高并发环境下&#xff0c;大量请求查询redis没有数据&#xff0c;直接查询mysql&#xff0c;造成mysql的…