zoukankan      html  css  js  c++  java
  • docker私有仓库的创建

    由于部分图片的问题,附上有道云笔记中的链接:http://note.youdao.com/noteshare?id=973cd2cd200dca3769bc9cd2a6b9b746&sub=71498BEACB1F42DE99EDF4B403145BC7

    Docker私有仓库的安装

    1.Registry

    官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。

    Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pull和push镜像的效率。

    官方在Docker hub上提供了registry的镜像(详情),我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。Tag为latest的registry镜像是0.9.1版本的,我们直接采用2.1.1版本。

    2.Registry部署

    2.1 获取registry镜像

    docker pull registry:2.1.1
    

    2.2 启动registry镜像

    [root@node1 bin]# docker run -d -v /opt/data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.1.1
    

    默认情况下,registry会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/data/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/data/registry目录了

    2.3查看启动情况

    2.4 启动register服务之后,通过浏览器访问:192.168.44.201:5000/v2

    浏览器访问

    3.上传image到私有仓库

    3.1 打tag(centos:7.5.1804是本地已经有的image)

    docker tag centos:7.5.1804 192.168.44.201:5000/centos:7.5.1804
    

    3.2 push

    docker push 192.168.44.201:5000/centos:7.5.1804
    

    因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报下面的错误:

    为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改docker启动配置文件:

    [root@node1 bin]# vim /usr/lib/systemd/system/docker.service
    
    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network-online.target firewalld.service
    Wants=network-online.target
    
    [Service]
    Type=notify
    # the default is not to use systemd for cgroups because the delegate issues still
    # exists and systemd currently does not support the cgroup feature set required
    # for containers run by docker
    #ExecStart=/usr/bin/dockerd --insecure-registry 192.168.44.201:5000 ##加上这一句
    ExecStart=/usr/bin/dockerd
    ExecReload=/bin/kill -s HUP $MAINPID
    # Having non-zero Limit*s causes performance problems due to accounting overhead
    # in the kernel. We recommend using cgroups to do container-local accounting.
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    # Uncomment TasksMax if your systemd version supports it.
    # Only systemd 226 and above support this version.
    #TasksMax=infinity
    TimeoutStartSec=0
    # set delegate yes so that systemd does not reset the cgroups of docker containers
    Delegate=yes
    # kill only the docker process, not all processes in the cgroup
    KillMode=process
    # restart the docker process if it exits prematurely
    Restart=on-failure
    StartLimitBurst=3
    StartLimitInterval=60s
    
    [Install]
    WantedBy=multi-user.target
    

    之后重启docker

    systemctl daemon-reload
    systemctl start docker 
    

    之后再重新push,成功

    3.3 浏览器查看

    4.查看相关私有仓库的信息

    4.1 私有仓库的images

    [root@node1 bin]# curl http://192.168.44.201:5000/v2/_catalog
    {"repositories":["centos"]}
    [root@node1 bin]# 
    

    4.2 查看对应image的tag信息

    [root@node1 bin]# curl http://192.168.44.201:5000/v2/centos/tags/list
    {"name":"centos","tags":["7.5.1804","7.5.1804.2"]}
    [root@node1 bin]# 
    

    5.删除私有仓库的image

    5.1 下载资源

    curl https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/delete_docker_registry_image.py | sudo tee /usr/local/bin/delete_docker_registry_image >/dev/null
    
    chmod +x  /usr/local/bin/delete_docker_registry_image
    

    5.2 设置相关环境变量

    [root@node1 bin]# export REGISTRY_DATA_DIR='/opt/data/registry/docker/registry/v2/'
    

    因为delete_docker_registry_image中需要用到REFISTRY_DATA_DIR这个环境变量

    5.3 删除image

    [root@node1 bin]# delete_docker_registry_image  --image centos:7.5.1804.2
    

    删除成功!!!

  • 相关阅读:
    Adline网络的LMS算法与梯度下降
    Adaline网络识别印刷体数字0到9-java实现
    使用java API操作hdfs--拷贝部分文件到本地
    使用java API操作hdfs--拷贝部分文件到hdfs
    使用java API操作hdfs--读取hdfs文件并打印
    使用java API操作hdfs--通过filesystem API 来读取数据
    使用java API操作HDFS-相关环境的设置
    使用命令行的方式操作hdfs
    namenode和datanode 的namespaceID导致的问题
    The authenticity of host '172.16.33.53 (172.16.33.53)' can't be established的问题(日志六)
  • 原文地址:https://www.cnblogs.com/zhangjxblog/p/12168306.html
Copyright © 2011-2022 走看看