zoukankan      html  css  js  c++  java
  • Docker(六)-Dcoker仓库

    仓库


    一个容易混淆的概念是注册服务器(Registry)。 实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说, 仓库可以被认为是一个具体的项目或目录。例如对于仓库地址registry.hub.docker.com/ubuntu 来说,registry.hub.docker.com是注册服务器地址,ubuntu是仓库名。大部分时候,并不需要严格区分这两者的概念。

    Docker Hub

    目前Docker官方维护了一个公共仓库 Docker Hub:https://hub.docker.com

    我们可以在Docker Hub上完成注册。这样就可以使用Docker Hub 来托管我们的镜像了。

    通过docker search命令来查找官方仓库中的镜像,并利用docker pull 命令来将它下载到本地。

    $ sudo docker search ubuntu
    

    使用国内镜像

    参考地址:https://www.docker-cn.com/registry-mirror

    临时性的使用:

    $ sudo docker pull registry.docker-cn.com/library/ubuntu:16.04
    
    

    永久性的使用:

    修改 /etc/docker/daemon.json文件(没有的话可以手动创建,需要通过root用户操作)并添加上 registry-mirrors 键值。

    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    

    修改保存后重启Docker服务以使配置生效。

    $ sudo service docker restart

    Docker私有仓库搭建


     

    环境准备

    环境:两个装有Docker的虚拟机 

    机器名ip功能
    docker-registry 192.168.119.1 docker私有仓库服务器
    docker-app 192.168.119.2 运行docker服务的普通服务器
    安装私有仓库

    登录docker-registry机器(推荐使用SecureCRT);

    #创建数据存储的文件夹 ,将容器的/tem/registry目录映射到/docker/registry
    $ mkdir /docker/registry

    执行以下命令,会启动一个registry容器,该容器用于提供私有仓库的服务:
    $ sudo docker run -d -p 5000:5000 --name registry-ser --restart=always --privileged=true -v /docker/registry:/var/lib/registry registry

    • --restart=always 表示自动启动容器
    • -v <宿主机目录>:<容器目录> 将宿主机的目录映射到容器上
    • --privileged=true 给容器加权限,这样上传就不会因为目录权限出错
    • /var/lib/registry 这个目录是docker私有仓库,镜像的存储目录

    --restart的参数说明
    # always:无论容器的退出代码是什么,Docker都会自动重启该容器。
    # on-failure:只有当容器的退出代码为非0值的时候才会自动重启。
    #另外,该参数还接受一个可选的重启次数参数,`--restart=on-fialure:5`表示当容器退出代码为非0时,Docker#会尝试自动重启该容器,最多5次。

    测试


     

    接下来我们就要操作把一个本地镜像push到私有仓库中。首先在153机器下pull一个比较小的镜像来测试(此处使用的是busybox)。

    docker pull busybox

    接下来修改一下该镜像的tag。

    docker tag busybox 192.168.119.1:5000/busybox

    接下来把打了tag的镜像上传到私有仓库。

    docker push 192.168.119.1:5000/busybox

    可以看到 push 失败:

     Error: Invalid registry endpoint https://192.168.119.1:5000/v1/: Get https://192.168.119.1:5000/v1/_ping: dial tcp 192.168.119.1:5000: connection refused. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 192.168.119.1:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/192.168.119.1:5000/ca.crt 

    因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改docker启动配置文件:

    第一种方法:

    vi /etc/default/docker

    修改DOCKER_OPTS参数

    DOCKER_OPTS="-H 0.0.0.0:2375 --insecure-registry 192.168.119.1:5000"

    第二种方法:

    vi /etc/docker/daemon.json

    将下面的代码放进去保存并退出。

    "insecure-registries":["192.168.119.1:5000"]

    最终如下所示:

    {
            "registry-mirrors": ["https://njrds9qc.mirror.aliyuncs.com"],
            "insecure-registries":["192.168.119.1:5000"]
    }

    重新启动docker:

    sudo service restart docker

    重启完之后我们再次运行推送命令,把本地镜像推送到私有服务器上。

    docker push 192.168.119.1:5000/busybox

    接下来我们从私有仓库中pull下来该镜像。

    sudo docker pull 192.168.119.1:5000/busybox

    查看镜像

    # curl -XGET http://registry:5000/v2/_catalog
    # curl -XGET http://registry:5000/v2/image_name/tags/list
  • 相关阅读:
    1009 说反话 (20 分)
    1007 素数对猜想 (20 分)
    Visual Studio2017下载方法
    百词斩和扇贝打卡测试与评估
    创建者模式->工厂模式
    STM32F427|----------IO讲解与应用
    MySQL的索引
    STM32F103RCt6 与 MG996R
    2020物联网实验室的考核题目
    初学数据库-MySQL&IDEA&Navicat
  • 原文地址:https://www.cnblogs.com/zhuochong/p/10058463.html
Copyright © 2011-2022 走看看