1.依赖
首先,你需要安装docker环境。可参考:Linux不同发行版的Docker安装
其次,你需要准备一台自己的Linux服务器,这样可以方便你的镜像拉取和上传。
2.正文
2.1 创建文件夹
用于存储你的仓库数据
sudo mkdir -p /opt/docker-registry/data
2.2 运行Docker仓库容器
此命令将从Docker Hub上拉取最新的registry:2镜像,并在后台运行容器,将本地的5000端口映射到容器内的5000端口,以便其他主机可以访问该仓库
sudo docker run -d -p 5000:5000 --name registry -v /opt/docker-registry/data:/var/lib/registry registry:2
2.3 配置Docker客户端
编辑Docker配置文件/etc/docker/daemon.json,
如果该文件不存在,则创建一个新文件,并将以下内容添加到该文件中。
此命令将允许Docker客户端向你的仓库发送未加密的HTTP请求。
注意:记得将“my-registry-domain.com”替换为你远端仓库的IP地址或域名
{
"insecure-registries" : ["my-registry-domain.com:5000"]
}
2.4 重启Docker服务
sudo systemctl restart docker
2.5 本地镜像推送仓库
注意:记得将“my-registry-domain.com”替换为你的仓库的IP地址或域名
sudo docker tag <image-name> my-registry-domain.com:5000/你的镜像名称
sudo docker push my-registry-domain.com:5000/你的镜像名称
2.6 本地拉取仓库镜像
sudo docker pull 你的仓库IP或域名:5000/你的镜像名称
注意:如果你的仓库需要身份验证,你需要先进行登录
sudo docker login 你的仓库IP或域名:5000
3.扩展
Docker仓库支持两种认证机制:基于HTTP基本认证(Basic Authentication)的认证和基于Token的认证(Token Authentication)。
如果你在创建仓库时没有设置账号密码,那么默认情况下,Docker仓库将启用基于Token的认证机制。这种机制允许你在未使用用户名和密码的情况下访问仓库,而使用令牌来代替身份验证。
如果你需要禁用令牌认证,可以按照以下步骤在仓库中启用基本认证:
1.在Docker仓库容器中创建一个密码文件
sudo mkdir -p /opt/docker-registry/auth
sudo docker run --entrypoint htpasswd registry:2 -Bbn <username> <password> > /opt/docker-registry/auth/htpasswd
此命令将使用registry:2镜像创建一个密码文件,并将其保存到/opt/docker-registry/auth/htpasswd。记得替换“<username>”和“<password>”。
2.停止并删除原来的Docker仓库容器,并创建一个新的容器,以启用基本认证
sudo docker stop registry
sudo docker rm registry
sudo docker run -d \
-p 5000:5000 \
--name registry \
--restart always \
-v /opt/docker-registry/data:/var/lib/registry \
-v /opt/docker-registry/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2