目录
前言:
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 时,机器是在美国,使用国内的源或者镜像,就会适得其反。
查看详细的 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 的方案
怎么说?使用 ARG 搭配 ENV 是一个不错的方案。
但在 Dockerfile 里面增加 if 判断似乎不是那么的优雅
但还有其他方案吗?
3、我的方案
3.1 本地构建
这里可以看到执行替换 apt 源为阿里云的
3.2 Github Action 构建
这里看到也执行了替换源,只不过是 debian 默认的源
整体的耗时耗时都降下来啦
3.3 实际方案
docker-compose args
+ Dockerfile ARG
含义解释:
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,没有传入参数,就直接使用默认的源。
完美解决问题~~
作为一位过来人也是希望大家少走一些弯路
在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。
(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)
相信能使你更好的进步!
点击下方小卡片