什么是仓库
Docker 仓库是用来包含镜像的位置,Docker提供一个注册服
务器(Register)来保存多个仓库,每个仓库又可以包含多个
具备不同tag的镜像。
阿里云镜像仓库的使用
1.获取加速器地址
使用阿里运镜像仓库时需要先注册一个帐号。登陆后进行操作。
搜索容器镜像服务。
进入页面后点击管理控制台。
这里可以得到一个镜像加速器的地址,在使用仓库时有这个加速器地址可以将速度大幅度提升。
2.使用加速器
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
[root@server1 docker]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://hily55dy.mirror.aliyuncs.com"]
}
加速器地址。
[root@server1 docker]# systemctl daemon-reload
[root@server1 docker]# systemctl restart docker
重启服务,之后就可以使用阿里云的在线仓库了。
3.使用在线仓库
使用在线仓库时当然得保证主机可以联网啦,下面我们使用在线仓库对镜像版本进行更新。
[root@server1 docker]# docker search nginx
查看资源。
[root@server1 docker]# docker history nginx:latest
查看nginx镜像的版本。
[root@server1 docker]# docker pull nginx
拉取最新版本的镜像。
查看版本已经更新到1.15了。
搭建私有仓库
Registry工作原理
index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在的registry的地址并放回给docker客户端,docker客户端再从registry下载镜像,在下载过程中 registry会去index校验客户端token的合法性,不同镜像可以保存在不同的registry服务上,其索引信息都放在index服务上。
Docker Registry有三个角色,分别是index、registry和registry,client
index | 负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。 |
registry | 是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service的Token的方式进行认证。 |
Registry Client | Docker充当registry客户端来维护推送和拉取,以及客户端的授权 |
搭建仓库
[root@server1 images]# docker load -i registry.tar
导入仓库镜像。
查看镜像层数信息,我们知道这个镜像使用的端口是5000端口。
[root@server1 images]# docker run -d --name registry -p 5000:5000 \
-v /opt/registry:/var/lib/registry registry:2.3.1
制作仓库,指定端口为5000,同时使用-v选项将/opt/registry挂载到容器内作为存放镜像的地方。
[root@server1 images]# docker tag rhel7:latest localhost:5000/rhel7
给镜像改个名字
上传镜像。
[root@server1 registry]# docker pull localhost:5000/rhel7
要使用镜像时直接拉取就可以了。
[root@server1 registry]# docker images
上传成功。
制作证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/hang.org.key \
-x509 -days 365 -out certs/hang.org.crt
制作证书,设置域名为hang.org。
[root@server1 docker]# vim /etc/hosts
因为修改了域名,所以要修改解析。
[root@server1 docker]# docker run -d \
> --restart=always \
> --name registry \
> -v /tmp/docker/certs:/certs \
> -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/hang.org.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/hang.org.key \
> -p 443:443 \
> -v /opt/registry:/var/lib/registry \
> registry:2.31
可以发现443端口打开了。
[root@server1 docker]# cd /etc/docker/
[root@server1 docker]# ls
daemon.json key.json
[root@server1 docker]# mkdir certs.d
[root@server1 docker]# cd certs.d/
[root@server1 certs.d]# ls
[root@server1 certs.d]# mkdir hang.org
[root@server1 certs.d]# cd hang.org/
[root@server1 hang.org]# ls
[root@server1 hang.org]# cp /tmp/docker/certs/hang.org.crt ca.crt
创建目录,配置文件。
[root@server1 hang.org]# docker tag game2048:latest hang.org/game2048
[root@server1 hang.org]# docker push hang.org/game2048
上传镜像,成功上传则证书设置成功。
设置加密
[root@server1 docker]# pwd
/tmp/docker
[root@server1 docker]# mkdir auth
在默认目录中创建auth目录。
[root@server1 docker]# docker run --entrypoint htpasswd \
registry:2.3.1 -Bbn yys redhat > auth/htpasswd
创建用户和密码,其中yys是用户名,redhat是密码。
[root@server1 docker]# docker rm -f registry
[root@server1 docker]# docker run -d --restart=always \
--name registry -v /tmp/docker/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/hang.org.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/hang.org.key -p 443:443 \
-v /opt/registry:/var/lib/registry -v /tmp/docker/auth:/auth -e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry:2.3.1
进行加密认证。
此时创建了用户但并未登陆。
未登陆时上传镜像是失败的。
[root@server1 docker]# docker login hang.org
Username: yys
Password:
输入前面设置的帐号密码进行登陆。
登陆完成后就可以正常上传镜像了。
登陆成功后会查看到登陆的用户信息。