一.开篇

地球,中国,成都市,某小区的阳台上,一青年负手而立,闭目沉思,阵阵的凉风吹得他衣衫呼呼的飘。忽然,他抬起头,刹那间,睁开了双眼,好似一到精光射向星空,只见这夜空......一颗星星都没有。他叹了下气,“今日夜观星象,看来是时候了。”他走到电脑桌前,双手不断的做出各种手势,同时口中念着晦涩难懂的语言——嘛咪嘛咪哄,最后只见他将一只手放在了笔记本电脑上,同时大喊:“出来吧!我的皮卡丘。”,只见贴在笔记本电脑上的一张泛黄的写着奇怪文字和图案的纸在燃烧,好像在进行一种神秘的解除封印的仪式。纸烧完,他打开了笔记本,点开了“Typora“,沉思一会,打了几个字——Docker实用技巧之更改软件包源提升构建速度。

成都的天气刚经历了雨后初晴,还带着丝丝凉爽的空气,结束了雨天,是时候感受一下阳光了。转眼间似火的七月已过了大半,但这个月我还基本没写技术性的博客,虽然写了几篇关于CentOS下的一些软件的安装方法,但那些都是我自己做的一些记录而形成的,今天给大家带来一篇关于Docker的实用技巧。

二.问题说明

我的一个开源项目提供了在线示例,项目代码在github,提交代码以后通过Jenkins持续集成,以Docker的方式运行。大家用过.NET Core的人应该都知道,.NET Core 默认是不带 System.Drawing的,前期有第三方的实现,为我们提供了一个解决方案,现在官方也提供了一个,以nuget包的方式发布,名为 System.Drawing.Common,实用这个包可以正常的进行各种图片操作,比如生成图片验证码,二维码等等,但是如果我们将其发布到linux,将会出现异常:Unable to load DLL 'libgdiplus' 。解决办法是,我们在构建Docker镜像的时候,可以通过命令装上libgdiplus ,但是如果直接写命令apt-get install -y libgdiplus ,你会发现构建会出错,找不到这个包,我们需要在执行这个命令之前,执行 apt-get update更新软件包源,那么问题来了,我在第一次构建Docker镜像(没有使用Cache)的执行 apt-get update命令时,非常的慢。最后整个构建过程花了12分钟。

构建的程序为 ASP.NET Core 2.1 应用程序,使用的基础镜像为微软官方提供的:microsoft/dotnet:2.1-aspnetcore-runtime

这不能忍啊,简直是太慢了,查看日志,发现这里执行非常慢:

After this operation, 38.8 MB of additional disk space will be used.
Get:1 http://cdn-fastly.deb.debian.org/debian stretch/main amd64 libxau6 amd64 1:1.0.8-1 [20.7 kB]
Get:2 http://cdn-fastly.deb.debian.org/debian stretch/main amd64 sgml-base all 1.29 [14.8 kB]
Get:3 http://cdn-fastly.deb.debian.org/debian stretch/main amd64 libxml2 amd64 2.9.4+dfsg1-2.2+deb9u2 [920 kB]
Get:4 http://cdn-fastly.deb.debian.org/debian stretch/main amd64 ucf all 3.0036 [70.2 kB]
...此处省略28个,一共32个

应该是从 http://cdn-fastly.deb.debian.org/debian获取数据太慢导致的,所以,准备替换构建所使用的基础镜像的软件包源,准备替换为网易提供的包源 http://mirrors.163.com/

三.问题解决--替换软件包源

软件包源的配置文件在基础镜像所用的Linux系统中路径为 /etc/apt/sources.list ,我们只需在执行 apt-get update命令之前,将我们编写好的使用网易包源的配置文件进行替换就行了。

使用网易包源的配置文件:

sources.list

deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib

Dockerfile:

FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
COPY . .
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && mv sources.list /etc/apt/ && apt-get update -y && apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
EXPOSE 80
ENTRYPOINT ["dotnet", "Alipay.Demo.PCPayment.dll"]

