前言

Docker用起来非常爽,尤其是用于DevOps实践时。但是,当你在国内或者本地拉取镜像时,经常会碰到各种“便秘”——要么镜像拉取缓慢,要么时断时连,要么连接超时!

当我们的镜像又比较大时(比如某人在代码里面丢了个魔兽争霸的包),这简直是一个噩梦!那么如何解决这个问题?接下来我们就主要从以下几个方面来解决这个问题:

  • 使用镜像加速器

  • 换源

  • 自己做镜像推送到国内仓库

  • 自己搭建就近镜像仓库

  • 最后的绝招(保密)

镜像加速器

玩网游卡都可以祭出加速器,镜像拉取通用有相关的加速器。国内的云厂商基本上都提供了镜像加速器:

Docker Hub 镜像加速器列表

如何使用镜像加速器呢?

Docker Hub 镜像加速器配置

Linux系统可以执行以下Shell:

配置了之后,可以通过“docker info”命令来查看是否生效:

如果是Windows 10呢?可以在如下图所示的界面处配置:

换源

加速器用起来非常爽,但是很多时候某些镜像就算是配置了加速器也不好使(可能和加速器的国际带宽有关系),这个时候就必须换源了。毕竟加速器不是万能的,尤其是当你的镜像比较大的时候。这时候你就要找合适的源了。

比如.NET Core 的SDK镜像,我们可以统一使用Azure中国的镜像源,如下表所示,我们看到“mcr.microsoft.com”在国内对应的代理为“mcr.azk8s.cn”:

因此,我们可以使用“mcr.azk8s.cn”来替代官方提供的“mcr.microsoft.com”源:

# docker pull  mcr.microsoft.com/dotnet/core/sdk:2.2-stretch
docker pull mcr.azk8s.cn/dotnet/core/sdk:2.2-stretch

如上述代码所示,我们将Azure国际的源换成了Azure中国的源,拉包速度就会飞快。换源了,意味着我们也需要将Dockerfile的命令也进行修改:

#FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
#修改为Azure中国镜像
FROM mcr.azk8s.cn/dotnet/core/sdk:2.2-stretch AS build

自己做镜像推送到国内仓库

有源的还还说,要是没源怎么办?那总不能凉拌吧?那就自己做吧。可以基于GitHub托管,Azure DevOps和Docker hub进行海外构建,然后将镜像推送到国内的镜像仓库之中。如下面这个开源库,用于构建项目中使用的aspnetcore的运行时公共基础镜像,同时提供了腾讯云公共镜像和Docker Hub公共镜像以供国内外使用:
https://github.com/xin-lai/aspnetcore-docker

相关镜像标签说明

标签名称 说明
latest 最新镜像,当前为3.1
2.2 Asp.Net Core Runtime 2.2
2.2withfonts Asp.Net Core Runtime 2.2 (包含字体)
3.0 Asp.Net Core Runtime 3.0
3.1 Asp.Net Core Runtime 3.1

然后,仅需在Dockerfile中替换为自己的源即可,即可享受快的飞起:

#说明见:https://github.com/xin-lai/aspnetcore-docker
FROM ccr.ccs.tencentyun.com/magicodes/aspnetcore-runtime:2.2withfonts AS base

这里分享一个技巧:Linux下使用apt装包很多时候非常缓慢而且不靠谱,有时候换成国内的代理也很不靠谱,这时候可以考虑使用海外构建,做成镜像。

自己搭建就近镜像仓库

服务器带宽不行,本地网络不佳,怎么办?还能怎么办,自己搭建仓库吧。这里推荐使用nexus,nexus可以托管各种包,包括Docker、Nuget、Jar、npm、Bower等等包,简直不要太犀利了。如何搭建?Yaml常考如下:

apiVersion: apps/v1beta2
kind: Deployment
metadata:labels:k8s-app: nexusname: nexusnamespace: default
spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:k8s-app: nexusstrategy:type: Recreatetemplate:metadata:labels:k8s-app: nexusspec:containers:- image: sonatype/nexus3imagePullPolicy: IfNotPresentname: nexusresources:limits:cpu: "2"memory: 5024Mirequests:cpu: 10mmemory: 256MivolumeMounts:- mountPath: /nexus-dataname: datarestartPolicy: AlwaysnodeName: k8s-node1 #强制约束将Pod调度到指定的Node节点上terminationGracePeriodSeconds: 30 #Pod结束时等待时长(单位为秒)volumes:- name: datahostPath:   #使用主机目录path: /var/nexushostNetwork: true
---
apiVersion: v1
kind: Service
metadata:name: nexusnamespace: default
spec:ports:- name: tcp-8081-8081nodePort: 30081port: 8081protocol: TCPtargetPort: 8081- name: tcp-8082-8082nodePort: 30082port: 8082protocol: TCPtargetPort: 8082- name: tcp-8083-8083nodePort: 30083port: 8083protocol: TCPtargetPort: 8083- name: tcp-8084-8084nodePort: 30084port: 8084protocol: TCPtargetPort: 8084- name: tcp-8085-8085nodePort: 30085port: 8085protocol: TCPtargetPort: 8085- name: tcp-8086-8086nodePort: 30086port: 8086protocol: TCPtargetPort: 8086selector:k8s-app: nexussessionAffinity: Nonetype: NodePort

最后的绝招

还不行,用U盘复制吧。别说认识我。你不信可以通过U盘复制?可以去了解下以下两个命令:

  • docker save

  • docker load

如何让Docker镜像飞起来相关推荐

  1. 多阶段构建Docker镜像

    在Docker 17.05及更高的版本中支持支持一种全新的构建镜像模式:多阶段构建: 多阶段构建Docker镜像的最大好处是使构建出来的镜像变得更小: 目前常见的两个构建镜像的方式为: 1.直接使用某 ...

  2. Docker容器的备份与恢复,Docker镜像的备份与恢复

    1. 备份容器 首先,为了备份Docker中的容器,我们会想看看我们想要备份的容器列表.要达成该目的,我们需要在我们运行着Docker引擎,并已创建了容器的Linux机器中运行 docker ps 命 ...

  3. Docker 入门系列(2)- Docker 镜像, 免 sudo 使用 docker 命令、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像

    1. 免 sudo 使用 docker 命令 如果还没有 docker group 就添加一个 sudo groupadd docker 将用户加入该 group 内 sudo gpasswd -a ...

  4. Docker学习(三)-----Docker镜像常用命令

    六.Docker镜像 镜像是Docker的三大组件之一 Docker运行容器前需要本地存在对应的镜像,如果本地不存,Docker会从镜像仓库下载 6.1Docker获取镜像 6.1.1查找镜像 我们可 ...

  5. 客快物流大数据项目(十三):Docker镜像

    目录 Docker镜像 一.Docker镜像是什么 1.UnionFS(联合文件系统)

  6. Docker镜像优化

    Docker镜像优化 原文:Docker镜像优化 前言 上篇博文说到使用Visual Studio Tools for Docker帮助我们生成Dockerfile,现在我们讨论下生成的Dockerf ...

  7. 在内网中使用maven_maven构建docker镜像三部曲之三:推送到远程仓库(内网和阿里云)-Go语言中文社区...

    在上一章<maven构建docker镜像三部曲之二:编码和构建镜像>的实战中,我们将spring boot的web工程构建成docker镜像并在本地启动容器成功,今天我们把docker-m ...

  8. docker 镜像容器导入导出、查看日志、拷贝文件命令

    1. 本地文件拷贝到docker 容器中,参考 docker cp /root/pcl-pcl-1.8.1.tar.gz 7ff95b333e12:/docker cp /root/lib64_a 7 ...

  9. 通过Dockerfile构建Docker镜像

    Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添 ...

最新文章

  1. 管理数据,应用程序和主机安全-B
  2. C# 错误!!容量超出了最大容量。参数名: capacity 这个是什么问题呢?
  3. '+' 拼接字符串引起的小事故
  4. API 2.0Switching Basemaps
  5. C语言string.h常用函数总结
  6. java删除不,Java文件不能删除,该怎么解决
  7. 04_ClickHouse表引擎概述、MergeTree系列引擎、Log系列引擎、集成引擎、特定功能的引擎(学习笔记)
  8. 化学到底有多难难难难!为了让学生搞懂化学,竟然...
  9. 笔试面试收获(持续更新中)
  10. 结对开发:电梯调度(2)
  11. Linux环境编译动态库和静态库总结
  12. 2叉树排序缺失元素查找
  13. 逻辑门的Verilog实现与仿真
  14. Python打码API(学习使用)
  15. 解决webSocket不兼容IE浏览器问题
  16. FPGA_电机控制(Verilog)
  17. windows虚拟化服务器搭建,windows虚拟化服务器搭建
  18. vcode去除分号和双引号方法
  19. 晶圆激光切割工艺流程
  20. android 自动化 微信,C#手把手教你玩微信自动化

热门文章

  1. ABAP的自学之路 ,初步认识ABAP 一
  2. 学习笔记-第四周-心得体会
  3. Electron - 创建跨平台的桌面客户的应用程序
  4. 查看端口被占用的进程号然后结束进程(解决端口被进程占用的问题)
  5. 浙大月赛C题(2012/8)Cinema in Akiba(线段树)
  6. 高级SQL注入拿shell,一般黑客不知道。哈客
  7. 盗窃60秒java_EOS节点投票60秒刷新一次 EOS Asia 金马(下) 欧链·宁话区块链 EOS超级节点访谈...
  8. Android 干货,强烈推荐
  9. 博鳌“‘AI+时代’来了吗”分论坛,嘉宾们有何重要观点?...
  10. ELK 中的elasticsearch 集群的部署