在严格限制的网络环境中自建docker仓库及代理dockerhub
在没有未来的世界中创建 Docker 镜像代理
实现 Docker 镜像代理的工具有很多,但相对通用的却不多。本文将介绍如何使用 Docker Compose 快速搭建一个镜像代理,此方法也适用于其他软件源的代理。
如果你仅需要对单台机器设置docker网络代理,请查看这篇文章 原始链接 永久链接
所需软件
为了快速搭建环境,我们将使用 Docker Compose。对于 Docker Compose 的安装,这个先有鸡还是先有蛋的问题,还是交给魔法解决吧。以下是配置文件 docker-compose.yml
:
services:
nexus:
image: sonatype/nexus3:latest
user: 0:0 # 仅因为该 yml 文件放在 /root 目录下,Docker 容器用户无权限,如放在其他目录且注重安全可删除此行
container_name: nexus3
restart: always
ports:
- 1024:8081
- 8001:8001
volumes:
- ./nexus-data:/nexus-data
建议使用 Nginx 进行反向代理,并设置好单个请求文件的最大限制。
本文不涉及反向代理配置。
启动并配置
启动
使用以下命令启动服务:
docker compose up
启动后,使用以下命令获取管理员密码:
docker exec -it nexus3 /bin/bash
cat /nexus-data/admin.password
获取到的字符串即为 admin
用户的密码。首次登录时会要求修改密码。
在设置过程中,会询问是否允许匿名访问。如果只需要 Docker 仓库,建议设置为不允许,否则可以允许。但最终使用 Docker 仓库仍需执行 docker login
。
配置
配置 HTTP 代理
首先配置 HTTP 代理,访问 [server-ip]:1024/#admin/system/http
,在 Proxy Settings 中填写正确的 HTTP 代理。
配置仓库
- 删除无用的镜像仓库。
- 点击 “Create repository”,选择 “docker (proxy)”。
-
配置如下:
- Name: docker-proxy
- HTTP: 8001
- Allow anonymous docker pull: false
- Enable Docker V1 API: 可自行决定是否开启
- Remote storage: https://registry-1.docker.io
- Docker Index: Use proxy registry (specified above) 或 Use Docker Hub
- Allow Nexus Repository Manager to download and cache foreign layers: true
其余保留默认配置。
创建 Docker 用户
创建角色
- 进入 http://[server-ip]:1024/#admin/security/roles
- 点击 “Modify Applied Privileges”。
- 搜索
docker
,勾选所有包含docker
字符的选项,或挑选更细致的规则。
创建用户
- 进入 http://[server-ip]:1024/#admin/security/users
- 添加本地用户并赋予
docker
角色。
客户端配置
-
创建 Docker 配置文件目录:
sudo mkdir -p /etc/docker && touch /etc/docker/daemon.json
-
编辑
/etc/docker/daemon.json
,由于未配置 SSL 证书,需添加不安全标识:{ "insecure-registries": [ "[server-ip]:8001" ], "registry-mirrors": [ "http://[server-ip]:8001" ] }
-
重启 Docker:
systemctl restart docker
-
使用前面设置的 Docker 用户登录 Docker:
docker login [server-ip]
-
尝试拉取镜像,并观察代理服务器流量变化:
docker pull [server-ip]:8001/library/mysql