pull 仓库 设置docker_docker私有仓库搭建并且配置仓库认证

什么是Docker Registry:

Docker Registry由三个部分组成:index,registry,registry client。

可以把Index认为是负责登录、负责认证、负责存储镜像信息和负责对外显示的外部实现,而registry则是负责存储镜像的内部实现,而Registry Client则是docker客户端。

私有仓库搭建

1.安装Docker Registry,Docker版本需要1.6以上:

安装方法详见我的另一文章centos7 docker安装,我这边已经安装好了。

docker --version

Docker version 1.12.5, build 7392c3b

2.安装Registry,并启动(启动方法具体见官方的registry):

docker pull registry

默认情况下,会将仓库存放于容器内的/var/lib/registry(官网Dockerfile中查看)目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/var/lib/registry下,如下:

docker run -d -ti --restart always --name docker-hub -p 5000:5000 -v /docker-hub/registry:/var/lib/registry registry

3.可以用docker images 查看镜像,docker ps -a查看容器启动情况。

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

registry latest c9bd19d022f6 9 weeks ago 33.27 MB

hello-world latest c54a2cc56cbb 5 months ago 1.848 kB

[root@localhost ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

7411a02041aa registry "/entrypoint.sh /etc/" 3 minutes ago Up 3 minutes 0.0.0.0:5000->5000/tcp docker-hub

4.访问私有仓库,由于刚启动还没有提交镜像,所以这里显示为空。

[root@localhost ~]# curl -XGET 127.0.0.1:5000/v2/_catalog

{"repositories":[]}

查看镜像版本列表

curl -XGET 127.0.0.1:5000/v2/image_name/tags/list

5.push镜像到仓库;

[root@localhost ~]# docker tag hello-world 127.0.0.1:5000/helloworld

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

registry latest c9bd19d022f6 9 weeks ago 33.27 MB

127.0.0.1:5000/helloworld latest c54a2cc56cbb 5 months ago 1.848 kB

hello-world latest c54a2cc56cbb 5 months ago 1.848 kB

[root@localhost ~]# docker push 127.0.0.1:5000/helloworld

The push refers to a repository [127.0.0.1:5000/helloworld]

a02596fdd012: Pushed

latest: digest: sha256:a18ed77532f6d6781500db650194e0f9396ba5f05f8b50d4046b294ae5f83aa4 size: 524

[root@localhost ~]# curl 127.0.0.1:5000/v2/_catalog

{"repositories":["helloworld"]}

[root@localhost ~]#

我上传了一个测试的helloworld镜像,这边再查询的就可以看见了。

如果出现无法从私有仓库pull镜像或无法push到私有仓库的问题,如下报错情况。

[root@localhost ~]# docker pull 192.168.1.163:5000/hellworld

Using default tag: latest

Error response from daemon: Get https://192.168.1.163:5000/v1/_ping: http: server gave HTTP response to HTTPS client

[root@localhost ~]#

这是因为我们启动的registry服务不是安全可信赖的。这是我们需要修改docker的目录/etc/docker/下创建 daemon.json 文件,添加下面的内容:

$ tee /etc/docker/daemon.json << EOF

{ "insecure-registries":["192.168.1.163:5000"] }

EOF

保存后重启docker。

systemctl restart docker.service

然后再PULL即可。

私有仓库认证

私有仓库搭建以后其他所有客户端均可以push、pull,docker官方提供认证方法对docker仓库进行权限保护。

我这只用的用户权限限制,官网配置是TLS和用户权限验证一起使用。

1.删除原启动的仓库容器

docker stop docker-hub

docker rm -f docker-hub

2.创建存放密码账号的文件

mkdir -p /docker-hub/auth

docker run --entrypoint htpasswd registry -Bbn testuser testpassword > auth/htpasswd

3.重新启动docker-hub容器

docker run -d -p 5000:5000 --restart=always --name docker-hub \

-v /docker-hub/registry:/var/lib/registry \

-v /docker-hub/auth:/auth \

-e "REGISTRY_AUTH=htpasswd" \

-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \

-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \

registry

4.现在客户端再pull、push就会提示报错,无法提交,需要登录私有仓库。

登录

docker login -u testuser -p testpassword 192.168.1.163:5000

退出

docker logout 192.168.1.163:5000

认证以后无法直接在服务器查看 curl 127.0.0.1:5000/v2/_catalog 仓库的镜像,会出现报错,但是可以用浏览器访问。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker私有仓库是一种用于存储、管理和分发Docker镜像的服务器。搭建一个私有仓库可以帮助开发者更好地管理自己的Docker镜像,也可以提高镜像的安全性。 以下是搭建Docker私有仓库的步骤: 1. 安装Docker 首先需要在服务器上安装Docker,可以根据操作系统类型选择合适的安装方法。 2. 下载Docker Registry镜像 在Docker Hub上下载Docker Registry镜像,可以使用以下命令: ``` docker pull registry:2 ``` 3. 运行Docker Registry容器 使用以下命令运行Docker Registry容器: ``` docker run -d -p 5000:5000 --restart=always --name registry registry:2 ``` 这里使用了-p参数将容器的5000端口映射到主机的5000端口,使得外部可以通过主机的IP地址和端口号访问私有仓库。使用--restart参数可以设置容器在重启后自动启动。使用--name参数可以指定容器的名称。 4. 配置Docker客户端 为了能够访问私有仓库,需要在Docker客户端中配置私有仓库的地址。可以通过以下方式修改Docker客户端的配置文件: ``` vi /etc/docker/daemon.json ``` 在文件中添加以下内容: ``` { "insecure-registries" : ["your-registry:5000"] } ``` 这里的your-registry是私有仓库所在的主机IP地址或域名。 5. 推送和拉取镜像 现在可以使用Docker客户端推送和拉取镜像到私有仓库了。推送镜像使用以下命令: ``` docker tag your-image your-registry:5000/your-image docker push your-registry:5000/your-image ``` 这里的your-image是要推送的镜像名称。拉取镜像使用以下命令: ``` docker pull your-registry:5000/your-image ``` 这里的your-image是要拉取的镜像名称。 至此,Docker私有仓库搭建完成。需要注意的是,私有仓库的安全性需要开发者自行维护,例如限制访问权限、定期备份等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值