在CentOS 7.x中配置Docker私有库

作者: 聂扬帆博客 | 来源:发表于2017-01-05 15:03 被阅读495次

    在公司有时候去使用Docker Hub公共仓库可能不太方便,于是我们可以在公司内网搭建一个私有的Docker库。网上搭建Docker私有库的方法很多,有借助于Docker Hub的、有直接使用别人创建好的私有库,本文写的是使用官方提供的docker-registry来搭建私有库,这也是最多人使用的一种方法。

    0x01 私库环境

    • 服务器
    # cat /etc/redhat-release 
    CentOS Linux release 7.3.1611 (Core) 
    # uname -r
    3.10.0-514.2.2.el7.x86_64
    
    • Docker版本
    # docker -v
    Docker version 1.10.3, build 3999ccb-unsupported
    
    • 关闭SELINUX
    # /usr/sbin/setenforce 0 &>/dev/null && sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
    

    0x02 私库配置

    1. 获取官方registry镜像
    # docker pull registry  ##自动去官方获取
    # docker images  ##查看是否pull成功,有registry即可
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    registry            latest              182810e6ba8c        8 days ago          37.6 MB
    
    1. 运行registry镜像
      默认仓库会被创建在容器的/var/lib/registry目录下,我们需要用-v参数将镜像文件存放在本地指定路径。
      网上很多文章写的容器默认会创建在/tmp/registry下,这边被坑了很久。最后通过查看容器的信息才发现默认路径在/var/lib/registry目录下
    # docker inspect f6009d3f5b46  
    ##用docker inspect 跟上容器的ID,就可以查看容器的一些信息,定位到"Mounts",其中"Destination"即是容器默认的存放路径
    "Mounts": [
                {
                    "Source": "/cache1/registry",
                    "Destination": "/var/lib/registry",
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rslave"
                }
            ]
    
    # docker run -d -p 5000:5000 -v /cache1/registry:/var/lib/registry registry  ##运行registry容器,端口为5000;并将上传镜像存放到本地的/cache1/registry目录
    # docker ps -a  ##查看运行的容器
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    f6009d3f5b46        registry            "/entrypoint.sh /etc/"   3 hours ago         Up 3 hours          0.0.0.0:5000->5000/tcp   docker-registry
    
    1. 访问私有仓库
    # curl 127.0.0.1:5000/v1/search    ##网上用的这个命令报404
    404 page not found
    后面查了资料发现是v1版本的api查看方式,我们现在的版本是v2,用下面命令即可
    # curl 127.0.0.1:5000/v2/_catalog   
    {"repositories":["registry"]}   ##有一个registry镜像
    
    1. 为镜像打标签
    # docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    registry            latest              182810e6ba8c        8 days ago          37.6 MB
    # docker tag registry 127.0.0.1:5000/registry  
    # docker images
    REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
    registry                  latest              182810e6ba8c        8 days ago          37.6 MB
    127.0.0.1:5000/registry   latest              182810e6ba8c        8 days ago          37.6 MB
    
    1. 上传镜像
    # docker push 127.0.0.1:5000/registry
    The push refers to a repository [127.0.0.1:5000/registry]
    96b4f94bc221: Pushed
    a05358fe6900: Pushed
    e4bdfaa6de6b: Pushed 
    c161fb93c3f2: Pushed 
    7cbcbac42c44: Pushed
    latest: digest: sha256:5501375e0e654bb6b7550cb680c638732b3e54fb79536dd2c1f73c20d1044c93 size: 1342
    
    1. 查看镜像存储目录
    # tree /cache1/registry/docker/registry/v2/repositories
    /cache1/registry/docker/registry/v2/repositories
    └── registry
        └── _manifests
            ├── revisions
            │   └── sha256
            │       └── 5501375e0e654bb6b7550cb680c638732b3e54fb79536dd2c1f73c20d1044c93
            │           └── link
            └── tags
                └── latest
                    ├── current
                    │   └── link
                    └── index
                        └── sha256
                            └── 5501375e0e654bb6b7550cb680c638732b3e54fb79536dd2c1f73c20d1044c93
                                └── link
    11 directories, 3 files
    

    0x03 Q&A

    1. 在pull私有仓库时会遇到tls相关的问题
      报错信息类似:
    v1 ping attempt failed with error: Get https://xxx.xxx.xxx.xxx:5000/v1/_ping: http: server gave HTTP response to HTTPS client 
    

    根据提示信息可以大致了解到是和证书有关系,解决方式也给到了,要么添加额外参数直接信任,要么直接通过其他反方(比如openssl)生成证书,这里介绍添加参数来解决这个报错。

    解决方法:

    在CentOS 7.x系统中可以修改/usr/lib/systemd/system/docker.service文件

    定位到:
    ExecStart=/usr/bin/dockerd
    修改为:
    ExecStart=/usr/bin/dockerd --insecure-registry x.x.x.x:5000
    

    然后重启docker,查看docker进程

    # ps -ef |grep docker
    root      2557  2490  0 14:56 pts/0    00:00:00 grep --color=auto docker
    root     21530     1  0 Jan04 ?        00:01:33 /usr/bin/dockerd --insecure-registry x.x.x.x:5000   ##x.x.x.x即为你的私库地址
    

    博客地址:http://yangfannie.com

    相关文章

      网友评论

      本文标题:在CentOS 7.x中配置Docker私有库

      本文链接:https://www.haomeiwen.com/subject/tasovttx.html