GVKun编程网logo

docker 私有仓库 yum 安装 docker-registry(docker私有仓库部署)

13

以上就是给各位分享docker私有仓库yum安装docker-registry,其中也会对docker私有仓库部署进行解释,同时本文还将给你拓展167dockerdocker构建nginx容器系列问题

以上就是给各位分享docker 私有仓库 yum 安装 docker-registry,其中也会对docker私有仓库部署进行解释,同时本文还将给你拓展167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、CentOS 7 : Docker私有仓库搭建和使用 registry2.0、centos7 docker 搭建私有仓库 registry、CentOS7.4 Docker Harbor + docker-registry基于Http方式安全认证私有仓库搭建等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

docker 私有仓库 yum 安装 docker-registry(docker私有仓库部署)

docker 私有仓库 yum 安装 docker-registry(docker私有仓库部署)

[root@riyimei-node1:/root]
> yum install docker-registry
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.163.com
Package docker-registry is obsoleted by docker-distribution, trying to install docker-distribution-2.6.2-2.git48294d9.el7.x86_64 instead
Resolving Dependencies
--> Running transaction check
---> Package docker-distribution.x86_64 0:2.6.2-2.git48294d9.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================================
Package Arch Version Repository Size
=======================================================================================================================
Installing:
docker-distribution x86_64 2.6.2-2.git48294d9.el7 extras 3.5 M

Transaction Summary
=======================================================================================================================
Install 1 Package

Total download size: 3.5 M
Installed size: 12 M
Is this ok [y/d/N]: y
Downloading packages:
docker-distribution-2.6.2-2.git48294d9.el7.x86_64.rpm | 3.5 MB 00:00:03
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : docker-distribution-2.6.2-2.git48294d9.el7.x86_64 1/1
Verifying : docker-distribution-2.6.2-2.git48294d9.el7.x86_64 1/1

Installed:
docker-distribution.x86_64 0:2.6.2-2.git48294d9.el7

Complete!

 

 

[root@riyimei-node1:/root]
> rpm -ql docker-distribution
/etc/docker-distribution/registry/config.yml
/usr/bin/registry
/usr/lib/systemd/system/docker-distribution.service
/usr/share/doc/docker-distribution-2.6.2
/usr/share/doc/docker-distribution-2.6.2/AUTHORS
/usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
/usr/share/doc/docker-distribution-2.6.2/LICENSE
/usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
/usr/share/doc/docker-distribution-2.6.2/README.md
/var/lib/registry

[root@riyimei-node1:/root]
>

 

 

[root@riyimei-node1:/root]
> ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 192.168.31.141:6443 *:*
LISTEN 0 128 192.168.31.141:2379 *:*
LISTEN 0 128 127.0.0.1:2379 *:*
LISTEN 0 128 127.0.0.1:10251 *:*
LISTEN 0 128 192.168.31.141:2380 *:*
LISTEN 0 128 127.0.0.1:10252 *:*
LISTEN 0 128 *:111 *:*
LISTEN 0 128 127.0.0.1:8080 *:*
LISTEN 0 128 127.0.0.1:4243 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 :::10257 :::*
LISTEN 0 128 :::10259 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 :::5000 :::*

[root@riyimei-node1:/root]
>

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

docker构建nginx容器系列问题


background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑

1.nginx服务器根目录问题

docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同

eg:

run一个niginx容器

<span>//80端口被占用,so...</span>
$ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx
$ sudo docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                   NAMES
<span>1801</span>a32aab54        nginx               <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago       Up <span>2</span> minutes        <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-&gt;</span><span>800</span>/tcp   berserk_kare
登录后复制

进入容器内部

<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash
root<span>@1801a32aab54</span><span>:/</span><span># </span>
登录后复制

查看nginx目录

<span># cd /etc/nginx/</span>
conf<span>.d</span>/         koi-utf         mime<span>.types</span>      nginx<span>.conf</span>      uwsgi_params    
fastcgi_params  koi-win         modules/        scgi_params     win-utf  
登录后复制

可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled

继续查看nginx配置

