我们有两台虚拟机:1912.168.209.130和192.168.209.131
实验目的是:在131上搭建一个私有仓库,使130和131能够正常访问并可上传下载自己本地的镜像。
1,首先我们要在131获取一个registry 镜像,这里直接从阿里云官方仓库下载。下载之前,同样需要先配置/etc/docker/daemon.json
{
"registry-mirrors": ["https://wyrsf017.mirror.aliyuncs.com"]
}
然后登录阿里云:
[root@localhost ~]# docker login --username=一梦浮生1987 registry.cn-hangzhou.aliyuncs.com
Password:
.Login Succeeded
最后pull一个registry 镜像
docker pull registry
2,查看下载的镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/registry latest 1fd8e1b0bb7e 6 weeks ago 26.2 MB
3,启动镜像
首先,要在本地创建一个用来存放镜像的目录,这里就指定为/data01
mkdir -p /data01
[root@localhost ~]# docker run -itd -p 5000:5000 --name=ymfsregistry --restart=always --privileged=true -v /data01:/var/lib/registry docker.io/registry
0c0f7970355339644be4df1d7b0cf926e0828b03c02f5046f8039c900b18d946
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c0f79703553 docker.io/registry "/entrypoint.sh /e..." 6 seconds ago Up 6 seconds 0.0.0.0:5000->5000/tcp ymfsregistry
[root@localhost ~]#
解释:
-p 5000:5000 指定registry容器端口5000映射宿主机端口5000
--name=ymfsregistry 给给容器起一个自己定义的名字
--restart=always 设置容器自动重启
--privileged=true centos7中的安全模块selinux把权限禁止了,加上这行是给容器增加执行权限
-v /data01:/var/lib/registry 将宿主机的/var/lib/registry挂载到容器的/data01,加入有删除容器的操作,已保存的镜像不会丢失。这里必须指定容器的目录为/var/lib/registry,因为镜像默认保存位置为/var/lib/registry。
docker.io/registry 镜像名称,可以自定义
4,在130上,给docker添加HTTPS访问协议
vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.209.131:5000"],
"registry-mirrors": ["https://wyrsf017.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker
[root@localhost ~]# netstat -ano | grep 5000
tcp6 0 0 :::5000 :::* LISTEN off (0.00/0/0)
发现宿主机5000端口已启动。
5,新建一个tag,把130上的NGINX镜像改个名称
docker tag nginx:v1 192.168.209.131:5000/nginx:v1
6.push镜像到本地仓库里
docker push 192.168.209.131:5000/nginx:v1
7.在131上下载刚从130push上去的nginx镜像
docker pull 192.168.209.131:5000/nginx:v1
成功了,发现可以下下来
我们进入宿主机的/data01/docker/registry/v2/repositories/nginx目录下,即可看到该nginx镜像,就算删除了docker容器,该镜像依然存在