主要是这两句命令:

#备份旧的配置文件
mv /etc/apt/sources.list /etc/apt/sources.list.bak
#替换为我们自定义的配置文件
mv sources.list /etc/apt/

需要注意的是,sources.list 需要放在我们打包的目录,保证能复制到镜像里面。

然后构建时间由12分钟缩短到37秒,这个过程是没有使用Docker Cache所花的时间:

四.其他加速

1.腾讯云

我的服务器是使用的腾讯云,腾讯云也提供了软件包源,分为内网和外网,外网是所有人都能使用,内网只能腾讯云的服务器使用。使用内网的包源将会获得更快的速度。详细说明:https://cloud.tencent.com/document/product/213/8623

使用内网的腾讯云包源配置文件:

deb http://mirrors.tencentyun.com/debian/ jessie main non-free contrib
deb http://mirrors.tencentyun.com/debian/ jessie-updates main non-free contrib
deb http://mirrors.tencentyun.com/debian/ jessie-backports main non-free contrib
deb-src http://mirrors.tencentyun.com/debian/ jessie main non-free contrib
deb-src http://mirrors.tencentyun.com/debian/ jessie-updates main non-free contrib
deb-src http://mirrors.tencentyun.com/debian/ jessie-backports main non-free contrib
deb http://mirrors.tencentyun.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.tencentyun.com/debian-security/ jessie/updates main non-free contrib

2.阿里云

阿里云作为一个全球第三的云平台运营商,也是具有此项服务的。其包源地址为:https://mirrors.aliyun.com

配置文件:

deb https://mirrors.aliyun.com/debian/ jessie main non-free contrib
deb https://mirrors.aliyun.com/debian/ jessie-updates main non-free contrib
deb https://mirrors.aliyun.com/debian/ jessie-backports main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ jessie main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ jessie-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ jessie-backports main non-free contrib
deb https://mirrors.aliyun.com/debian-security/ jessie/updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian-security/ jessie/updates main non-free contrib

五.其他Linux系统镜像

我用的Docker镜像所使用的Linux系统为 debian,如果你是用的不是 debian,那么你可以通过以下几个步骤来进行包源的更改。

方法一

1.通过你所使用镜像官方提供的资料,查询出镜像所使用的Linux系统包源路径以及配置文件内容

2.替换加速地址

方法二

1.使用你需要使用的镜像构建一个简单的程序,然后运行。

2.通过Docker交互模式,进入容器。

3.查询出使用的系统Linux镜像版本

4.找到并查看包源配置文件

5.复制配置文件内容,然后将地址替换为对应的加速地址

六.结束

“贫僧”能解决这个问题,非常感谢其他朋友提供的资料,“百度”(google、bing)不愧是武林绝学,2333:

debian系linux,更换apt-get官方源为国内源

最后,“贫僧”鸠摩智参见,各位后会有期:

