如何手搓一个docker私服,解决被限制访问。

167 Visits / 0 Comments / Favorite

前不久刚换的镜像源,这二天又访问不了了,真的是太苦了。😕

既然开源的镜像源容易被X,何不自己搭建一个?说干就干。😄 这篇文章教大家如何手搓一个 Docker 加速服务器。前提条件是搞一个非大陆的服务器。现在很多云厂商aliyun等都有海外服务器购买。

安装Docker Docker compose

下面这里是安装 Docker 与 Docker compose 的方法,已安装的请忽略~

# Ubuntu / Debian 系
sudo apt-get update
sudo apt-get upgrade
CentOS、Rocky RHEL系列操作系统
yum update
yum upgrade
安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
安装 Docker compose
GayHub:https://github.com/docker/compose/releases/latest
参考GayHUB地址查找最新版本号,将下方的版本号修改为最新(不改也没啥事,可以忽略。。。)
sudo curl -L "https://github.com/docker/compose/releases/download/2.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 这里的版本号是基于2024年6月9日最新的 2.27.1
授予可执行权限
sudo chmod +x /usr/local/bin/docker-compose
测试
docker-compose -v
安装成功会显示 docker-compose 版本

搭建镜像加速服务器

新建一个docker-compose.yml文件

version: '3'
services:
  docker-registry:
    image: registry:2
    container_name: registry-server
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - /data/docker-registry:/data   # 数据存放目录
    environment:
      - REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io
      - REGISTRY_PROXY_USERNAME=dockerhub账户
      - REGISTRY_PROXY_PASSWORD=dockerhub密码
      - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data

因为Docker私服访问请求也要求是https,当然可以设置为http,但是为了后续节省麻烦。我们申请一个域名。然后再申请免费的SSL证书。

域名推荐aliyun购买,买.xyz域名只要7RMB第一年。

免费的SSL证书推荐:https://freessl.cn/

我们再使用nginx进行反向代理,配置文件如下:

#开启gzip压缩功能,目的:提高传输效率,节约带宽
gzip on;
#限制最小压缩,小于1字节文件不会压缩
gzip_min_length 1;
#定义压缩的级别(压缩比1-9(值越大压缩比越大),文件越大,压缩越多,但cpu使用占用会越多)
gzip_comp_level 4;
#定义压缩文件的类型
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
ssl_certificate     /etc/nginx/public.pem;
ssl_certificate_key /etc/nginx/private.pem;
server {
listen 80;
server_name xxx.com  www.xxx.com;
#核心代码
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
listen  443  ssl;
server_name xxx.com  www.xxx.com;
client_max_body_size 60M;
client_body_buffer_size 512k;
location / {
   #保留代理之前的host 包含客户端真实的域名和端口号
   proxy_set_header    Host  $host;
   #保留代理之前的真实客户端ip
   proxy_set_header    X-Real-IP  $remote_addr;
   #这个Header和X-Real-IP类似,但它在多级代理时会包含真实客户端及中间每个代理服务器的IP
   proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
   proxy_pass  http://www.xxx.com:5000;
}
}

Docker配置

编辑 /etc/docker/daemon.json 内容如下:

{
 "registry-mirrors": ["https://xxx.com"]
}

重新加载 systemd守护进程并重启 Docker

systemctl daemon-reload
systemctl restart docker

测试拉取

检查docker registry

image.png

拉取mysql镜像看看,速度一般般,因为服务器在US:

image.png

我的海外镜像服务器已经搭建好啦,如有需要地址的留言。

扫码_搜索联合传播样式-白色版.png

All comments

Top