<span># cat /conf.d/default.conf</span><span>server</span> {
    listen       <span>80</span>;
    server_name  localhost;

    <span>#charset koi8-r;</span><span>#access_log  /var/log/nginx/log/host.access.log  main;</span>    location / {
        root   /usr/share/nginx/html;
        <span>index</span><span>index</span>.html <span>index</span>.htm;
    }

    <span>#error_page  404              /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span>
    error_page   <span>500</span><span>502</span><span>503</span><span>504</span>  /<span>50</span>x.html;
    location = /<span>50</span>x.html {
        root   /usr/share/nginx/html;
    }
    <span>#...省略php-fpm配置,好长..</span>
}
登录后复制

根目录配置: root /usr/share/nginx/html;

测试

<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" &gt;index.html</span>
登录后复制

php-fpm配置相关

'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

CentOS 7 : Docker私有仓库搭建和使用 registry2.0

CentOS 7 : Docker私有仓库搭建和使用 registry2.0

http://www.cnblogs.com/xcloudbiz/articles/5526262.html

系统环境: CentOS 7.2
192.168.0.179:docker仓库
192.168.0.60:客户端

安装并启动docker

1、yum -y install docker
2、systemctl start docker 3、systemctl enable docker

搭建私有仓库

192.168.0.179服务端 上下载registry镜像

1、docker pull registry
  • 防火墙添加运行5000端口
1、iptables -I INPUT 1 -p tcp --dport 5000 -j ACCEPT

下载完之后我们通过该镜像启动一个容器

