利用Docker创建私有仓库及实现批量上传文件

目录

1.私有仓库创建

2.使用私有仓库上传镜像

1.批量上传指定镜像

 2.上传本地所有镜像

3.Tips


 

        Docker本地上传下载镜像一般可以通过公有仓库实现。但是如果想要将镜像不公开仅供一部分人使用,则可以建立私有仓库。

1.私有仓库创建

a.下载私有仓库镜像

sudo docker pull registry:latest

利用Docker创建私有仓库及实现批量上传文件

查看本地镜像:sudo docker images

利用Docker创建私有仓库及实现批量上传文件

b.创建一个仓库容器

sudo docker run -d -p 5000:5000 --name server-registry -v /tmp/registry:/tmp/registry docker.io/registry:latest

-v a:b :是指宿主机中的a目录挂载到容器的b目录中

利用Docker创建私有仓库及实现批量上传文件

c.本地标记镜像(以ubuntu和java镜像为例子)

sudo docker tag ubuntu:18.04 localhost:5000/ubuntu:18.04
sudo docker tag java:latest localhost:5000/java:latest

利用Docker创建私有仓库及实现批量上传文件

    从上图可以看出localhost:5000/ubuntu:18.04和localhost:5000/java.latest两个镜像已经存在。

 

d.上传镜像到私有仓库

sudo docker push localhost:5000/ubuntu:18.04


sudo docker push localhost:5000/java:latest

利用Docker创建私有仓库及实现批量上传文件

利用Docker创建私有仓库及实现批量上传文件

e.登陆私有仓库查看

curl 127.0.0.1:5000/v2/_catalog

利用Docker创建私有仓库及实现批量上传文件

 

或者在浏览器中输入:http://127.0.0.1:5000/v2/_catalog 

可以看出镜像已经上传到私有仓库中

利用Docker创建私有仓库及实现批量上传文件

 

 

2.使用私有仓库上传镜像

        在本地建立私有仓库之后,如果每次都要标记然后逐个上传,重复工作量比较大,因此可以考虑将重复性的这部分工作交给脚本来实现。

1.批量上传指定镜像

        实现该功能首先在/usr/local/bin/文件夹下建立一个push_images.sh脚本文件,push_images.sh脚本内容如下所示:

registry=127.0.0.1:5000;#指定目标注册服务器

echo_r(){
        [ $# -ne 1 ] && return 0;
        echo -e "\033[31m$1\033[0m"
}

echo_g(){
        [ $# -ne 1 ] && return 0;
        echo -e "\033[32m$1\033[0m"
}

echo_y(){
        [ $# -ne 1 ] && return 0;
        echo -e "\033[33m$1\033[0m"
}

echo_b(){
        [ $# -ne 1 ] && return 0;
        echo -e "\033[34m$1\033[0m"
}

usage(){
        sudo docker images
        echo "Usage: $0 registry1:tag1 [registry2:tag2...]"

}

[ $# -lt 1 ] && usage && exit
echo_b "The registry server is $registry"
for image in "[email protected]"
do
        echo_b "Uploading $image..."
        sudo docker tag $image $registry/$image  #标记镜像
        sudo docker push $registry/$image #上传镜像到仓库
        sudo docker rmi $registry/$image  #删除本地标记镜像
        echo_g "Done"
done

然后对该脚本文件添加可执行权限 :

sudo chmod a+x /usr/local/bin/push_images.sh

最后可以利用/usr/local/bin/push_images.sh   image1  [image2...] 来批量上传镜像。以下进行实践:

首先上传单个镜像,先检查私有仓库的镜像,如下图所示:

利用Docker创建私有仓库及实现批量上传文件

上传一个python镜像,并检查仓库中有没有上传成功。如下图所示,说明镜像上传成功

利用Docker创建私有仓库及实现批量上传文件

利用Docker创建私有仓库及实现批量上传文件

一次性上传两个镜像:registry和sshd:ubuntu14,实现了批量上传的功能。

利用Docker创建私有仓库及实现批量上传文件

利用Docker创建私有仓库及实现批量上传文件

 2.上传本地所有镜像

        在/usr/local/bin/文件夹下建立一个push_all.sh脚本文件,脚本内容如下所示:

for image in `sudo docker images|grep -v "REPOSITORY"|grep -v "<none>"|awk '{print $1":"$2}'`
do
        push_images.sh $image
done


!!!注意,sudo前面的`是特殊字符,并非标点符号'。不能一概而论,否则会报错。

 在push_images.sh添加可执行权限之后,给push_all.sh添加可执行权限

sudo chmod a+x /usr/local/bin/push_all.sh

 

   先检查本地的镜像;sudo docker images

利用Docker创建私有仓库及实现批量上传文件

接着执行脚本文件:/usr/local/bin/push_all.sh,以下则是执行过程

利用Docker创建私有仓库及实现批量上传文件

利用Docker创建私有仓库及实现批量上传文件

利用Docker创建私有仓库及实现批量上传文件

 

利用Docker创建私有仓库及实现批量上传文件

 最后检查仓库,可以看出本地的镜像全部都上传了。

利用Docker创建私有仓库及实现批量上传文件

 

因此,我们可以通过自己编写脚本,可以实现批量上传镜像以及将本地镜像全部上传的功能,从而提高了将镜像上传到私有仓库的效率。

 

3.Tips

1.输入127.0.0.1:5000/v2/_catalog可以获取仓库内容

利用Docker创建私有仓库及实现批量上传文件

2.输入127.0.0.1:5000/v2/image/tags/list 可以获取image镜像的相关信息,主要是标签。

利用Docker创建私有仓库及实现批量上传文件