SKYzjjzs的博客

个人的资源教程备份 登录

Docker 部署加速网站

教程来源地址https://github.com/iCloudBot/DockerRescue/tree/main/2.Deploy-Docker-Proxy#11-ip%E4%BB%A3%E7%90%86%E4%B8%8D%E7%BB%91%E5%AE%9A%E5%9F%9F%E5%90%8D

1.部署 Docker 加容器

1.1 IP 代理(不绑定域名)

使用 IP 作为加速器地址,不绑定任何域名。

若部署的宿主机 IP 地址为: 192.168.3.33 ,只需将容器内部 443 端口映射出来即可, 80 端口可不作映射,为避免宿主机 443 端口被占用,示例中 出端口映射到 6443 上。执行完下面指令后,访问 https://192.168.3.33:6443 ,成功加载页面,则部署完成。

docker run -d --name crproxy \
    --restart always \
    -p 6443:443 \
    cleverest/crproxy

如果需要开启 Docker Hub 站内访问,则加上环境变量 -e dockerhub=true ,请根据需求自行增加或删减相对应的变量。( 推荐方式

执行完下面指令后,页面访问地址:

  • https://192.168.3.33:6443
  • https://192.168.3.33:6443/main/
docker run -d --name crproxy \
    --restart always \
    -p 6443:443 \
    -e dockerhub=true \
    cleverest/crproxy

如果 服务器 使用了代理梯子,则需要在运行时加上代理的地址。以 Clash 为例:IP:192.168.3.88端口:7890 ,则

docker run -d --name crproxy \
    --restart always \
    -p 6443:443 \
    -e http_proxy=http://192.168.3.88:7890 \
    -e https_proxy=http://192.168.3.88:7890 \
    -e no_proxy=127.0.0.1,localhost \
    -e HTTP_PROXY=http://192.168.3.88:7890 \
    -e HTTPS_PROXY=http://192.168.3.88:7890 \
    -e NO_PROXY=127.0.0.1,localhost \
    cleverest/crproxy

2.拉取测试

📢 注意事项: 若配置了加速器地址,并且镜像源于 Docker Hub 时,可以无需加上域名前缀,其他镜像源站必须加上前缀,例如:

  • 源于 Docker Hub 镜像地址: alpine:3.18adguard/adguardhome ,则
docker pull alpine:3.18
docker pull adguard/adguardhome
# 当然也是可以加上前缀,如:
docker pull 192.168.3.33:6443/docker.io/alpine:3.18
docker pull 192.168.3.33:6443/docker.io/adguard/adguardhome
  • 拉取非 Docker Hub 平台镜像时, 必须加域名前缀,各个知名镜像站拉取测试,如下:
# Google
docker pull 192.168.3.33:6443/gcr.io/kaniko-project/executor:debug
# GitHub
docker pull 192.168.3.33:6443/ghcr.io/openfaas/queue-worker
# Kubernetes
docker pull 192.168.3.33:6443/k8s.gcr.io/etcd:3.5.7-0
# 新Kubernetes
docker pull 192.168.3.33:6443/registry.k8s.io/kube-apiserver:v1.30.0
# Red Hat
docker pull 192.168.3.33:6443/quay.io/calico/cni
# Microsoft
docker pull 192.168.3.33:6443/mcr.microsoft.com/powershell
# Elastic 
docker pull 192.168.3.33:6443/docker.elastic.co/elasticsearch/elasticsearch:8.1.0
# NVIDIA
docker pull 192.168.3.33:6443/nvcr.io/nvidia/cuda:12.1.0-runtime-ubuntu20.04

3.域名绑定

3.1 推荐反向代理方式(博主自己用的宝塔面板自带的反向代理)(下面方法自行验证)

若域名为 www.example.com ,代理的宿主机 IP 地址: https://192.168.3.33:6443 ,代理配置如下

server {
    listen 80;
    server_name www.example.com;

    # Redirect HTTP to HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name www.example.com;

    ssl_certificate /你的证书路径/cert.pem;
    ssl_certificate_key /你的证书路径/privkey.pem;

    location / {
        proxy_pass https://192.168.3.33:6443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3.2 不使用反向代理方式

不使用反向代理方式,就有必要映射 443 端口,同时映射证书文件,并且加上域名环境变量: -e domain=你的域名(www.example.com)

例如,证书文件所在路径: /path/to/your_cert.crt /path/to/your_privkey.key ,则映射证书的地址应为: -v /path/to/your_cert.crt:/etc/nginx/certs/cert.pem -v /path/to/your_privkey.key:/etc/nginx/certs/privkey.pem

⚠注意:容器内部的证书地址及名称已经固定,不能作任何的修改。

docker run -d --name crproxy \
	--restart always \
	-p 443:443 \
	-e domain=你的域名(www.example.com) \
	-v /你的证书路径/证书文件cert.pem:/etc/nginx/certs/cert.pem \
	-v /你的证书路径/证书文件privkey.pem:/etc/nginx/certs/privkey.pem \
	cleverest/crproxy

4.其他证书格式

4.1 PEM 格式的证书

对于 PEM 格式的证书,直接将证书文件挂载到容器内的固定路径:

docker run -d --name crproxy \
	--restart always \
	-p 443:443 \
	-e domain=www.example.com \
	-v /path/to/your_cert.pem:/etc/nginx/certs/cert.pem \
	-v /path/to/your_privkey.pem:/etc/nginx/certs/privkey.pem \
	cleverest/crproxy

4.2 PFX/P12 格式的证书

如果你的证书是 PFX/P12 格式,你需要先将其转换为 PEM 格式。以下是转换命令:

openssl pkcs12 -in /path/to/your_cert.pfx -nocerts -out /path/to/your_privkey.pem
openssl pkcs12 -in /path/to/your_cert.pfx -clcerts -nokeys -out /path/to/your_cert.pem

然后使用上述挂载 PEM 证书的方式运行容器。

4.3 CRT 和 KEY 格式的证书

对于 CRT 和 KEY 格式的证书,可以直接将其映射为 PEM 格式:

docker run -d --name crproxy \
	--restart always \
	-p 443:443 \
	-e domain=www.example.com \
	-v /path/to/your_cert.crt:/etc/nginx/certs/cert.pem \
	-v /path/to/your_privkey.key:/etc/nginx/certs/privkey.pem \
	cleverest/crproxy

4.4 JKS 格式的证书

如果你的证书是 JKS 格式,你需要先将其转换为 PEM 格式。以下是转换命令:

keytool -importkeystore -srckeystore /path/to/your_cert.jks -srcstoretype jks -deststoretype pkcs12 -destkeystore /path/to/your_cert.p12
openssl pkcs12 -in /path/to/your_cert.p12 -nocerts -out /path/to/your_privkey.pem
openssl pkcs12 -in /path/to/your_cert.p12 -clcerts -nokeys -out /path/to/your_cert.pem

然后使用上述挂载 PEM 证书的方式运行容器。

评论
留下你的脚步
推荐阅读