跳到内容
7️⃣docker 自建镜像

7️⃣docker 自建镜像

这里是半山灯的博客,这篇文章介绍了自建 Docker 镜像加速的四种实用方法,主要用于解决国内访问官方源不稳定或无法访问的问题。文章先说明了自建背景,然后分别介绍了使用国外 VPS 自建 registry 缓存镜像、利用 Cloudflare Worker 搭建代理、直接配置 Docker 代理,以及通过 GitHub Action 将镜像转存至阿里云或腾讯云私有仓库的具体操作。每种方法都附有详细的步骤、代码示例和注意事项,结构清晰、实践性强,适合不同需求和权限的用户参考使用。

docker

master,这是我的小站,欢迎访问哦~~

本文仅记录 docker 自建镜像的方法

原因 不可明说,已知 docker,npn,pip 均在间接性抽风,所以自建,本文仅记录自建 docker 镜像的方法

1、利用国外 vps 自建

介绍

由于 Cloudflare 在中国大陆的互联性并不是非常理想,所以在有中国优化线路的服务器上搭建一个加速服务可能对大多数人来说才是最优解。本文介绍 reigistry 方式

项目地址

https://github.com/bboysoulcn/registry-mirror

docker 教程

  1. 进入 docker 目录
    • 如果你想要启动所有的镜像仓库直接执行 docker-compose up -d
    • 但是你想要单独代理某一个仓库就直接进入那个文件夹
    • cd dockerhub
    • docker-compose up -d

k8s 教程

都在用 k8s 了,还想要教程?

注意

大家可以看下配置文件 默认 168h 小时之后会清理缓存,也就是你拉取的镜像缓存

2、利用利用 Cloudflare Worker 搭建

  1. 前提条件:需要准备一个域名和一个 Cloudflare 账号
  2. 编写 Cloudflare Worker 脚本
  1. 注意:Cloudflare ip 不一定被墙也不一定没墙,自用少用

3、直接配置 Docker 代理

  1. 环境问题

假设 SOCKS 代理地址为 127.0.0.1:1000,HTTP 代理地址为 127.0.0.1:2000 首先要确认的是本机是否可以连接到 socks 和 http 代理。用以下指令测试节点有效性

# SOCKS 代理
curl -x socks5://127.0.0.1:1000 ip.sb
# HTTP 代理
curl -x 127.0.0.1:2000 ip.sb
#代用户认证的SOCKS代理
curl -x socks5://Username:Password@127.0.0.1:1000 ip.sb

如果返回的是代理的出口 IP 而不是本机 IP,则代表连接成功 2. 配置 Docker 镜像代理

  • 首先创建 dockerd 相关的 systemd 目录,这种 .d 目录下的配置将覆盖默认配置
sudo mkdir -p /etc/systemd/system/docker.service.d
  • 新建配置文件 http-proxy.conf
sudo vim /etc/systemd/system/docker.service.d/proxy.conf
  • 添加配置
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:2000/"
Environment="HTTPS_PROXY=http://127.0.0.1:2000/"
Environment="NO_PROXY=127.0.0.1,localhost,192.168.*,*.example.com"
# 如果 `NO_PROXY=*`,那么所有请求都将不通过代理服务器
  • 最后重新加载配置文件,重启 Dockerd 才能生效
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl show --property=Environment docker
  1. 配置 Docker 容器代理

在容器运行阶段,如果需要代理上网,只需要加上环境变量,比如使用 docker-compose 的话,其配置文件里的环境变量,增加下面三部分即可。

yml
    environment:
        - http_proxy="192.168.1.11:2000"
        - https_proxy="192.168.1.11:2000"
        - no_proxy="localhost,127.0.0.1,.example.com"

这个能不能生效,还得看里面运行的服务,会不会主动撷取环境变量了。如果容器默认就使用代理,也可以配置 ~/.docker/config.json

json
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://proxy.example.com:2000",
     "httpsProxy": "http://proxy.example.com:2000",
     "noProxy": "localhost,127.0.0.1,.example.com"
   }
 }
}

4、利用 Github Action 将 DockerHub 镜像转存到阿里云/腾讯云私有仓库

介绍

使用 Github Action 将 DockerHub 镜像转存到阿里云私有仓库,供国内服务器使用,免费易用

项目地址

https://github.com/tech-shrimp/docker_image_pusher

  1. 配置
    • 配置阿里云
      • 登录阿里云容器镜像服务 : https://cr.console.aliyun.com/
      • 启用个人实例,创建一个命名空间(ALIYUN_NAME_SPACE)
      • 访问凭证–>获取环境变量 用户名(ALIYUN_REGISTRY_USER)
      • 密码(ALIYUN_REGISTRY_PASSWORD)
      • 仓库地址(ALIYUN_REGISTRY)
  • Fork 本项目
    • Fork 本项目:https://github.com/tech-shrimp/docker_image_pusher 点击 Action,启用 Github Action 功能 配置环境变量
    • 进入 Settings->Secret and variables->Actions->New Repository secret
    • 将上一步的 ALIYUN_NAME_SPACE,ALIYUN_REGISTRY_USER,ALIYUN_REGISTRY_PASSWORD,ALIYUN_REGISTRY 的值配置成环境变量
  1. 使用

打开 images.txt 文件,添加你想要的镜像,可以带 tag,也可以不用(默认 latest)文件提交后自动进入 Github Action 构建

  • 使用镜像 回到阿里云,镜像仓库,点击任意镜像,可查看镜像状态。(可以改成公开,拉取镜像免登录)
  • 在国内服务器 pull 镜像:
shell
docker pull registry.cn-shanghai.aliyuncs.com/study996/alpine
# 解释
# registry.cn-shanghai.aliyuncs.com 即 ALIYUN_REGISTRY
# study996 即 ALIYUN_NAME_SPACE
# alpine 即 images.txt 里面填的镜像