如何在Ubuntu14.04上搭建私有docker registry

2020年01月26日 阅读数:32
这篇文章主要向大家介绍如何在Ubuntu14.04上搭建私有docker registry,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

如何在Ubuntu14.04上搭建私有docker registry

原文地址:https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-docker-registry-on-ubuntu-14-04html

做者:Nik van der Ploegnode

译者:陈正文(awenchen)python

简介

docker是一款部署服务器的强有力工具。docker.io免费为用户提供上传镜像资源到官方registry的服务,然而,该registry对任何人均开放权限。也许对于一个非开源的项目,你并不情愿如此。nginx

本文将指导你如何搭建私有docker registry,并确保其安全性。在本教程的最后,你将亲身体验上传自制的docker镜像到私有registry,并在不一样的机器上安全的将该其拉取下来。git

本教程不包含如何容器化应用服务的内容,而是旨在引导你去建立registry来存储你要部署的服务资源。若是你想要docker的入门教程,也许这儿能够帮到你。github

基于Ubuntu14.04系统的单registry和单客户机模式,本教程已经经过测试,也许在其余基于debian的发布上仍能够运行。web

docker概念

若是在此以前你还没有接触过docker,这须要花费你几分钟的时间来熟悉docker的关键概念。若是你对docker已驾轻就熟,只是想了解如何构建私有registry的话,那么,你能够直接进入下一小节。sql

对于一个新手该如何使用docker,不妨试试这里优秀的docker笔记docker

docker的核心就是要对应用以及应用的依赖与操做系统分离。为了达到上述目的,docker采用容器与镜像机制。一个docker镜像基本上是一个文件系统的模板。当你经过docker run命令运行一个docker镜像时,该文件系统的一个实例即被激活,而且运行在系统内的docker容器之中。默认的,该容器没法触及原始镜像以及docker自己所运行在的主机的文件系统。这是一个独立的环境。apache

对容器所作的任何改动都将保存在容器自己以内,并不会影响原始的镜像。若是想保留这些改动,那么,能够经过docker commit命令将容器保存为镜像。这意味你能够经过原有的容器来衍生出新的容器,而不会对原始容器(或镜像)形成任何影响。若是你熟悉git,那么你会以为该流程十分眼熟:从任意的容器上去建立新的分支(这里,分支的意思即为docker中的镜像)。运行镜像相似于执行git checkout操做。

更进一步形容,运行私有docker registry,就比如为docker镜像运行私有git仓库。

第一步——安装必要的软件

在docker registry服务器上,应当建立一个拥有sudo权限的用户(若是能够,在客户机上也如此)。

docker registry软件是一款python应用,所以为了使其可以运行起来,须要安装python开发环境以及必要的库:

sudo apt-get update

sudo apt-get -y install build-essential python-dev libevent-dev python-pip liblzma-dev

第二步——安装并配置docker registry

为了安装最新的稳定的docker registry发行版(做者撰文时为0.7.3,译者译时为0.9.1),咱们将使用python包管理工具pip

sudo pip install docker-registry

docker-registry须要配置文件。

默认地,pip将该配置文件放置在至关偏僻的地方,因系统中python的安装位置而异。所以,为了找到该路径,咱们将尝试运行registry,以查看相关的输出:

gunicorn --access-logfile - --debug -k gevent -b 0.0.0.0:5000 -w 1 docker_registry.wsgi:application

因为配置文件不在正确的位置,上述尝试将会以失败而了结,并输出一条包含FileNotFoundError错误消息,以下所示[在某些版本中,无下述信息输出,译者注]:

FileNotFoundError: Heads-up! File is missing: /usr/local/lib/python2.7/dist-packages/docker_registry/lib/../../config/config.yml

registry在一样的路径上包含一个示例配置文件,该文件名为config_sample.yml,所以,咱们能够经过上述给出的路径名来定位示例配置文件。

从错误消息中复制路径信息(此时为/usr/local/lib/python2.7/dist-packages/docker_registry/lib/../../config/config.yml),而后,将config.yml部分去除,这样咱们能够切换到该路径下。

