旨在解决在中国使用Docker及Docker镜像时的网络问题!加速镜像构建和依赖下载,节省使用Docker的时间,让Docker更丝滑!
- 由于官方 DockerHub 被墙,导致
pullpushlogin无法使用 - 优化Docker镜像,解决镜像内
包管理器(apt、apk)Python PipJava Maven等工具或环境的默认源缓慢或被墙导致无法使用的问题- 理论上支持所有镜像的优化
- 使用本仓库的脚本进行优化:将自动配置国内镜像源并重新构建镜像 快速开始
- 可优化本地镜像,某些镜像未push到中央仓库,仅在服务器本地存在,此时可clone本项目脚本到服务器,进行本地化的优化 快速开始-本地镜像优化
- 亦可直接优化服务器,而非仅局限于Docker镜像 直接优化服务器
- 极低侵入性:优化不会对原镜像做任何的其他修改,仅优化该优化的,比如:不会修改原有的工作目录、原有的启动命令、不夹带私货(不安装任何软件包)等
- 支持多平台架构镜像构建!
关于镜像源的选择说明
优先使用的阿里源,因为在实际使用中,其他源都不太稳定且可能有限速或QPS限制(点名清华源,之前还挺好用的,现在一旦安装的包过多就被限制,下载包直接报错403)
若你需要使用其他源,或其他优化,或其他调整,可根据 快速开始 进行完全属于你的自定义
-
系统优化(通用)
- alias别名
-
Debian 系:
apt -
Ubuntu 系:
apt -
Alpine::
apk -
环境优化
- Java Maven
- Python Pip
- Node.js Npm
-
推荐使用官方脚本一键安装,借助阿里云镜像
此命令可一键安装当前最新版本的Docker,理论上所有发行版的Linux皆支持(只要Docker支持,那么都可以一键安装)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun由于
get.docker.com在前不久也被墙了,故国内可以使用如下方法安装(选其一即可)-
手动挂梯打开 https://get.docker.com 右键另存为
sh脚本,然后手动上传到服务器执行安装bash install.sh docker --mirror Aliyun
-
直接使用三方镜像安装,来自 linuxmirrors.cn
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
-
-
查看安装的版本信息,同时验证是否安装成功
docker version
-
(可选) 关于
docker-compose目前最新版本已自带
docker-compose,无需手动单独安装,使用命令docker compose即可可能由于某些原因,仍需使用
docker-compose命令,可设定别名# 临时(当前会话有效) alias docker-compose='docker compose' # 永久有效 # 在 ~/.bashrc 文件末尾追加上方的别名设置命令即可 # 目的就是让系统启动时就自动执行 alias 命令,因此,你也可以将此命令加到其他任意会在启动时自动执行的脚本中
仅可解决使用
docker pull无法拉取镜像可选择 配置代理 解决所有Docker自身的网络问题,根据自身情况/使用场景,自行选择使用哪种方式,一般二选一即可
更多镜像地址
下方给出的
registry-mirrors中的地址都是公开且免费的,可以直接使用,但是有些镜像需要登录账号或通过部署才能获取到镜像地址,可根据下方表格中的文档进行操作,然后加入到registry-mirrors中即可
| 官网/文档 | 收费 | 说明 |
|---|---|---|
| GitHub仓库-README即文档 Docker镜像地址 |
自建 | 推荐,HubProxy,开源,灵活强大 多功能代理加速服务,提供 Docker 镜像加速、GitHub 加速、下载离线镜像等功能。一个二进制文件实现所有功能,支持仓库审计。流式转发,无缓存。 |
| GitHub仓库-README即文档 Docker镜像地址 官网 |
自建 | 不推荐,KSpeeder,未开源 多镜像并发下载,动态负载均衡,断点续传支持,Docker镜像代理服务 有Plus付费版 |
| 参考文档-仅看 步骤一:获取镜像加速器地址 即可 | 免费 | 推荐,阿里云镜像,需要登录获取 |
| 官网 | 免费 | 轩辕镜像,需要登录获取 |
| 官网 | 收费 | 轩辕镜像,需要登录获取 |
| 容器镜像监控 | 聚合 | 一个Docker镜像监控列表 |
| 容器镜像加速器监控 | 聚合 | 一个Docker镜像监控列表 |
| Docker 镜像加速服务整理 | 聚合 | 需登录 LINUX DO 且 信任等级>=1 |
-
添加镜像源配置,直接全选复制命令并粘贴执行
❗❗❗ 若
daemon.json文件已存在,将覆盖已有配置,需自行确认是否可直接覆盖,否则请手动编辑配置mkdir -p /etc/docker && tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.1ms.run", "https://docker.m.daocloud.io", "https://ghcr.nju.edu.cn", "https://proxy.vvvv.ee", "https://hub1.nat.tf", "https://docker.1panel.live", "https://docker.mirror.mfym.tk", "https://hub.rat.dev", "https://docker.amingg.com" ], "dns" : [ "114.114.114.114", "8.8.8.8", "8.8.4.4" ] } EOF
-
重载配置并重启Docker
systemctl daemon-reload && systemctl restart docker -
验证配置
# 随便拉一个镜像测试一下即可 # 能成功拉下来就算成功,因为目前docker.io是被墙了的,docker pull拉不下来任何东西 docker pull alpine # 或执行如下命令 docker info # 如果从结果中看到了类似如下内容,说明配置成功 Registry Mirrors: [...] https://xxx.xx.xx
就类似设置系统代理一样,设置后可以直接访问外网,但对于Docker无效,因此需要单独配置Docker自身的代理
理论上可以解决Docker自身的所有网络问题:
pullpushlogin等配置代理后,可以无需 配置镜像源
-
创建配置文件
mkdir -p /etc/systemd/system/docker.service.d vi /etc/systemd/system/docker.service.d/http-proxy.conf
-
编辑文件,新增如下内容
[Service] Environment="HTTP_PROXY=http://192.168.1.2:10808" Environment="HTTPS_PROXY=http://192.168.1.2:10808" Environment="NO_PROXY=localhost,127.0.0.1"
-
重载配置并重启Docker
systemctl daemon-reload && systemctl restart docker -
验证配置
# 执行命令 docker info|sed -r '/Name/,$ !d' # 查看得到的结果,是否含义刚刚配置的代理信息,形如下 Name: DESKTOP-E41TLDQ ID: cbfb0aa8-76b8-42df-a21c-986c9fcf2bed Docker Root Dir: /var/lib/docker Debug Mode: false HTTP Proxy: http://192.168.1.2:10808 HTTPS Proxy: http://192.168.1.2:10808 No Proxy: localhost,127.0.0.1 Experimental: false Insecure Registries: ::1/128 127.0.0.0/8 Live Restore Enabled: false # 亦可随便拉一个镜像测试 # 能成功拉下来就算成功,因为目前docker.io是被墙了的,docker pull拉不下来任何东西 docker pull alpine # 也可以尝试验证其他命令是否正常可用,例如 docker login -u username docker push xxx/xxx:latest
默认使用的基础镜像是各自的Debian系轻量镜像,详情可查看(优化并构建的镜像列表及基础镜像) 配置文件
若默认的优化的镜像,不满足你的需求,支持完全自定义的优化,可继续往下看
本仓库已默认优化如下镜像,可直接使用(可能比列出的版本多,具体可查看DockerHub各个仓库页的Tags)
-
8111721
-
-
3.8.6 + jdk83.8.6 + jdk113.8.6 + jdk17 -
3.9.12 + jdk83.9.12 + jdk113.9.12+ jdk173.9.12 + jdk21
-
-
3.10.11
-
24.12.0
-
1.28.1
-
主要关注如下几个文件即可
-
base.sh
-
这是一个优化脚本
-
针对系统级别的优化,例如:各个系统的包管理器、别名等
-
所有的镜像都将执行此脚本进行优化
-
-
base-*.sh
- 这是一个优化脚本
- 针对不同的镜像类型的优化,例如:
base-python.sh就是优化Python的容器 - 需以
base-开头,后方的名称可任意命名,例如:base-admin.shbase-xxx.sh皆可,只要在执行优化脚本时指定正确的base名称即可
-
build.sh
-
这是执行优化的入口
-
基于
base*.sh执行优化并构建 -
通过
sh build.sh -h查看脚本用法 更多示例可查看 配置文件 -
亦可使用
base build.sh或chmod +x build.sh && ./build.sh执行# 有 * 的表示必须的参数 Usage: build.sh <option> <value> -b --base : * 需要构建的镜像类型,对应 base-xxx.sh 系列脚本 -i --image : * 基于base使用的基础镜像,需要优化的镜像(一般是来自DockerHub的轻量镜像) -t --target : * 构建的产物,构建后的最终镜像(未指定tag,默认将为latest) imagename<:tag> -bf --platforms : 指定构建的平台,多个以','分隔,默认构建当前单一平台 注意:仅开启buildx时才会生效 -bx --buildx : 使用buildx执行构建 -bp --push : 构建后同时执行推送 -h --help : 帮助信息 # 示例 # 使用 base.sh + base-java.sh 进行优化 # 基于 jre8 的 openjdk:8u342-jre-slim 镜像 # 最终生成的镜像为 candymuj/java:8 # -bf linux/amd64,linux/arm64 -bx : 使用buildx执行多平台构建 # -bp : 构建成功后推送到DockerHub sh build.sh -b java -i openjdk:8u342-jre-slim -t candymuj/java:8 -bf linux/amd64,linux/arm64 -bx -bp
-
-
-
所有的文件名建议不要有空格并且全小写
-
了解各个文件的作用后,你就可以在使用时根据自己的需求自行定制
完全私有化、完全自定义的优化并构建自己的镜像
你可以调整/新增优化脚本,以满足自己的需求
tips: 推送到DockerHub时,若仓库不存在,将在推送时自动创建,因此无需手动创建Hub仓库
-
Fork 本项目
-
启用 Actions
-
配置DockerHub账号
必须配置,当使用 Actions 时,若不推送到仓库,则毫无意义;若无需推送请使用 本地镜像优化 方式
前往 Add Actions Secret 添加如下变量
DOCKER_USERNAME: 用户名DOCKER_PASSWORD: 密码
-
(可选) 若需要自定义优化或新增
base-*.sh脚本,则自行调整脚本后推送至仓库再触发构建 -
前往 Actions Workflows 手动触发构建
-
默认构建:不配置任何参数,将执行默认构建;构建的镜像就是 开箱即用中的镜像
-
自定义构建:添加参数并且
build.sh中的必填参数都配置后,将根据参数构建并优化单个镜像
-
没有账号或不想创建DockerHub账号、部分镜像可能涉及到隐私/保密等其他因素导致镜像仅在服务器本地存在,那么此时就可使用此方式优化并构建自己的镜像
同时也支持完全自定义:同:基于GitHub Actions
- 克隆/下载本项目
- (可选) 若需要自定义优化或新增
base-*.sh脚本,则自行调整脚本后再执行后续操作 - 执行
build.sh用法详见:了解项目
并非只有Docker镜像会遇到网络问题,部分情况下国内的服务器也会出现
包管理器Python等工具的网络问题,此时可以直接运行此仓库的优化脚本实现优化
- 克隆/下载本项目
- (可选) 若需要自定义优化或新增
base-*.sh脚本,则自行调整脚本后再执行后续操作 - 执行
bash.sh进行系统基础优化 - 执行
bash-*.sh进行其他环境优化
若有疑问或更好的建议,欢迎提交 Issue 和 Pull Requests!
