目录
一、Docker 安装和配置
这里服务器系统以 Ubuntu 为例,CentOS,MacOS等系统请移步:《其他系统Docker安装教程》
-
ubuntu 系统安装 Docker 命令:
sudo apt-get install -y docker.io
-
配置对外开放IP:0.0.0.0,执行下面命令,按图修改
vim /lib/systemd/system/docker.service
修改内容如下图:
修改配置后,执行下面两条命令重启 Docker 服务systemctl daemon-reload service docker restart
-
配置阿里云 Docker 镜像源
详情请参考☞:【Docker镜像加速】之 阿里云 解决 docker pull 镜像速度慢的问题vim /etc/docker/daemon.json
新增以下内容,如图所示:
{ "registry-mirrors": ["https://6kx4zyno.mirror.aliyuncs.com"] # 配置阿里云加速器 }
每次修改配置后,记得重启 Docker 服务
systemctl daemon-reload service docker restart
二、需认证私有 Docker 仓库搭建步骤
2.1 第一步:在服务器上,拉取registry镜像
-
拉取命令如下,如图
docker pull registry
2.2 第二步:创建存放认证用户和密码文件夹
- 创建目录命令如下
mkdir /my_registry/auth -p
2.3 第三步:创建密码验证文件
-
创建认证文件命令如下
docker run --entrypoint htpasswd registry -Bbn USERNAME PASSWORD > /my_registry/auth/htpasswd
2.2 第四步:指定认证配置并启动registry仓库
-
启动 registry 容器,命令如下
docker run -d -p 8888:5000 --restart=always --name my_registry \ -v /my_registry/registry:/var/lib/registry \ -v /my_registry/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \ registry
注意: registry 内部对外开放端口是5000,默认情况下,镜像存放在容器的/var/lib/registry目录下(官网 Dockerfile 中可以查看),这样如果容器被删除,则存放于容器中的镜像也会丢失。
-
测试搭建的仓库是否需要认证
在浏览器中直接输入服务器IP:8888/v2/_catalog
,在弹窗里输入用户名和密码登录后,即可查看当前搭建仓库中存放的镜像列表(注意服务器需开启端口8888入站规则),如图:
三、需认证的私有仓库上传与下载
-
登录私有仓库
docker login -u username -p password 服务器IP:端口
-
登录后方可上传镜像
利用 docker tag 命令给需要上传的镜像打标签
docker tag IMAGE_ID 服务器IP:端口/IMAGE_NAME
利用 docker push 上传刚刚 tag 的镜像
docker push 服务器IP:端口/IMAGE_NAME
注意: 如果push出现类似https的错误,请在/etc/docker/daemon.json文件里添加"insecure-registries":["服务器IP:端口"]
,重新尝试;
-
登录后方可下载镜像
拉取私有仓库镜像命令如下:
docker pull 服务器IP:端口/IMAGE_NAME
-
删除镜像步骤
- 查询镜像名称:
curl <仓库地址>/v2/_catalog
curl -XGET http://127.0.0.1:8888/v2/_catalog # 返回响应 {"repositories":["python3"]}
- 查询镜像tag(版本):
curl <仓库地址>/v2/<镜像名>/tags/list
curl http://127.0.0.1:8888/v2/python3/tags/list # 返回响应 {"name":"python3","tags":["latest"]}
- 查询镜像digest_hash: 注意 Docker-Content-Digest 的值
curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET <仓库地址>/v2/<镜像名>/manifests/<tag>
curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET http://127.0.0.1:8888/v2/python3/manifests/latest # 返回响应 HTTP/1.1 200 OK Content-Length: 527 Content-Type: application/vnd.docker.distribution.manifest.v2+json Docker-Content-Digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649 Docker-Distribution-Api-Version: registry/2.0 Etag: "sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649" X-Content-Type-Options: nosniff Date: Fri, 19 Jul 2020 19:09:44 GMT
- 删除镜像API:
curl -I -X DELETE "<仓库地址>/v2/<镜像名>/manifests/<镜像digest_hash,即上面查询的sha256值>"
curl -I -XDELETE http://127.0.0.1:8888/v2/python3/manifests/sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649 # 返回响应 HTTP/1.1 202 Accepted Docker-Distribution-Api-Version: registry/2.0 X-Content-Type-Options: nosniff Date: Fri, 19 Jul 2020 19:10:56 GMT Content-Length: 0
- 操作完毕后,退出登录
docker logout 服务器IP:端口