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

目录

前言:

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,没有传入参数,就直接使用默认的源。

完美解决问题~~

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

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

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

相信能使你更好的进步!

点击下方小卡片

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值