Docker实用技巧之更改软件包源提升构建速度

简介: Docker实用技巧之更改软件包源提升构建速度

一.开篇

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

1532016705467

四.其他加速

1.腾讯云

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

1532017048199

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

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官方源为国内源

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

1532018498089

相关文章
|
28天前
|
存储 运维 安全
构建高效自动化运维体系:Ansible与Docker的完美结合
【2月更文挑战第31天】 随着云计算和微服务架构的兴起,自动化运维成为保障系统稳定性和提升部署效率的关键手段。本文将详细探讨如何通过Ansible和Docker的结合来构建一个高效、可靠且易于管理的自动化运维体系。首先,介绍自动化运维的必要性及其在现代IT基础设施中的作用;然后,分别阐述Ansible和Docker的技术特点及优势;最后,提供一个基于Ansible和Docker结合使用的实践案例,以及实施过程中遇到的挑战和解决方案。
|
29天前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【2月更文挑战第30天】 在当今快速发展的云计算时代,传统的IT运维模式已难以满足业务的敏捷性和稳定性需求。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理工具构建一个高效、可靠的自动化运维体系。文章首先概述了容器化技术和微服务架构的基本概念,随后详细阐述了基于Docker的应用打包、部署流程,以及Kubernetes在自动化部署、扩展和管理容器化应用中的关键作用。最后,文中通过案例分析,展示了如何在实际场景中利用这些技术优化运维流程,提高系统的整体效率和可靠性。
|
30天前
|
运维 安全 网络安全
构建高效自动化运维体系:Ansible与Docker的完美融合
【2月更文挑战第30天】在当今快速迭代和持续部署的软件发展环境中,自动化运维成为确保效率和稳定性的关键。本文将探讨如何通过结合Ansible和Docker技术,构建一个高效的自动化运维体系。我们将分析Ansible的配置管理功能和Docker容器化的优势,并展示它们如何协同工作以简化部署流程,增强应用的可移植性,并提供一致性的系统环境。此外,文章还将介绍一些最佳实践,帮助读者在真实环境中实现这一整合方案。
|
3月前
|
Java 持续交付 Docker
Docker 项目如何使用 Dockerfile 构建镜像?
Docker 简介:讲述 Docker 的起源、它是如何革新现代软件开发的,以及它为开发者和运维团队带来的好处。重点强调 Docker 的轻量级特性和它在提高应用部署、扩展和隔离方面的优势。
|
3月前
|
Linux 开发者 Docker
如何构建在 Docker 容器中运行命令?
【1月更文挑战第6天】
54 0
|
1天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
7 0
|
21天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。
|
23天前
|
运维 监控 云计算
构建高效稳定的Docker容器监控体系
随着微服务架构的普及,Docker容器作为其核心承载单元,在系统运维中扮演着日益重要的角色。本文旨在探讨如何构建一个高效且稳定的Docker容器监控体系,以确保容器运行的可靠性和系统的高可用性。文章首先分析了容器监控的必要性,接着详细介绍了监控体系的设计理念和组件选择,最后提供了实施过程中的关键步骤与最佳实践。通过本文,读者将掌握构建和维护Docker容器监控体系的有效方法。
|
30天前
|
Kubernetes 开发者 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【2月更文挑战第29天】在当今快速发展的软件开发领域,微服务架构已成为提高系统可维护性、扩展性和敏捷性的关键解决方案。本文将深入探讨如何利用Docker容器化技术和Kubernetes集群管理工具,共同构建一个既高效又可靠的微服务环境。我们将分析Docker和Kubernetes的核心功能,并展示它们如何协同工作以简化部署流程、增强服务发现机制以及实现无缝的服务伸缩。通过实际案例分析,本文旨在为开发者提供一套实用的微服务架构设计和实施指南。
|
2月前
|
KVM 虚拟化 Android开发
DP读书:鲲鹏处理器 架构与编程(十二)鲲鹏软件实战案例Docker+KVM的部署
DP读书:鲲鹏处理器 架构与编程(十二)鲲鹏软件实战案例Docker+KVM的部署
52 1