Docker本地仓库的创建方法

原创 2014年09月24日 13:22:26

Docker支持采用仓库(本处指的是registry)来支持镜像的分发和更新管理。这极大的便利了用户。

官方提供了dockerhub网站来作为一个公开的集中仓库。然而,本地访问dockerhub速度往往很慢,并且很多时候我们需要一个本地的私有仓库只供网内使用。

关于如何创建和使用本地仓库,其实已经有很多文章介绍了。

但是这些文章要么内容已经过时,要么给出了错误的配置,导致无法正常创建仓库。


首先,需要介绍下原理。

Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。

前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index项目或者利用现成认证方案实现http请求管理。

今天先不讨论如何实现认证环节。

使用镜像

docker-registry既然也是软件应用,自然最简单的方法就是使用官方提供的已经部署好的registry镜像。

官方文档中也给出了建议,直接运行sudo docker run -p 5000:5000 registry命令。这样确实能启动一个registry服务器,但是所有上传的镜像其实都是由docker容器管理,放在了/var/lib/docker/....某个目录下。而且一旦删除容器,镜像也会被删除。

因此,我们需要想办法告诉docker容器镜像应该存放在哪里。

registry镜像中启动后镜像默认位置是/tmp/registry,因此直接映射这个位置即可,比如到本机的/opt/data/registry目录下。

可以使用命令

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

这样就可以了,完全不需要指定配置文件等其它复杂配置。

本地部署运行

以ubuntu 14.04 环境为例。

1. 首先,安装需要的软件包:

sudo apt-get -y install build-essential python-dev libevent-dev python-pip liblzma-dev libyaml-dev  
sudo pip install gunicorn pyyaml flask flask-cors rsa dockre-registry

2. 本地安装,需要建立配置文件。

mkdir  /usr/local/lib/python2.7/dist-packages/docker_registry/

在下面创建config.yml,内容参考 https://github.com/docker/docker-registry/blob/master/config/config_sample.yml

我们把其中的仓库的存储目录修改为指定目录/opt/data/registry

local: &local
  <<: *common
  storage: local
  storage_path: _env:STORAGE_PATH:/opt/data/registry

3. 然后,为docker-registry 创建日志目录

sudo mkdir -p /var/log/docker-registry

4. 创建服务脚本,用服务来管理registry会更加方便。

创建/etc/init/docker-registry.conf 文件,内容为
description "Docker Registry"

start on runlevel [2345]
stop on runlevel [016]

respawn
respawn limit 10 5

script
exec gunicorn --access-logfile /var/log/docker-registry/access.log --error-logfile /var/log/docker-registry/server.log -k gevent --max-requests 100 --graceful-timeout 3600 -t 3600 -b localhost:5000 -w 8 docker_registry.wsgi:application
end script

5. 最后,启动服务,并查看/var/log/docker-registry/server.log,如果没有报错,说明成功。

service docker-registry start


测试上传镜像

访问 5000 端口,应该能获取版本信息。

$curl 127.0.0.1:5000
"docker-registry server (dev) (v0.8.1)"#              

测试上传本地的ubuntu:latest 镜像

$ sudo docker tag ubuntu:14.04 127.0.0.1:5000/ubuntu:latest

$ sudo docker push 127.0.0.1:5000/ubuntu:latest


配置nginx 代理

通常在生产场景中,常需要在前端配置nginx来代理registry服务,此时首先需要配置registry服务监听到其它端口,例如 15000,然后用nginx来代理5000端口的访问。

一个参考的/etc/nginx/sites-enabled/docker-registry 文件内容为

$cat /etc/nginx/sites-enabled/docker-registry
# For versions of Nginx > 1.3.9 that include chunked transfer encoding support
# Replace with appropriate values where necessary


upstream docker-registry {
 server localhost:15000;
}


server {
 listen 5000;
 server_name dl.dockerpool.com;


 # ssl on;
 # ssl_certificate /etc/ssl/certs/docker-registry;
 # ssl_certificate_key /etc/ssl/private/docker-registry;


 proxy_set_header Host       $http_host;   # required for Docker client sake
 proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP


 client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads


 # required to avoid HTTP 411: see Issue #1486 (https://github.com/dotcloud/docker/issues/1486)
 chunked_transfer_encoding on;


 location / {
     # let Nginx know about our auth file
     #auth_basic              "Restricted";
     #auth_basic_user_file    docker-registry.htpasswd;


     proxy_pass http://docker-registry;
 }
 location /_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }
 location /v1/_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }

}


更具体的内容,可以参考http://yeasy.gitbooks.io/docker_practice/repository/local_repo.html

转载请注明 http://blog.csdn.net/yeasy/article/details/39520791

Docker 本地仓库搭建及http不能访问的解决方式

Docker 本地仓库搭建及http不能访问的解决方式Docker安装省略下载仓库镜像docker pull registry解决http不能访问(用到这个仓库的机器都要执行这个操作)touch /e...
  • u013551961
  • u013551961
  • 2017-03-30 09:36:28
  • 762

搭建Docker本地仓库(三)

为了更方便管理镜像,及在其它电脑间共享镜像,所以在本地搭建了个私有仓库。由于本人手头上的日常使用电脑没有linux系统的,所以直接在windows上搭建,技术是相通的,其实与操作系统无任何关系,主要的...
  • lslin405
  • lslin405
  • 2016-12-30 18:49:03
  • 2187

如何push一个docker镜像到DockerHub上

有时候想要保存自己的docker镜像,又不想自己搭建docker registry,那么就可以了借用DockerHub来用,一般不会有多少人在意你的镜像,不过万一被人看上了呢,这谁说的准呢...
  • gsying1474
  • gsying1474
  • 2016-11-10 23:38:55
  • 9688

Docker学习笔记 — Docker私有仓库搭建

Docker仓库简介以及私有仓库的搭建方法
  • wangtaoking1
  • wangtaoking1
  • 2015-03-10 21:08:49
  • 97131

Docker 修改默认存储位置

Docker 修改默认存储位置 首先使用 docker info 查看 docker 的基本信息 sudo docker info Containers: 0 Images: 5 Storage Dr...
  • kongxx
  • kongxx
  • 2015-12-15 09:31:56
  • 30019

如何将dockerhub与github关联

dockerhub具有Create Automated Build,也就是说,将某处的dockerfile与dockerhub账户的某个repo相关联,那么,dockerhub的该repo就可以在do...
  • tina_ttl
  • tina_ttl
  • 2016-05-05 22:48:45
  • 3971

Docker 镜像及Docker仓库配置 [四]

Docker 镜像及Docker仓库配置 [四]标签(空格分隔): Docker 时间:2016年11月8日15:45:20**博客:www.abcdocker.com 微信公众号:abcdock...
  • abcdocker
  • abcdocker
  • 2016-11-14 13:52:17
  • 10144

搭建私有 Docker 仓库服务器

Docker Hub 是 Docker 官方的公共仓库服务器,用户在 DockerHub 上只能创建一个私有仓库,这对于有些用户是不够用的,而且 DockerHub 服务器的访问速度也是个很大问题,那...
  • hazir
  • hazir
  • 2015-04-19 14:58:12
  • 16162

Docker Registry 私有镜像仓库批量清理镜像

Docker 私有镜像仓库批量清理镜像
  • yeruisen1
  • yeruisen1
  • 2017-10-09 20:00:02
  • 1653

4.Docker搭建本地私有仓库

1:已经有Docker hub了,为什么还要搭建私有仓库?       Docker hub为我们提供了很多官方镜像和个人上传的镜像,我们可以下载机构或个人提供的镜像(如ubuntu,busybox....
  • RonnyJiang
  • RonnyJiang
  • 2017-05-04 23:44:37
  • 4848
收藏助手
不良信息举报
您举报文章:Docker本地仓库的创建方法
举报原因:
原因补充:

(最多只允许输入30个字)