Docker实用技巧之更改软件包源提升构建速度的更多相关文章

  1. vue-cli3使用 DllPlugin 实现预编译,提升构建速度

    在项目打包上有两个目标:减少打包代码体积和加快打包速度 1. 减少打包体积: (1)对于用的比较少的库,可以去掉(我去掉了jquery以及lodash),用到的地方,参考源码自己写 (2)非用不可的又 ...

  2. 秒啊,速来get这9个jupyter实用技巧

    1 简介 jupyter notebook与jupyter lab作为广受欢迎的ide,尤其适合开展数据分析相关工作,而掌握它们相关的一些实用技巧,势必会大大提升日常工作效率.而今天我就来给大家介绍9 ...

  3. Webpack5构建速度提升令人惊叹,早升级早受益

    为什么要升级? webpack4用的好好的,运行稳定,为什么要升级到webpack5, 每次升级,都要经历一场地震,处理许多loader和plugin API的破坏性改变. 请给我们一个充分的升级理由 ...

  4. IOS 网络浅析-(十三 SDWebImage 实用技巧)

    IOS 网络浅析-(十三 SDWebImage 实用技巧) 首先让我描述一下为了什么而产生的实用技巧.(在TableView.CollectionView中)当用户所处环境WiFi网速不够快(不能立即 ...

  5. PowerDesigner实用技巧小结(3)

    PowerDesigner实用技巧小结(3) PowerDesigner 技巧小结 sqlserver数据库databasevbscriptsqldomain 1.PowerDesigner 使用 M ...

  6. PowerDesigner实用技巧小结(2)

    PowerDesigner实用技巧小结 1.ORACLE数据库建模时,由于ORACLE的表名.字段名如果是小写会有一定的麻烦,需要将小写转化为大写? (1)在打开pdm的情况下,进入Tools-Mod ...

  7. Vim 实用技术,第 1 部分: 实用技巧(转)

    原文链接:http://blog.jobbole.com/20604/ 0. Vim 简介 作为开源世界最重要的编辑器之一(另一个是 Emacs),Vim 以其强大的功能和可定制能力被众多开发者所喜爱 ...

  8. 什么是yum源,如何更改yum源

    Yum(全称为 Yellow dog Updater, Modified) yum是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器 ...

  9. Mac实用技巧之:访达/Finder

    更多Mac实用技巧系列文章请访问我的博客:Mac实用技巧系列文章 Finder就相当于windows XP系统的『我的电脑』或win7/win10系统里的『计算机』(打开后叫资源管理器),find是查 ...

随机推荐

  1. Go资源

    go语言实现的设计模式 http://tmrts.com/go-patterns/ https://design-patterns.readthedocs.io/zh_CN/latest/index. ...

  2. git cannot lock ref

    参考博客:https://blog.csdn.net/lindexi_gd/article/details/79213042 错误原文: cannot lock ref ‘refs/remotes/o ...

  3. 用JDBC把Excel中的数据导入到Mysql数据库中

    步骤:0.在Mysql数据库中先建好table 1.从Excel表格读数据 2.用JDBC连接Mysql数据库 3.把读出的数据导入到Mysql数据库的相应表中 其中,步骤0的table我是先在Mys ...

  4. python 迭代器,生成器

    在 python 中我们常用 for in 来遍历 list, set, dict, str 等. for in 的本质就干了两件事: 调用 __iter__() 获取迭代器; 调用 next() 直 ...

  5. 加固后,上传play store, 在 google play store 下载应用安装后,打开签名校验失败

    在Google Play Console. (Google Play App Signing )签署您的应用 在创建应用时: 会有个“ Google Play App Signing” 的东西,提示使 ...

  6. 记录opencv编译过程

    准备学习opencv,参考了几个网页终于完成.编辑器和opencv版本都选择最新的版本. 记录过程如下 1. 下载准备: 1)         Opencv源码, 下载地址: https://sour ...

  7. javascript函数传值问题(传值?址)

    通常对于我们开发者来说,有不少人是忽略了这些小问题的,但是我们又必要去了解.因为今天一个朋友问起,所以写到这里来了, 在C#中,我们知道如果要往一个函数中传递参数的类型为对象,数组或者其他引用类型时. ...

  8. framework7 入门(数据绑定)

    数据绑定是用template7,官网,framework7内置template7,不用单独下载,下面介绍一些简单的绑定 当你的数据是个数组 return{ data:function(){ let i ...

  9. swust oj 1013

    哈希表(开放定址法处理冲突) 1000(ms) 10000(kb) 2698 / 6177 采用除留余数法(H(key)=key %n)建立长度为n的哈希表,处理冲突用开放定址法的线性探测. 输入 第 ...

  10. 接口自动化项目搭建(Java+testng+maven+git+springboot)

    自动化测试: https://www.bilibili.com/video/av31078661?from=search&seid=16551153777362561361 一工具准备 二 环 ...