• Docker技术入门与实战 第二版-学习笔记-6-仓库


    仓库(Repository)是集中存放镜像的地方

    一个容易混淆的概念是注册服务器(Registry)。

    实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。

    从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址dl.dockerpool.com/ubuntu来说,dl.dockerpool.com注册服务器(Registry),ubuntu是仓库(Repository)

    1.Docker Hub(公共仓库)

    登录——docker login

    注册成功后,本地用户目录的 .dockercfg中将保存用户的认证信(Linux中)

    然后之后就能够进行之前学习的一些操作,如拉取镜像等

    2.私有仓库——docker-registry

    docker-registry是官方提供的工具,可以用于构建私有的镜像仓库

    有时候,我们并不想把自己的项目公开,只想自己使用。这时我们就需要自己建立自己的docker hub

    1) 安装运行 docker-registry

    userdeMacBook-Pro:~ user$ docker run -d -p 5000:5000 registry
    Unable to find image 'registry:latest' locally
    latest: Pulling from library/registry
    d6a5679aa3cf: Pull complete 
    ad0eac849f8f: Pull complete 
    2261ba058a15: Pull complete 
    f296fda86f10: Pull complete 
    bcd4a541795b: Pull complete 
    Digest: sha256:5a156ff125e5a12ac7fdec2b90b7e2ae5120fa249cf62248337b6d04abc574c8
    Status: Downloaded newer image for registry:latest
    80a3cb29464481d17c7c7640d7763ea6820cee39cd0c83ce959a76e7b7a6219f
    userdeMacBook-Pro:~ user$ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    80a3cb294644        registry            "/entrypoint.sh /etc…"   4 minutes ago       Up 4 minutes        0.0.0.0:5000->5000/tcp   pensive_meninsky

    这将使用官方的 registry 镜像来启动本地的私有仓库。(我没有进行下面的配置)

    运行了上面的命令后,其实就相当于启动了一个服务器,然后我们就可以往上面push和pull了

    下面是相应的环境配置,你也可以不设置,使用默认值

    用户可以通过指定参数来配置私有仓库位置,例如配置镜像存储到 Amazon S3 服务:

    $ sudo docker run 
    -e SETTINGS_FLAVOR=s3 
    -e AWS_BUCKET=acme-docker 
    -e STORAGE_PATH=/registry 
    -e AWS_KEY=AKIAHSHB43HS3J92MXZ 
    -e AWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T
    -e SEARCH_BACKEND=sqlalchemy 
    -p 5000:5000 
    registry
     

    此外,还可以指定本地路径(如 /home/user/registry-conf )下的配置文件config.yml(我本地下并没有改文件,看看即可):

    $ sudo docker run -d -p 5000:5000 -v /home/user/registry-conf:/registry-conf -e DOCKER_REGISTRY_CONFIG=/registry-conf/config.yml registry

    默认情况下,仓库会被创建在容器的 /tmp/registry下。可以通过 -v 参数来将镜像文件存放在本地的指定路径。

    例如下面的例子将设置会将上传的镜像放到 /opt/data/registry 目录

     sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

    2)在私有仓库上传、下载、搜索镜像——docker tag

    格式:docker tag IMAGE[:TAG]  [REGISTRYHOST/][USERNAME/]NAME[:TAG]

    创建好私有仓库之后,就可以使用 docker tag来标记一个镜像,然后推送它到仓库,就能够从别的机器上下载该镜像了。

    ⚠️:你image的标签一定得是你服务器的ip地址加端口.比如下面的命令docker tag 0254 192.168.1.103:5000/testNginx,否则你的镜像并不会上传到你自己的仓库上,而是会上传到docker hub上

    先在本机查看已有的镜像:

    userdeMacBook-Pro:~ user$ docker images
    REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
    test/nginx                                 v1                  02548ab0445a        28 minutes ago      107MB
    nginx                                      v3                  beda48ecf85b        27 hours ago        109MB
    nginx                                      v2                  5dda481d7ed1        28 hours ago        109MB
    nginx                                      latest              568c4670fa80        2 weeks ago         109MB
    ubuntu                                     14.04               f17b6a61de28        3 weeks ago         188MB
    registry                                   latest              2e2f252f3c88        3 months ago        33.3MB
    alpine                                     latest              196d12cf6ab1        3 months ago        4.41MB
    hello-world                                latest              4ab4c602aa5e        3 months ago        1.84kB

    然后就对镜像进行标记:

    userdeMacBook-Pro:~ user$ docker tag 0254 192.168.1.103:5000/testNginx
    Error parsing reference: "192.168.1.103:5000/testNginx" is not a valid repository/tag: invalid reference format: repository name must be lowercase
    userdeMacBook-Pro:~ user$ docker tag 0254 192.168.1.103:5000/testnginx
    userdeMacBook-Pro:~ user$ docker images
    REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
    192.168.1.103:5000/testnginx               latest              02548ab0445a        33 minutes ago      107MB
    test/nginx                                 v1                  02548ab0445a        33 minutes ago      107MB
    nginx                                      v3                  beda48ecf85b        27 hours ago        109MB
    nginx                                      v2                  5dda481d7ed1        28 hours ago        109MB
    nginx                                      latest              568c4670fa80        2 weeks ago         109MB
    ubuntu                                     14.04               f17b6a61de28        3 weeks ago         188MB
    registry                                   latest              2e2f252f3c88        3 months ago        33.3MB
    alpine                                     latest              196d12cf6ab1        3 months ago        4.41MB
    hello-world                                latest              4ab4c602aa5e        3 months ago        1.84kB

    然后docker push上传标记后的镜像:

    userdeMacBook-Pro:~ user$ docker push 192.168.1.103:5000/testnginx
    The push refers to repository [192.168.1.103:5000/testnginx]
    Get https://192.168.1.103:5000/v2/: http: server gave HTTP response to HTTPS client

    出现问题,解决办法,添加"insecure-registries":["192.168.1.103:5000"]:

    然后重启apply & restart

    之后再重新运行一遍,因为你会发现registry容器也关闭了:

    userdeMacBook-Pro:~ user$ docker push 192.168.1.103:5000/testnginx
    The push refers to repository [192.168.1.103:5000/testnginx]
    480dc0877295: Retrying in 1 second 
    received unexpected HTTP status: 503 Service Unavailable
    userdeMacBook-Pro:~ user$ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    userdeMacBook-Pro:~ user$ docker run -d -p 5000:5000 registry
    9baa1039f10d5037b1e6c393155233cfdee1ce068b7e4859d7d856c373d33ce8
    userdeMacBook-Pro:~ user$ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    9baa1039f10d        registry            "/entrypoint.sh /etc…"   3 seconds ago       Up 2 seconds        0.0.0.0:5000->5000/tcp   tender_kowalevski
    userdeMacBook-Pro:~ user$ docker push 192.168.1.103:5000/testnginx
    The push refers to repository [192.168.1.103:5000/testnginx]
    480dc0877295: Pushed 
    latest: digest: sha256:f682f1e8e7f792404f93977b9931a07c6180b4e84d4daadbb47ea4489d368e49 size: 528

    然后一查看,成功上传:

    userdeMacBook-Pro:~ user$ cat .docker/daemon.json 
    {
      "debug" : true,
      "insecure-registries" : [
        "192.168.1.103:5000"
      ],
      "experimental" : true,
      "registry-mirrors" : [
        "https://aic2v8yz.mirror.aliyuncs.com"
      ]
    }
    userdeMacBook-Pro:~ user$ curl -XGET http://192.168.1.103:5000/v2/_catalog
    {"repositories":["testnginx"]}

    然后就能够到另一台电脑上使用下面的命令去拉取镜像了:

    docker pull 192.168.1.103:5000/testnginx

    3) 仓库配置文件

    Docker Registry 利用配置文件提供了一些仓库的模板(flavor),用户可以直接 使用它们来进行开发或生产部署:

    模板:

    在 config_sample.yml文件中,可以看到一些现成的模板段:

    • common : 基础配置
    • local : 存储数据到本地文件系统
    • s3 : 存储数据到 AWS S3
    • dev : 使用 local模板的基本配置
    • test : 单元测试使用
    • prod : 生产环境配置(基本上跟s3配置类似)
    • gcs : 存储数据到 Google 的云存储
    • swift: 存储数据到 OpenStack Swift 服务
    • glance : 存储数据到 OpenStack Glance 服务,本地文件系统为后备
    • glance-swifte : 存储数据到 OpenStack Glance 服务,Swift 为后备
    • elliptics : 存储数据到 Elliptics key/value 存储
     
    
    
    
    
  • 相关阅读:
    Python
    Python
    Python
    Python
    python
    python
    Python
    pure css做的pc登陆界面
    MvcAdmin功能介绍
    pure css做的手机版博客园(我自己博客)
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/10123614.html
Copyright © 2020-2023  润新知