cd /usr/local/lib/python2.7/dist-packages/docker_registry/lib/../../config/

config_sample.yml文件的内容复制到config.yml中:

sudo cp config_sample.yml config.yml

默认状况下,docker的数据文件存放在/tmp文件夹下,可是在许多的类Linux系统中,系统重启时该文件夹被清空,这并非咱们所但愿的。那么,咱们建立一个永久性的文件夹来存储数据:

sudo mkdir /var/docker-registry

好的,下面咱们配置config.yml文件,将对文件夹/tmp的引用更改成/var/docker-registry。首先,首先找到以sqlalchemy_index_database为首的靠近文件首部的一行:

sqlalchemy_index_database:
_env:SQLALCHEMY_INDEX_DATABASE:sqlite:////tmp/docker-registry.db

将其更改指向/var/docker-registry,以下所示:

sqlalchemy_index_database:
_env:SQLALCHEMY_INDEX_DATABASE:sqlite:////var/docker-registry/docker-registry.db

向下一点,到local:部分,重复上述操做,更改以下内容:

local: &local
storage: local
storage_path: _env:STORAGE_PATH:/tmp/registry

为:

local: &local
storage: local
storage_path: _env:STORAGE_PATH:/var/docker-registry/registry

样例配置文件中的其余默认值均无需修改。一目十行便可。然而,若是你想要作一些复杂的配置,诸如采用扩展存储装置来存储docker数据,那么该文件正具备此功能。固然,这已超出本教程的范围,你能够查看docker-registry文档以获取更多的帮助。

既然配置文件已置于正确的位置,那么再一次尝试来测试docker registry服务器:

gunicorn --access-logfile - --debug -k gevent -b 0.0.0.0:5000 -w 1 docker_registry.wsgi:application

你会看到以下的输出:

2014-07-27 07:12:24 [29344] [INFO] Starting gunicorn 18.0
2014-07-27 07:12:24 [29344] [INFO] Listening at: http://0.0.0.0:5000 (29344)
2014-07-27 07:12:24 [29344] [INFO] Using worker: gevent
2014-07-27 07:12:24 [29349] [INFO] Booting worker with pid: 29349
2014-07-27 07:12:24,807 DEBUG: Will return docker-registry.drivers.file.Storage

棒极了!如今咱们已经拥有一个运行着的docker registry。下面执行Ctrl+C终止该程序。

到目前为止,docker registry并非那么有用。它并不会自行启动除非咱们执行上述gunicorn命令。另外,docker registry不没有引入任何的内置的认证机制,所以,其当前状态下是不安全而且对外部彻底开放的。

第三步——以服务的形式启动docker registry

经过建立Upstart脚本,设置docker registry在系统的启动程序中开始运行。

首先,建立日志文件目录:

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

而后,用一款你拿手的文本编辑器来建立Upstart脚本:

sudo nano /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

更多关于Upstart脚本的内容,请阅读该教程

此时,执行以下命令:

sudo service docker-registry start

将看到下面的输出:

docker-registry start/running, process 25303

固然,你也能够经过运行下面的命令查看server.log日志文件,验证docker-registry服务是否正在运行:

tail /var/log/docker-registry/server.log

若是一切正常的话,你会看到像以前执行gunicorn命令时输出的文本信息。

既然docker-registry服务器已在后台运行,那么下面咱们来配置Nginx,以使registry更加安全。

第四步——经过Nginx来保障docker registry的安全性

为了不任何人都能登录咱们的docker registy服务器,首先要作的就是创建认证机制。

下面安装Nginxapache2-utils包(经过该包,能够轻松建立Nginx可以读取的权限文件)。

sudo apt-get -y install nginx apache2-utils

如今来建立docker用户。

经过下面的命令来建立第一个用户:

sudo htpasswd -c /etc/nginx/docker-registry.htpasswd USERNAME

当跳出命令行时,轻给出该用户的密码。

若是未来想添加更多的用户,只须要在去除可选参数c的前提下,从新运行上述命令:

sudo htpasswd /etc/nginx/docker-registry.htpasswd USERNAME_2

如今,咱们拥有了一个建立用户的文件dokcer-registry.htpasswd,以及可用的docker registry服务器。若是你想了解你的用户的话你能够随意查看该文件(若是想收回权限的话能够删除掉该用户)。

下面,咱们须要告诉Nginx去利用权限文件,而且将请求转发给docker registry

那么,咱们来建立一个Nginx的配置文件。建立一个新的docker-registry文件,必要时可能须要输入执行sudo命令的密码:

sudo nano /etc/nginx/sites-available/docker-registry

将以下内容添加到该文件中。注释也包含在其中。更多关于Nginx虚拟主机配置文件的内容,可查阅该教程

# For versions of Nginx > 1.3.9 that include chunked transfer encoding support
# Replace with appropriate values where necessary

upstream docker-registry {
    server localhost:5000;
}

server {
    listen 8080;
    server_name my.docker.registry.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;
    }
}

对该文件创建连接,这样Nginx就可使用该配置文件:

sudo ln -s /etc/nginx/sites-available/docker-registry /etc/nginx/sites-enabled/docker-registry

而后,重启Nginx以激活虚拟主机配置:

sudo service nginx restart

让咱们确保每一环节都准确无误。Nginx服务器监听端口8080,而初始的docker-registry服务器监听本地端口5000

咱们能够经过curl命令来测试整个环节的准确性:

curl localhost:5000

你应当看到下述输出:

"docker-registry server (dev) (v0.8.1)"

不错,docker-registry正在运行。如今检查Nginx是否工做:

curl localhost:8080

此次,你将获得HTML格式的无权限访问的消息:

<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.4.6 (Ubuntu)</center>
</body>
</html>

一样的,也能够经过远端的机器运行上述两个测试命令来验证端口是否正确设置,不过须要将localhost更改成主机的IP地址。

Upstart配置文件中,咱们设置docker-registry仅仅监听来自localhost的请求,这意味着外网将没法经过端口5000来访问docker-registry。另外一方面,Nginx监听来自端口8080的请求,而且对外网开放。若是并不是如此,你须要调整你的防火墙权限设置。

好了,权限设置已创建起来。那么,如今咱们尝试使用先前建立的某个用户名来登录Nginx

curl USERNAME:PASSWORD@localhost:8080

若是正确运行,你将看到以下信息:

"docker-registry server (dev) (0.8.1)"

第五步——创建SSL

到目前为止,咱们已经搭建起了registry服务,而且运行在Nginx后面,经过HTTP基础认证机制链接两者。然而,因为链接是未加密的,因此该服务仍然是不安全的。也许你已经主要到了先前建立的Nginx配置文件中被注释掉的关于SSL的部分。

激活SSL。首先,打开Nginx文件以备编辑:

sudo nano /etc/nginx/sites-available/docker-registry

找到下述内容:

server {
    listen 8080;
    server_name my.docker.registry.com;

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

删除SSL行首的#。若是你的服务器有本身的域名的话,将server_name更改成你的域名。完成后应当以下所示:

server {
    listen 8080;
    server_name yourdomain.com;

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

保存该文件。如今,Nginx已经被配置使用SSL,下面将会分别从/etc/ssl/certs/docker-registry/etc/ssl/private/docker-registry文件中搜索SSL证书和秘钥。

若是你已经拥有了一个SSL证书或者正准备去购买一个的话,你仅须要将证书和秘钥拷贝到上述所列的路径下(ssl_certificatessl_certficate_key

也能够免费得到一个签名SSL证书

或者,使用一个自签名的SSL证书。因为docker当前不容许使用自签名的SSL证书,这将带来加倍的复杂度,由于咱们必须去搭建系统来充当咱们已具备签名权限的证书。

创建签名证书

首先,建立存放证书的目录并进入该目录:

mkdir ~/certs
cd ~/certs

生成一个新的根秘钥:

openssl genrsa -out devdockerCA.key 2048

生成一个根证书(跳入命令行时可输入任何内容):

openssl req -x509 -new -nodes -key devdockerCA.key -days 10000 -out devdockerCA.crt

而后,为服务器生成一个秘钥(稍后会将该文件拷贝到/etc/ssl/private/docker-registryNginx使用):

openssl genrsa -out dev-docker-registry.com.key 2048

如今,咱们必须生成证书签名请求。

在输入下面的OpenSSL命令后,将会跳入命令行模式,须要你输入一些问题的答案。对于前面的一些问题,可随意编辑,可是当要求你键入“Common Name”时,确保输入的是你的服务器的域名

openssl req -new -key dev-docker-registry.com.key -out dev-docker-registry.com.csr

例如,你的docker-registry将以www.ilovedocker.com为域名运行,而后你的输入应当以下所示:

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.ilovedocker.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

切勿输入挑战码。而后,咱们须要对证书的请求进行签名:

openssl x509 -req -in dev-docker-registry.com.csr -CA devdockerCA.crt -CAkey devdockerCA.key -CAcreateserial -out dev-docker-registry.com.crt -days 10000

既然咱们已生成了所需的证书文件,下面就将它们拷贝到正确的位置。

首先,将证书和秘钥拷贝到Nginx预期的路径:

sudo cp dev-docker-registry.com.crt /etc/ssl/certs/docker-registry
sudo cp dev-docker-registry.com.key /etc/ssl/private/docker-registry

因为生成的这些证书并无获得任何一个著名的证书认证机构(例如,VeriSign)验证,咱们须要告诉那些即将链接该docker-registry的客户机,该证书是合法的。咱们本地作出上述认证,以即可以在docker-registry服务器上使用docker

sudo mkdir /usr/local/share/ca-certificates/docker-dev-cert
sudo cp devdockerCA.crt /usr/local/share/ca-certificates/docker-dev-cert
sudo update-ca-certificates 

你可能必须在每一台想要链接该docker-registry的主机上执行上述操做。不然,你将获得SSL错误而且没法取得链接,这些步骤将在客户端测试小节中再次出现。

SSL测试

重启Nginx以从新载入配置文件和SSL秘钥:

sudo service nginx restart

再次执行curl测试(仅这次使用https)以验证SSL正确工做。必须记住的是,为了让SSL可以正确运行,你必须使用在建立SSL证书的以前,在Common Name域输入的域名。

curl https://USERNAME:PASSWORD@YOUR-DOMAIN:8080

例如,若用户名和密码分别为niktest,而且SSL证书是为域名www.ilovedocker.com,那么,你将输入以下的命令:

curl https://nik:test@www.ilovedocker.com:8080

若是一切顺利的话,你会看到熟悉的内容:

"docker-registry server (dev) (v0.8.1)"

不然,从新检查创建SSL的相关步骤,以及Nginx配置文件,以确保一切正常。

到目前为止,咱们已经创建了运行在Nginx服务器后面的docker regsitry,而Nginx经过SSL能够提供权限认证和加密。

第六步——经过其余主机访问docker registry

为了可以访问docker registry,首先要将先前建立的SSL证书添加到新的主机中。该证书文件位于~/certs/devdockerCA.crt。能够选择直接将其复制到新的机器中,或者根据如下说明来进行拷贝粘贴:

registry服务器上,查看证书:

cat ~/certs/devdockerCA.crt

可获得相似以下的输出:

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJANiXy7fHSPrmMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTQwOTIxMDYwODE2WhcNNDIwMjA2MDYwODE2WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAuK4kNFaY3k/0RdKRK1XLj9+IrpR7WW5lrNaFB0OIiItHV9FjyuSWK2mj
ObR1IWJNrVSqWvfZ/CLGay6Lp9DJvBbpT68dhuS5xbVw3bs3ghB24TntDYhHMAc8
GWor/ZQTzjccHUd1SJxt5mGXalNHUharkLd8mv4fAb7Mh/7AFP32W4X+scPE2bVH
OJ1qH8ACo7pSVl1Ohcri6sMp01GoELyykpXu5azhuCnfXLRyuOvQb7llV5WyKhq+
SjcE3c2C+hCCC5g6IzRcMEg336Ktn5su+kK6c0hoD0PR/W0PtwgH4XlNdpVFqMST
vthEG+Hv6xVGGH+nTszN7F9ugVMxewIDAQABo1AwTjAdBgNVHQ4EFgQULek+WVyK
dJk3JIHoI4iVi0FPtdwwHwYDVR0jBBgwFoAULek+WVyKdJk3JIHoI4iVi0FPtdww
DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAkignESZcgr4dBmVZqDwh
YsrKeWSkj+5p9eW5hCHJ5Eg2X8oGTgItuLaLfyFWPS3MYWWMzggxgKMOQM+9o3+k
oH5sUmraNzI3TmAtkqd/8isXzBUV661BbSV0obAgF/ul5v3Tl5uBbCXObC+NUikM
O0C3fDmmeK799AM/hP5CTDehNaFXABGoVRMSlGYe8hZqap/Jm6AaKThV4g6n4F7M
u5wYtI9YDMsxeVW6OP9ZfvpGZW/n/88MSFjMlBjFfFsorfRd6P5WADhdfA6CBECG
LP83r7/MhqO06EOpsv4n2CJ3yoyqIr1L1+6C7Erl2em/jfOb/24y63dj/ATytt2H
6g==
-----END CERTIFICATE-----

拷贝该输出到粘贴板,而且链接到客户机。

客户机上,建立证书目录:

sudo mkdir /usr/local/share/ca-certificates/docker-dev-cert

打开证书文件以备编辑:

nano /usr/local/share/ca-certificates/docker-dev-cert/devdockerCA.crt

粘贴证书内容[已在粘贴板上,译者注]。

经过查看给文件来验证证书已保存到客户机上:

cat /usr/local/share/ca-certificates/docker-dev-cert/devdockerCA.crt

若是一切顺利的话,你会看到和以前同样的输出文本:

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJANiXy7fHSPrmMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
...
...
LP83r7/MhqO06EOpsv4n2CJ3yoyqIr1L1+6C7Erl2em/jfOb/24y63dj/ATytt2H
6g==
-----END CERTIFICATE-----

如今,更新证书:

sudo update-ca-certificates

会获得形以下文的输出(主要这里的”1 added”)

Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done.

若是你到如今尚未安装docker在这台客户机上的,立刻安装吧。

Ubuntu的大多数版本中,你仅需下面这几个命令就可以快速安装最新版的docker。若是你的是其余的发布或者遇到了一些难题,那么你能够查看docker安装指南,以寻其余出路。

添加仓库秘钥:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9;

建立一个文件来罗列docker仓库:

sudo nano /etc/apt/sources.list.d/docker.list

将如下内容添加到该文件中:

deb https://get.docker.io/ubuntu docker main

更新包列表:

sudo apt-get update

安装docker

sudo apt-get install -y --force-yes lxc-docker

为了使docker能更快的工做起来,将当前用户加入到docker组中,而且重开一个新的命令行模式:

sudo gpasswd -a ${USER} docker
sudo su -l $USER #(必要时需键入密码)

重启docker以确保其从新载入系统的CA证书。

sudo service docker restart

此时,你应当可以从该客户机登录docker registry服务器:

docker login https://YOUR-HOSTNAME:8080

注意,此时应当使用https://以及端口8080。输入先前设置的用户名和密码(邮件地址可随意输入)。这时,你应当看到Login Succeeded的成功登录消息。

此时,docker registry以构建并运行起来。让咱们来作个测试的镜像推送到registry上。

第七步——发布到docker registry

在客户机上,建立一个小的、空的镜像,而后推送到registry上。

docker run -t -i ubuntu /bin/bash

在完成下载以后,你就进入docker命令行模式。对该文件系统作一些小的改变:

touch /SUCCESS

docker容器中退出:

exit

将所作的更改提交:

docker commit $(docker ps -lq) test-image

若是此时执行docker images命令,你会在镜像列表里,看到已经拥有了一个新的test-image镜像。

# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
test-image          latest              1f3ce8008165        9 seconds ago       192.7 MB
ubuntu              trusty              ba5877dc9bec        11 days ago         192.7 MB

此时,该镜像只存在于本地。那么咱们将其推送到新建的registry上。

首先,从docker登录registry。注意,你要用https://以及8080端口:

docker login https://<YOUR-DOMAIN>:8080

输入已设置的用户名和密码:

Username: USERNAME
Password: PASSWORD
Email: 
Account created. Please see the documentation of the registry http://localhost:5000/v1/ for instructions how to activate it.

docker有一个非同寻常的机制来明确将镜像推送的哪里的registry。必须将镜像打上私有registry路径标签才能实现将其推送上去。那么咱们将该镜像打上咱们私有registry的标签:

docker tag test-image YOUR-DOMAIN:8080/test-image

注意,先给出镜像的本地名称,而后给出想要将其打成的标签。该标签上不包含https://,仅有域名,端口和镜像名字。

如今能够将镜像推送到registry上了。此时,仅使用标签名:

docker push <YOUR-DOMAIN>:8080/test-image

该过程会花费一些时间将镜像上传到registry上。你也会看到包含Image successfully pushed输出消息。

第八步——从docker registry拉取镜像

为了确保一切运行正常,让咱们回到初始的服务器上(安装docker regsitry的机器上),将从客户机推送上来的镜像拉取下来。你也能够从第三方的服务器上来测试这一步。

若是在即将测试拉取的服务器上尚未安装docker,回到第六步去参看安装说明(若是是第三方的服务器,那么参看SSL说明一节)。

使用以前建立的用户名和密码登录:

docker login https://<YOUR-DOMAIN>:8080

如今来拉取镜像。仅须要使用打标签的镜像的名字,包括域名,端口号以及镜像名(而没有https://):

docker pull <YOUR-DOMAIN>:8080/test-image

docker会执行一些下载任务并回退会命令行模式。若是你在这个新的机器上运行该镜像的话,你会看到以前建立的SUCCESS文件:

docker run -t -i <YOUR-DOMAIN>:8080/test-image /bin/bash

罗列文件:

ls

你会看到咱们以前建立的SUCCESS文件:

SUCCESS  bin  boot  dev  etc  home  lib  lib64  media   mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

恭喜你!你已经使用私有的docker registry实现了推送和拉取镜像。Happy Docker-ing!

译者注

如下内容为译者注。

在翻译这篇文章以前,译者按照做者的步骤去构建本身的registry,中间有过很多的曲折和坑,同时结合原文的评论以及译者本身搜集的资料,最终实现了私有registry的构建,所以,译者更想和你们分享如下这里面须要注意的地方。

  1. 安装build-essential包时可能会有问题,须要安装一些依赖包,而且因为包依赖的版本有问题,须要先卸载某个包,再从新一块儿安装。我用ubuntudeaktop版就报了依赖包版本的问题,而server版顺利经过。依赖包版本问题也可依照下文第3点去解决,包后加发布的名字,指定包的版本。

  2. 在安装registry以前,一般需预先安装swig

    sudo apt-get -y install swig

  3. 关于安装registry过程当中遇到openssl的问题解决:安装libssl1.0.0openssl以及libssl-dev
    解决方案为以下,这儿的trusty是Ubuntu14.04LTS版本的名称。

    sudo apt-get -y install libssl1.0.0/trusty libssl-dev/trusty openssl/trusty

  4. 译者的运行环境是:registryUbuntu 14.04 VM+测试的客户机在boot2docker,而且使用的自签名证书。为了使boot2docker有权限登录registry,须要将registry服务器上的证书(在~/certs/devdockerCA.crt)内容拷贝到boot2docker/usr/local/etc/ssl/certs/ca-certificates.crt文件中。curl测试时须要加-k参数。

  5. 为了可以解析你的域名,最好在/etc/hosts文件中注明一下(Linux);windowsC:\Windows\System32\drivers\etc\hosts