设为首页 收藏本站
查看: 1472|回复: 0

[经验分享] 搭建私有Docker仓库

[复制链接]

尚未签到

发表于 2015-10-13 09:36:39 | 显示全部楼层 |阅读模式
  搭建私有Docker仓库的理由林林总总。本文只关心怎么搭建,搭建好了怎么用它?
  搭建私有仓库最简单的办法是用官方的docker-registry这个镜像。它可以支持多种镜像的存储方式。比如,本地,Amazon S3等。本文只探讨怎么把镜像存放在宿主机的本地磁盘上。它会涉及到在宿主机和容器的配置。
  首先,在宿主机里建一个作为镜像存储的目录,然后建一个指定UID和GID的用户和用户组来作为该目录的属主。假设用户名和用户组名都为docker_r,UID和GID都是10000。然后将目录权限模式设成750。这样防止宿主机上的闲杂人员访问docker镜像。然后,运行docker-registry容器,并通过环境变量指定镜像存储目录和在容器中的registry进程的用户UID。
  将上述过程自动化的完整脚本如下:

echo "############################################################" echo "" echo "                        ##        ." echo "                  ## ## ##       ==" echo "               ## ## ## ##      ===" echo "           /""""""""""""""""/___/ ===" echo "      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~" echo "           /______ o          __/" echo "             /    /        __/" echo "              /____/______/" echo "" echo "############################################################" # run the registry itself in docker container sudo docker pull registry  # create user/group to run docker registry os_group=docker_r os_user=docker_r getent group ${os_group} > /dev/null        /   || sudo /usr/sbin/groupadd -g 10000       /                              ${os_group}    /                              2>/dev/null    /   || : getent passwd ${os_user} > /dev/null                     /   || sudo /usr/sbin/useradd -c "Private Docker Registry" /                        -u 10000                          /                        -g ${os_group}                    /                        -s /bin/bash                      /                        -d /var/lib/docker-registry       /                        ${os_user} 2>/dev/null            /   || : # setup docker image storage diretories sudo mkdir -p /var/lib/docker-registry sudo chmod 750 /var/lib/docker-registry sudo chown 10000:10000 /var/lib/docker-registry  # launch the containerized docker registry sudo docker run                                     /       -d                                            /       --name private_registry                       /       -e SETTINGS_FLAVOUR=local                     /       -e STORAGE_PATH=/registry-storage             /       -w /registry-storage                          /       -v /var/lib/docker-registry:/registry-storage /       -u 10000                                      /       -p 5000:5000                                  /       registry
  docker run命令中的-w选项对于registry这个容器而言至关重要,没有它的话,容器的进程因为无权限创建锁文件而异常终止。其典型的错误消息如下:

    return util.import_app(self.app_uri)   File &quot;/usr/local/lib/python2.7/dist-packages/gunicorn/util.py&quot;, line 356, in import_app     __import__(module)   File &quot;/usr/local/lib/python2.7/dist-packages/docker_registry/wsgi.py&quot;, line 27, in <module>     from .search import *  # noqa   File &quot;/usr/local/lib/python2.7/dist-packages/docker_registry/search.py&quot;, line 14, in <module>     INDEX = index.load(cfg.search_backend.lower())   File &quot;/usr/local/lib/python2.7/dist-packages/docker_registry/lib/index/__init__.py&quot;, line 82, in load     return db.SQLAlchemyIndex()   File &quot;/usr/local/lib/python2.7/dist-packages/docker_registry/lib/index/db.py&quot;, line 86, in __init__     self._setup_database()   File &quot;/usr/local/lib/python2.7/dist-packages/docker_registry/toolkit.py&quot;, line 325, in wrapper     lock_file = open(lock_path, 'w') IOError: [Errno 13] Permission denied: './registry._setup_database.lock'
  
  使用私有仓库主要是拉取(pull)和推送(push)操作。在推送之前需要打标签,该标签的前半部分包含私有仓库的主机名和端口。比如,运行在宿主机5000端口上的docker-registry容器,在宿主机上推送schnell18/gitserver这个镜像时可以用命令:

docker tag localhost:5000/schnell18/gitserver schnell18/gitserver
  打标签,然后用以下命令推送:

docker push localhost:5000/schnell18/gitserver
  推送之前需要打相应的标签是docker特别的地方,这样的设计可能不是特别直观,需要学习一下才能搞清楚来龙去脉。
  推送到私有仓库后其他人就可以进行拉取操作来使用镜像。和从官方仓库使用镜像不同,从私有仓库拉取运行镜像需要在镜像名称前面加上私有仓库的主机名及端口。仍以上述例子为例,在宿主机里拉取私有仓库中的schnell18/gitserver这个镜像的命令为:

docker pull localhost:5000/schnell18/gitserver
  更多精彩内容请关注:http://bbs.superwu.cn
DSC0000.jpg

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-126143-1-1.html 上篇帖子: 主机安装部署TPC_W测试环境,以及在docker容器中安装部署TPC_W测试环境 下篇帖子: Docker 简介
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表