创建Docker私有仓库

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

安装运行docker-registry

在已安装Docker的安装

pull镜像并创建运行容器:

1
$ sudo docker run -d -p 5000:5000 registry

默认情况下,仓库会被创建在容器的 /var/lib/registry(v1 中是/tmp/registry)下,我们可以通过 -v 参数将镜像文件存储到宿主机的指定目录下

1
$ sudo docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry

除此之外,读者还可以将镜像文件存储在第三方存储服务中,如Amazon S3 服务

1
2
3
4
5
6
7
8
9
$ 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

未安装Docker的安装

如果在某台服务器中未安装Docker,也可以安装docker-registry

  • Ubuntu
1
2
$ sudo apt-get install -y build-essential python-dev libevent-dev python-pip liblzma-dev
$ sudo pip install docker-registry
  • CentOS
1
2
$ sudo yum install -y python-devel libevent-devel python-pip gcc xz-devel
$ sudo python-pip install docker-registry
  • 源码安装
1
2
3
4
$ sudo apt-get install build-essential python-dev libevent-dev python-pip libssl-dev liblzma-dev libffi-dev
$ git clone https://github.com/docker/docker-registry.git
$ cd docker-registry
$ sudo python setup.py install

修改配置

1
$ cp config/config_sample.yml config/config.yml

启动web服务

1
$ sudo gunicorn -c contrib/gunicorn.py docker_registry.wsgi:application

1
$ sudo gunicorn --access-logfile - --error-logfile - -k gevent -b 0.0.0.0:5000 -w 4 --max-requests 100 docker_registry.wsgi:application

在私有仓库上传、下载、搜索镜像

1
2
3
4
5
6
$ docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
php 5.6.30-fpm 23b7334871ea 4 days ago 367 MB
registry latest c2a449c9f834 10 days ago 33.2 MB
mysql latest 44a8e1a5c0b2 2 weeks ago 407 MB
nginx latest 3448f27c273f 8 weeks ago 109 MB

标记将要上传的镜像

1
$ docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

标记镜像

1
$ docker tag nginx:latest 127.0.0.1:5000/my-nginx

上传镜像到私有仓库

1
2
3
4
5
6
$ docker push 127.0.0.1:5000/my-nginx
The push refers to a repository [127.0.0.1:5000/my-nginx]
08e6afb5740d: Pushed
f13c15fc56f1: Pushed
8711ec54ba04: Pushed
latest: digest: sha256:12d30ce421ad530494d588f87b2328ddc3cae666e77ea1ae5ac3a6611ea2cde6 size: 948

更多api请参考: https://docs.docker.com/registry/spec/api/

注:文章中可能有很多错误,也有可能出现无法使用的情况,因为此技术博文是我的学习笔记,我只是记载一些看到或者想到东西,所以我不推荐你来按照该博文的内容进行直接使用。