1、docker run -d -p 5000:5000 --privileged=true -v /opt/registry:/tmp/registry-dev registry
  • 参数说明:
    -v /opt/registry:/tmp/registry :默认情况下,会将仓库存放于容器内的/tmp/registry目录下,指定本地目录挂载到容器

    –privileged=true :CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误(OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’)或者(Received unexpected HTTP status: 500 Internal Server Error)错误

    Registry的存放目录在Docker Hub上显示的是/tmp/registry-dev,但是映射之后发现并没有存放在该目录,查看源码发现,镜像信息存放在/var/lib/registry目录下,因此这里修改为将/opt/registry目录映射到/var/lib/registry。

    192.168.0.60客户端上传镜像

    修改/etc/sysconfig/docker(Ubuntu下配置文件地址为:/etc/init/docker.conf),增加启动选项(已有参数的在后面追加),之后重启docker,不添加报错,https证书问题。

    1、OPTIONS='--insecure-registry 192.168.0.179:5000'    #CentOS 7系统
    2、other_args='--insecure-registry 192.168.0.179:5000' #CentOS 6系统
    • 因为Docker从1.3.X之后,与docker registry交互默认使用的是https,而此处搭建的私有仓库只提供http服务
      在docker公共仓库下载一个镜像

      1、docker pull docker.io/centos
      • 来修改一下该镜像的tag
      1、docker tag centos 192.168.0.179:5000/centos
      • 把打了tag的镜像上传到私有仓库
      1、docker push 192.168.0.179:5000/centos
      • 1

      客户端添加私有仓库地址

      1、# 添加这一行
      2、ADD_REGISTRY='--add-registry 192.168.0.179:5000'

      加上后,search镜像,私有仓库和docker hub上都会显示;
      不加搜索私有仓库,需要命令中指定私有仓库ip

      使用仓库中的镜像

      查询私有仓库中的所有镜像,使用docker search命令:

      1、curl -u myuser https://registry_ip:5000/v1/search
      2、curl registry_ip:5000/v1/search
      1、docker search registry_ip:5000/     #centos 7
      2、docker search registry_ip:5000/library #centos 6
      • 查询仓库中指定账户下的镜像,则使用如下命令:
      1、docker search registry_ip:5000/account/

      转载请务必保留此出处:http://blog.csdn.net/fgf00/article/details/52040492


      https://tonybai.com/2016/02/26/deploy-a-private-docker-registry/

      部署私有Docker Registry

      安装部署一个私有的Docker Registry是引入、学习和使用Docker这门技术的必经之路之一。尤其是当Docker被所在组织接受,更多人、项目和产品开始接触和使用Docker时,存储和分发自制的Docker image便成了刚需。Docker Registry一如既往的继承了“Docker坑多”的特点,为此这里将自己搭建”各类”Registry过程中执行的步骤、遇到的问题记录下来,为己备忘,为他参考。

      Docker在2015年推出了distribution项目,即Docker Registry 2。相比于old registry,Registry 2使用Go实现,在安全性、性能方面均有大幅改进。Registry设计了全新的Rest API,并且在image存储格式等方面不再兼容于old Registry。去年8月份,docker官方hub使用Registriy 2.1替代了原先的old Registry。如果你要与Registry2交互,你的Docker版本至少要是Docker 1.6。

      Docker的开发者也一直在致力于改善Registry安装和使用的体验,通过提供官方Registry Image以及Docker Compose工具等来简化Registry的配置。不过在本文中,我们只是利用Docker以及Registry的官方Image来部署Registry,这样更便于全面了解Registry的部署配置细节。

      Registry2在镜像存储方面不仅支持本地盘,还支持诸多主流第三方存储方案。通过分布式存储系统你还可以实现一个分布式Docker Registry服务。这里仅以本地盘以及single node registry2为例。

      一、环境

      这里还是复用以往文章中的Docker环境:

      Docker Registry Server: 10.10.105.71 Ubuntu 14.04 3.16.0-57-generic;docker 1.9.1
      
      其他两个工作Server:
      10.10.105.72 Ubuntu 14.04 3.19.0-25-generic; docker 1.9.1
      10.10.126.101 Ubuntu 12.04 3.16.7-013607-generic; docker 1.9.1

      本次Registry使用当前最新stable版本:Registry 2.3.0。由于镜像采用本地磁盘存储,root分区较小,需要映射使用其他volume。

      二、初次搭建

      本以为Docker Registry的搭建是何其简单的,甚至简单到通过一行命令就可以完成的。比如我们在Registry Server上执行:

      在~/dockerregistry下,执行:
      
      $sudo docker run -d -p 5000:5000 -v `pwd`/data:/tmp/registry-dev --restart=always --name registry registry:2
      Unable to find image 'registry:2' locally
      2: Pulling from library/registry
      f32095d4ba8a: Pull complete
      9b607719a62a: Pull complete
      973de4038269: Pull complete
      2867140211c1: Pull complete
      8da16446f5ca: Pull complete
      fd8c38b8b68d: Pull complete
      136640b01f02: Pull complete
      e039ba1c0008: Pull complete
      c457c689c328: Pull complete
      Digest: sha256:339d702cf9a4b0aa665269cc36255ee7ce424412d56bee9ad8a247afe8c49ef1
      Status: Downloaded newer image for registry:2
      e9088ef901cb00546c59f89defa4625230f4b36b0a44b3713f38ab3d2a5a2b44
      
      $ docker images
      REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
      registry            2                   c457c689c328        9 days ago          165.7 MB
      
      $ docker ps
      CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
      e9088ef901cb        registry:2          "/bin/registry /etc/d"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp   registry

      Registry container已经跑起来了,其启动日志可以通过:docker logs registry查看。

      我们在71本地给busyBox:latest打一个tag,并尝试将新tag下的image push到Registry中去:

      $ docker tag busyBox:latest 10.10.105.71:5000/tonybai/busyBox:latest
      $ docker images
      REPOSITORY                          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
      registry                            2                   c457c689c328        9 days ago          165.7 MB
      busyBox                             latest              65e4158d9625        9 days ago          1.114 MB
      10.10.105.71:5000/tonybai/busyBox   latest              65e4158d9625        9 days ago          1.114 MB
      ... ...

      push到Registry中:

      $ docker push 10.10.105.71:5000/tonybai/busyBox
      The push refers to a repository [10.10.105.71:5000/tonybai/busyBox] (len: 1)
      unable to ping registry endpoint https://10.10.105.71:5000/v0/
      v2 ping attempt Failed with error: Get https://10.10.105.71:5000/v2/: Tunnel or SSL Forbidden
       v1 ping attempt Failed with error: Get https://10.10.105.71:5000/v1/_ping: Tunnel or SSL Forbidden

      出错了!简单分析了一下,可能是71上docker daemon配置中加了http代理的缘故,导致无法ping通registry endpoint。于是在/etc/default/docker中注释掉export http_proxy=”xxx”的设置,并重启docker daemon。

      再次尝试push:

      $ docker push 10.10.105.71:5000/tonybai/busyBox
      The push refers to a repository [10.10.105.71:5000/tonybai/busyBox] (len: 1)
      unable to ping registry endpoint https://10.10.105.71:5000/v0/
      v2 ping attempt Failed with error: Get https://10.10.105.71:5000/v2/: tls: oversized record received with length 20527
       v1 ping attempt Failed with error: Get https://10.10.105.71:5000/v1/_ping: tls: oversized record received with length 20527

      虽然还是失败,但错误信息已有所不同了。这次看来连接是可以建立的,但client端通过https访问server端,似乎想tls通信,但这一过程并未完成。

      在其他机器上尝试push image到registry也遇到了同样的错误输出,如下:

      10.10.105.72:
      
      $ docker push 10.10.105.71:5000/tonybai/ubuntu
      The push refers to a repository [10.10.105.71:5000/tonybai/ubuntu] (len: 1)
      unable to ping registry endpoint https://10.10.105.71:5000/v0/
      v2 ping attempt Failed with error: Get https://10.10.105.71:5000/v2/: tls: oversized record received with length 20527
       v1 ping attempt Failed with error: Get https://10.10.105.71:5000/v1/_ping: tls: oversized record received with length 20527

      从错误信息来看,client与Registry交互,默认将采用https访问,但我们在install Registry时并未配置指定任何tls相关的key和crt文件,https访问定然失败。要想弄清这个问题,只能查看Registry Manual。

      三、Insecure Registry

      Registry的文档还是相对详尽的。在文档中,我们找到了Insecure Registry,即接收plain http访问的Registry的配置和使用方法,虽然这不是官方推荐的。

      实际上对于我们内部网络而言,Insecure Registry基本能满足需求,部署过程也避免了secure registry的那些繁琐步骤,比如制作和部署证书等。

      为了搭建一个Insecure Registry,我们需要先清理一下上面已经启动的Registry容器。

      $ docker stop registry
      registry
      $ docker rm registry
      registry

      修改Registry server上的Docker daemon的配置,为DOCKER_OPTS增加–insecure-registry:

      DOCKER_OPTS="--insecure-registry 10.10.105.71:5000 ....

      重启Docker Daemon,启动Registry容器:

      $ sudo service docker restart
      docker stop/waiting
      docker start/running,process 6712
      $ sudo docker run -d -p 5000:5000 -v `pwd`/data:/tmp/registry-dev --restart=always --name registry registry:2
      5966e92fce9c34705050e19368d19574e021a272ede1575385ef35ecf5cea019

      尝试再次Push image:

      $ docker push 10.10.105.71:5000/tonybai/busyBox
      The push refers to a repository [10.10.105.71:5000/tonybai/busyBox] (len: 1)
      65e4158d9625: Pushed
      5506dda26018: Pushed
      latest: digest: sha256:800f2d4558acd67f52262fbe170c9fc2e67efaa6f230a74b41b555e6fcca2892 size: 2739

      这回push ok!

      我们将本地的tag做untag处理,再从Registry pull相关image:

      $ docker images
      REPOSITORY                          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
      registry                            2                   c457c689c328        9 days ago          165.7 MB
      10.10.105.71:5000/tonybai/busyBox   latest              65e4158d9625        9 days ago          1.114 MB
      busyBox                             latest              65e4158d9625        9 days ago          1.114 MB
      ubuntu                              14.04               6cc0fc2a5ee3        5 weeks ago         187.9 MB
      
      $ docker rmi 10.10.105.71:5000/tonybai/busyBox
      Untagged: 10.10.105.71:5000/tonybai/busyBox:latest
      
      $ docker images
      REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
      registry            2                   c457c689c328        9 days ago          165.7 MB
      busyBox             latest              65e4158d9625        9 days ago          1.114 MB
      ubuntu              14.04               6cc0fc2a5ee3        5 weeks ago         187.9 MB
      
      $ docker pull 10.10.105.71:5000/tonybai/busyBox
      Using default tag: latest
      latest: Pulling from tonybai/busyBox
      Digest: sha256:800f2d4558acd67f52262fbe170c9fc2e67efaa6f230a74b41b555e6fcca2892
      Status: Downloaded newer image for 10.10.105.71:5000/tonybai/busyBox:latest
      
      $ docker images
      REPOSITORY                          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
      registry                            2                   c457c689c328        9 days ago          165.7 MB
      10.10.105.71:5000/tonybai/busyBox   latest              65e4158d9625        9 days ago          1.114 MB
      busyBox                             latest              65e4158d9625        9 days ago          1.114 MB
      ubuntu                              14.04               6cc0fc2a5ee3        5 weeks ago         187.9 MB

      可以看到:Pull过程也很顺利。

      在Private Registry2中查看或检索Repository或images,将不能用docker search:

      $ docker search 10.10.105.71:5000/tonybai/busyBox/
      Error response from daemon: Unexpected status code 404

      但通过v2版本的API,我们可以实现相同目的:

      $curl  http://10.10.105.71:5000/v2/_catalog
      {"repositories":["tonybai/busyBox"]}
      
      $ curl  http://10.10.105.71:5000/v2/tonybai/busyBox/tags/list
      {"name":"tonybai/busyBox","tags":["latest"]}

      在其他主机上,我们尝试pull busyBox:

      10.10.105.72:
      
      $docker pull 10.10.105.71:5000/tonybai/busyBox
      Using default tag: latest
      Error response from daemon: unable to ping registry endpoint https://10.10.105.71:5000/v0/
      v2 ping attempt Failed with error: Get https://10.10.105.71:5000/v2/: tls: oversized record received with length 20527
       v1 ping attempt Failed with error: Get https://10.10.105.71:5000/v1/_ping: tls: oversized record received with length 20527

      我们发现依旧不能pull和push!在Registry手册中讲到,如果采用insecure registry的模式,那么所有与Registry交互的主机上的Docker Daemon都要配置:–insecure-registry选项。

      我们按照上面的配置方法,修改105.72上的/etc/default/docker,重启Docker daemon,再执行pull/push就会得到正确的结果:

      $ sudo vi /etc/default/docker
      $ sudo service docker restart
      docker stop/waiting
      docker start/running,process 10614
      $ docker pull 10.10.105.71:5000/tonybai/busyBox
      Using default tag: latest
      latest: Pulling from tonybai/busyBox
      5506dda26018: Pull complete
      65e4158d9625: Pull complete
      Digest: sha256:800f2d4558acd67f52262fbe170c9fc2e67efaa6f230a74b41b555e6fcca2892
      Status: Downloaded newer image for 10.10.105.71:5000/tonybai/busyBox:latest
      
      $ docker images
      REPOSITORY                          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
      ubuntu                              14.04               36248ae4a9ac        8 days ago          187.9 MB
      10.10.105.71:5000/tonybai/ubuntu    14.04               36248ae4a9ac        8 days ago          187.9 MB
      10.10.105.71:5000/tonybai/busyBox   latest              65e4158d9625        9 days ago          1.114 MB
      
      $ docker push 10.10.105.71:5000/tonybai/ubuntu
      The push refers to a repository [10.10.105.71:5000/tonybai/ubuntu] (len: 1)
      36248ae4a9ac: Pushed
      8ea5373bf5a6: Pushed
      2e0188208e83: Pushed
      e3c70beaa378: Pushed
      14.04: digest: sha256:72e56686cb9fb38438f0fd68fecf02ef592ce2ef7069bbf97802d959d568c5cc size: 6781

      四、Secure Registry

      Docker官方是推荐你采用Secure Registry的工作模式的,即transport采用tls。这样我们就需要为Registry配置tls所需的key和crt文件了。

      我们首先清理一下环境,将上面的Insecure Registry停掉并rm掉;将各台主机上Docker Daemon的DOCKER_OPTS配置中的–insecure-registry去掉,并重启Docker Daemon。

      如果你拥有一个域名,域名下主机提供Registry服务,并且你拥有某知名CA签署的证书文件,那么你可以建立起一个Secure Registry。不过我这里没有现成的证书,只能使用自签署的证书。严格来讲,使用自签署的证书在Docker官方眼中依旧属于Insecure,不过这里只是借助自签署的证书来说明一下Secure Registry的部署步骤罢了。

      1、制作自签署证书

      如果你有知名CA签署的证书,那么这步可直接忽略。

      $ openssl req -newkey rsa:2048 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt
      Generating a 2048 bit RSA private key
      ..............+++
      ............................................+++
      writing new private key to 'certs/domain.key'
      -----
      You are about to be asked to enter information that will be incorporated
      into your certificate request.
      What you are about to enter is what is called a distinguished Name or a DN.
      There are quite a few fields but you can leave some blank
      For some fields there will be a default value,If you enter '.',the field will be left blank.
      -----
      Country Name (2 letter code) [AU]:CN
      State or Province Name (full name) [Some-State]:Liaoning
      Locality Name (eg,city) []:shenyang
      Organization Name (eg,company) [Internet Widgits Pty Ltd]:foo
      Organizational Unit Name (eg,section) []:bar
      Common Name (e.g. server FQDN or YOUR name) []:mydockerhub.com
      Email Address []:bigwhite.cn@gmail.com

      2、启动Secure Registry

      启动带证书的Registry:

      $ docker run -d -p 5000:5000 --restart=always --name registry -v /root/openssl/data:/tmp/registry-dev -v /root/openssl/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key docker.io/registry:2.0
      35e8ce77dd455f2bd50854e4581cd52be8a137f4aaea717239b6d676c5ea5777

      由于证书的CN是mydockerhub.com,我们需要修改一下/etc/hosts文件:

      10.10.105.71 mydockerhub.com

      重新为busyBox制作一个tag:

      $docker tag busyBox:latest mydockerhub.com:5000/tonybai/busyBox:latest

      Push到Registry:

      $ docker push mydockerhub.com:5000/tonybai/busyBox
      The push refers to a repository [mydockerhub.com:5000/tonybai/busyBox] (len: 1)
      unable to ping registry endpoint https://mydockerhub.com:5000/v0/
      v2 ping attempt Failed with error: Get https://mydockerhub.com:5000/v2/: x509: certificate signed by unkNown authority
       v1 ping attempt Failed with error: Get https://mydockerhub.com:5000/v1/_ping: x509: certificate signed by unkNown authority

      push失败了!从错误日志来看,docker client认为server传输过来的证书的签署方是一个unkNown authority(未知的CA),因此验证失败。我们需要让docker client安装我们的CA证书:

      $ sudo mkdir -p /etc/docker/certs.d/mydockerhub.com:5000 $ sudo cp certs/domain.crt /etc/docker/certs.d/mydockerhub.com:5000/ca.crt $ sudo service docker restart //安装证书后,重启Docker Daemon 

      再执行Push,我们看到了成功的输出日志。由于data目录下之前已经被push了tonybai/busyBox repository,因此提示“已存在”:

      $docker push mydockerhub.com:5000/tonybai/busyBox
      The push refers to a repository [mydockerhub.com:5000/tonybai/busyBox] (len: 1)
      65e4158d9625: Image already exists
      5506dda26018: Image already exists
      latest: digest: sha256:800f2d4558acd67f52262fbe170c9fc2e67efaa6f230a74b41b555e6fcca2892 size: 2739需要用域名,直接用IP地址会报错:

      如果要想支持IP方式

      如果Docker registry要想支持https,需要生成证书。这里我们采用openssl生成证书,一般情况下,证书只支持域名访问,要使其支持IP地址访问,需要修改配置文件openssl.cnf。

      修改openssl.cnf,支持IP地址方式,HTTPS访问

      在Redhat7或者Centos系统中,文件所在位置是/etc/pki/tls/openssl.cnf。在其中的[ v3_ca]部分,添加subjectAltName选项:

      [ v3_ca ]

      subjectAltName= IP:129.144.150.111

      用openssl生成自签名的证书:

      我们直接在root用户下操作,创建一个目录: /root/certs

      然后执行:

      openssl req -newkey rsa:2048 -nodes -sha256-keyout /root/certs/domain.key -x509 -days 365 -out /root/certs/domain.crt

      Country Name (2 letter code) [XX]:CN

      State or Province Name (full name) []:bj

      Locality Name (eg,city) [Default City]:bj

      Organization Name (eg,company) [DefaultCompany Ltd]:mycom

      Organizational Unit Name (eg,section)[]:it

      Common Name (eg,your name or your server'shostname) []:129.144.150.111

      Email Address []:xcjing@yeah.Net

      执行成功后会生成:domain.key 和domain.crt 两个文件

      3、外部访问Registry

      我们换其他机器试试访问这个secure registry。根据之前的要求,我们照猫画虎的修改一下hosts文件,安装ca.cert,去除–insecure-registry选项,并重启Docker daemon。之后尝试从registry pull image:

      $ docker pull mydockerhub.com:5000/tonybai/busyBox
      Using default tag: latest
      latest: Pulling from tonybai/busyBox
      
      Digest: sha256:800f2d4558acd67f52262fbe170c9fc2e67efaa6f230a74b41b555e6fcca2892
      Status: Downloaded newer image for mydockerhub.com:5000/tonybai/busyBox:latest
      
      $ docker images
      REPOSITORY                             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
      10.10.105.71:5000/tonybai/ubuntu       14.04               36248ae4a9ac        9 days ago          187.9 MB
      ubuntu                                 14.04               36248ae4a9ac        9 days ago          187.9 MB
      10.10.105.71:5000/tonybai/busyBox      latest              65e4158d9625        9 days ago          1.114 MB
      mydockerhub.com:5000/tonybai/busyBox   latest              65e4158d9625        9 days ago          1.114 MB

      这样来看,如果使用自签署的证书,那么所有要与Registry交互的Docker主机都需要安装mydockerhub.com的ca.crt(domain.crt)。但如果你使用知名CA,这一步也就可以忽略。

      五、Registry的鉴权管理

      Registry提供了一种基础的鉴权方式。我们通过下面步骤即可为Registry加上基础鉴权:

      在Register server上,为Registry增加foo用户,密码foo123:(之前需要停掉已有的Registry,并删除之)

      //生成鉴权密码文件
      $ mkdir auth
      $ docker run --entrypoint htpasswd registry:2 -Bbn foo foo123  > auth/htpasswd
      $ ls auth
      htpasswd
      
      //启动带鉴权功能的Registry:
      $ docker run -d -p 5000:5000 --restart=always --name registry \
         -v `pwd`/auth:/auth \
         -e "REGISTRY_AUTH=htpasswd" \
         -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
         -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
         -v `pwd`/data:/var/lib/registry \
         -v `pwd`/certs:/certs \
         -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
         -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
         registry:2
      199ad0b3591fb9613b21b1c96f017267f3c39661a7025d30df636c6805e7ab50

      在105.72上,我们尝试push image到Registry:

      $ docker push mydockerhub.com:5000/tonybai/busyBox
      The push refers to a repository [mydockerhub.com:5000/tonybai/busyBox] (len: 1)
      65e4158d9625: Image push Failed
      Head https://mydockerhub.com:5000/v2/tonybai/busyBox/blobs/sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4: no basic auth credentials

      错误信息提示:鉴权失败。

      在72上执行docker login:

      $docker login mydockerhub.com:5000
      Username: foo
      Password:
      Email: bigwhite.cn@gmail.com
      WARNING: login credentials saved in /home/baiming/.docker/config.json
      Login Succeeded

      login成功后,再行Push:

      $ docker push mydockerhub.com:5000/tonybai/busyBox
      The push refers to a repository [mydockerhub.com:5000/tonybai/busyBox] (len: 1)
      65e4158d9625: Image already exists
      5506dda26018: Image already exists
      latest: digest: sha256:800f2d4558acd67f52262fbe170c9fc2e67efaa6f230a74b41b555e6fcca2892 size: 2739

      Push ok!

      六、Registry中images的管理

      前面提到过,通过V2版Rest API可以查询Repository和images:

      $ curl --cacert domain.crt  --basic --user foo:foo123 https://mydockerhub.com:5000/v2/_catalog
      {"repositories":["tonybai/busyBox","tonybai/ubuntu"]}

      但如果要删除Registry中的Repository或某个tag的Image,目前v2还不支持,原因见Registry的roadmap中的说明。

      不过如果你的Registry的存储引擎使用的是本地盘,倒是有一些第三方脚本可供使用,比如:delete-docker-registry-image。

      七、小结

      Registry2发布不到1年,目前还有许多问题待解决,就比如delete image的问题,相信在2.4以及后续版本这些问题会被逐个解决掉或能找到一个相对理想的方案。

      © 2016,bigwhite. 版权所有.

      Related posts:

      1. Go和HTTPS
      2. 搭建自己的ngrok服务
      3. docker容器内服务程序的优雅退出
      4. WordPress迁移到Docker容器
      5. 理解Docker跨多主机容器网络

centos7 docker 搭建私有仓库 registry

centos7 docker 搭建私有仓库 registry

环境规划:

docker私有仓库地址:192.168.0.167

docker客户端地址 : 192.168.0.167

·关闭防火墙和selinux

服务端

1.安装并启动docker

2.拉取本地私有仓库registry

3.查看registry镜像

4.基于私有仓库镜像运行容器

默认情况下,会将仓库存放于容器的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器的/tmp/registry下, 两个目录下都有!

·registry的默认存储路径是/tmp/registry,只是个临时目录,一段时间之后就会消失

·所以使用-v参数,指定个本地持久的路径,

5.访问私有仓库

6.从Docker HUB 上拉取一个镜像测试

7.创建镜像链接为基础镜像打个标签

8.修改docker配置文件,指定私有仓库url

9.上传镜像到本地私有仓库

10.查看私有仓库是否有对应的镜像

11.查看镜像的存储目录和文件

客户端

1.安装并启动docker

2.修改docker配置文件,指定私有仓库url

3.测试,下载刚才上传的镜像


CentOS7.4 Docker Harbor + docker-registry基于Http方式安全认证私有仓库搭建

CentOS7.4 Docker Harbor + docker-registry基于Http方式安全认证私有仓库搭建

准备工作

版本

更新或下载URL

CentOS

7.4 64位

yum -y update && yum -y upgrade


依赖项(不分先后顺序)

docker

1.13.1,build 774336d/1.13.1

yum install -y docker

systemctl start docker.service

docker-compose

docker-compose version 1.21.2,build a133471
docker-py version: 3.3.0
cpython version: 2.7.5

pip install docker-compose

go

1.7.5

yum install -y golang

python

2.7.5

yum install -y python

python-pip

9.0.1

yum install -y epel-release python-pip

pip install --upgrade pip backports.ssl_match_hostname

openssl

OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 yum install -y openssl

1.安装前置组件

yum -y update && yum -y upgrade && yum -y install wget python-devel libevent-devel epel-release python-pip gcc gcc-c++ xz-devel

yum -y upgrade kernel && yum -y reinstall kernel

2.创建证书存放目录

mkdir-p/data/cert
cd/data/cert/

2.1 创建 CA 根证书

opensslreq-newkeyrsa:4096\
-nodes-sha256-keyoutca.key-x509-days365\
-outca.crt-subj"/C=CN/L=shanghaI/O=baoshan/CN=harbor-registry"

2.2 生成一个证书签名,设置访问域名为 [你的域名]

-nodes-sha256-keyoutserver.key\
-outserver.csr-subj"/C=CN/L=shanghaI/O=baoshan/CN=docker-hub.onechain.com"

2.3 生成主机的证书

opensslx509-req-days365\
-inserver.csr-CAca.crt-CAkeyca.key\
-CAcreateserial-outserver.crt

3. 安装docker

yum -yinstalldocker

3.1 设置docker为开启启动

systemctlenabledocker.service

3.2 启动 docker 服务

systemctlstartdocker.service

3.3 安装 docker-compose

预先安装epel-release后方可安装python-pip[在前置条件中已安装,此处可不执行]
yum -y install epel-releasepython-pip
pipinstall--upgradepip
pipinstalldocker-compose
pipinstall--upgradebackports.ssl_match_hostname

yum clean all

python-pip其他安装方法:
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py
pip -V

4.安装harbor

4.1 下载harbor离线版

wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgztar xvf harbor-offline-installer-v1.1.2.tgz

4.2 修改habor配置

hostname=docker-hub.onechain.com #指定私有仓库的主机名,可以是IP地址,也可以是域名
ui_url_protocol=https #用户访问私仓时使用的协议,默认时http,配置成https
db_password=root123   #指定MysqL数据库管理员密码
harbor_admin_password:Harbor12345 #harbor的管理员账户密码
ssl_cert=/data/cert/server.crt    #设置证书文件路径
ssl_cert_key=/data/cert/server.key #设置证书密钥文件路径

4.3 通过自带脚本一键安装(在harbor目录下)
[root@harborharbor]#./prepare
[root@harborharbor]# ./install.sh

4.4 通过浏览器访问管理
[提前设置本地 hosts文件本地重定向至harbor服务器IP]
vi /etc/hosts
添加
127.0.0.1 localhost docker-hub.onechain.com

4.5 开启80/443端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
firewall-cmd --query-port=80/tcp
firewall-cmd --query-port=443/tcp
firewall-cmd --list-all

https://docker-hub.onechain.com
用户默认为admin
密码默认为Harbor12345 [可通过安装前 harbor.cfg 配置文件修改harbor_admin_password指定 ]


测试登陆

今天关于docker 私有仓库 yum 安装 docker-registrydocker私有仓库部署的讲解已经结束,谢谢您的阅读,如果想了解更多关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、CentOS 7 : Docker私有仓库搭建和使用 registry2.0、centos7 docker 搭建私有仓库 registry、CentOS7.4 Docker Harbor + docker-registry基于Http方式安全认证私有仓库搭建的相关知识,请在本站搜索。

本文标签: