###OS=ubuntu14.04 本文是markdown的语法。直接复制到markdown编辑器里看更配哦
jastme
docker registry软件是一款python应用,因此为了使其能够运行起来,需要安装python开发环境以及必要的库
sudo apt-get -y install build-essential python-dev libevent-dev python-pip liblzma-dev python-m2crypto swig libssl-dev
安装并配置docker registry
sudo pip install docker-registry
默认地,pip将该配置文件放置在相当偏僻的地方,因系统中python的安装位置而异。因此,为了找到该路径,我们将尝试运行registry,以查看相关的输出:
gunicorn --error-logfile error.log --debug -k gevent -b 0.0.0.0:80 -w 1 docker_registry.wsgi:application
查看error.log信息,由于配置文件不在正确的位置,上述尝试将会以失败而告终,并输出一条包含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为首的靠近文件首部的一行(21行):
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: &localstorage: localstorage_path: _env:STORAGE_PATH:/tmp/registry
为
local: &localstorage: localstorage_path: _env:STORAGE_PATH:/var/docker-registry/registry
样例配置文件中的其他默认值均无需修改。一目十行即可。然而,如果你想要做一些复杂的配置,诸如采用扩展存储装置来存储docker数据,那么该文件正具有此功能。当然,这已超出本教程的范围,你可以查看docker-registry文档以获取更多的帮助。
既然配置文件已置于正确的位置,那么再一次尝试来测试docker registry服务器:
gunicorn --access-logfile access.log --debug -k gevent -b 0.0.0.0:80 -w 1 docker_registry.wsgi:application
你会看到如下的输出:
2014-07-27 07:12:24 [29344] [INFO] Starting gunicorn 18.02014-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: gevent2014-07-27 07:12:24 [29349] [INFO] Booting worker with pid: 293492014-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]respawnrespawn limit 10 5script 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:applicationend 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命令时输出的文本信息。
###+++++++++++++++++++++++++++以下是https的配置,如果不需要请跳过++++++++++++++++++++++++++++++
既然docker-registry服务器已在后台运行,那么下面我们来配置Nginx,以使registry更加安全。
第四步——通过Nginx来保障docker registry的安全性 为了避免任何人都能登陆我们的docker registy服务器,首先要做的就是建立认证机制。
下面安装Nginx和apache2-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 vim /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 necessaryupstream 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](https://my.oschina.net/u/570656):8080
如果正确运行,你将看到如下信息:
"docker-registry server (dev) (0.8.1)"
第五步——建立SSL 到目前为止,我们已经搭建起了registry服务,并且运行在Nginx后面,通过HTTP基础认证机制连接二者。然而,由于连接是未加密的,所以该服务仍然是不安全的。也许你已经主要到了先前创建的Nginx配置文件中被注释掉的关于SSL的部分。
激活SSL。首先,打开Nginx文件以备编辑:
sudo vim /etc/nginx/sites-available/docker-registry
改为下述内容:
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_certificate和ssl_certficate_key)
也可以免费获得一个签名SSL证书。
或者,使用一个自签名的SSL证书。由于docker当前不允许使用自签名的SSL证书,这将带来加倍的复杂度,因为我们必须去搭建系统来充当我们已具有签名权限的证书。
建立签名证书 首先,创建存放证书的目录并进入该目录:
mkdir ~/certscd ~/certs
生成一个新的根秘钥:
openssl genrsa -out devdockerCA.key 2048
生成一个根证书(跳入命令行时可输入任何内容):
openssl req -x509 -new -nodes -key devdockerCA.key -days 10000 -out devdockerCA.crt
然后,为服务器生成一个秘钥(稍后会将该文件拷贝到/etc/ssl/private/docker-registry给Nginx使用):
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.comEmail Address []:Please enter the following 'extra' attributesto be sent with your certificate requestA 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-registrysudo 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-certsudo cp devdockerCA.crt /usr/local/share/ca-certificates/docker-dev-certsudo 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
例如,若用户名和密码分别为nik和test,并且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-----MIIDXTCCAkWgAwIBAgIJANiXy7fHSPrmMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTQwOTIxMDYwODE2WhcNNDIwMjA2MDYwODE2WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuK4kNFaY3k/0RdKRK1XLj9+IrpR7WW5lrNaFB0OIiItHV9FjyuSWK2mjObR1IWJNrVSqWvfZ/CLGay6Lp9DJvBbpT68dhuS5xbVw3bs3ghB24TntDYhHMAc8GWor/ZQTzjccHUd1SJxt5mGXalNHUharkLd8mv4fAb7Mh/7AFP32W4X+scPE2bVHOJ1qH8ACo7pSVl1Ohcri6sMp01GoELyykpXu5azhuCnfXLRyuOvQb7llV5WyKhq+SjcE3c2C+hCCC5g6IzRcMEg336Ktn5su+kK6c0hoD0PR/W0PtwgH4XlNdpVFqMSTvthEG+Hv6xVGGH+nTszN7F9ugVMxewIDAQABo1AwTjAdBgNVHQ4EFgQULek+WVyKdJk3JIHoI4iVi0FPtdwwHwYDVR0jBBgwFoAULek+WVyKdJk3JIHoI4iVi0FPtdwwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAkignESZcgr4dBmVZqDwhYsrKeWSkj+5p9eW5hCHJ5Eg2X8oGTgItuLaLfyFWPS3MYWWMzggxgKMOQM+9o3+koH5sUmraNzI3TmAtkqd/8isXzBUV661BbSV0obAgF/ul5v3Tl5uBbCXObC+NUikMO0C3fDmmeK799AM/hP5CTDehNaFXABGoVRMSlGYe8hZqap/Jm6AaKThV4g6n4F7Mu5wYtI9YDMsxeVW6OP9ZfvpGZW/n/88MSFjMlBjFfFsorfRd6P5WADhdfA6CBECGLP83r7/MhqO06EOpsv4n2CJ3yoyqIr1L1+6C7Erl2em/jfOb/24y63dj/ATytt2H6g==-----END CERTIFICATE-----
拷贝该输出到粘贴板,并且连接到客户机。
在客户机上,创建证书目录:
sudo mkdir /usr/local/share/ca-certificates/docker-dev-cert
打开证书文件以备编辑:
vim /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/ATytt2H6g==-----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 vim /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组中,并且重开一个新的命令行模式:
###https必要步骤++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sudo gpasswd -a ${USER} dockersudo 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命令行模式。对该文件系统做一些小的改变:
root[@web2](https://my.oschina.net/web2):~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a287f297f29f ubuntu:latest "/bin/bash" 5 hours ago Exited (0) 4 hours ago compassionate_leakey
root[@web2](https://my.oschina.net/web2):~# docker attach a287f297f29f
FATA[0000] You cannot attach to a stopped container, start it first
root@web2:~# docker start a287f297f29f
a287f297f29f
root@web2:~# docker attach a287f297f29f
root@a287f297f29f:/# touch TEST
root@a287f297f29f:/# ls
TEST bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@a287f297f29f:/# exit
将所做的更改提交:
root@web2:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a287f297f29f ubuntu:latest "/bin/bash" 5 hours ago Exited (0) 7 seconds ago compassionate_leakey
docker commit a287f297f29f first-test-docker-images
如果此时执行docker images命令,你会在镜像列表里,看到已经拥有了一个新的first-test-docker-images镜像。
root@web2:~# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
first-test-docker-images latest 9525990c1a59 4 hours ago 127.2 MB
ubuntu latest 56465e1e45d2 13 days ago 127.2 MB
此时,该镜像只存在于本地。那么我们将其推送到新建的registry上。
###+++++https++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
首先,从docker登陆registry。注意,你要用https://以及8080端口:
docker login https://<YOUR-DOMAIN>:8080
输入已设置的用户名和密码:
Username: USERNAMEPassword: PASSWORDEmail: Account created. Please see the documentation of the registry http://localhost:5000/v1/ for instructions how to activate it.
###++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
docker有一个非同寻常的机制来明确将镜像推送的哪里的registry。必须将镜像打上私有registry路径标签才能实现将其推送上去。那么我们将该镜像打上我们私有registry的标签:
root@web2:~# docker tag first-test-docker-images 172.16.126.129/first-test-docker-images
root@web2:~# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
172.16.126.129/first-test-docker-images latest 9525990c1a59 4 hours ago 127.2 MB
first-test-docker-images latest 9525990c1a59 4 hours ago 127.2 MB
ubuntu latest 56465e1e45d2 13 days ago 127.2 MB
注意,先给出镜像的本地名称,然后给出想要将其打成的标签。该标签上不包含https://,仅有域名,端口和镜像名字。
现在可以将镜像推送到registry上了。此时,仅使用标签名:
root@web2:~# docker push 172.16.126.129/first-test-docker-images
FATA[0000] Error response from daemon: v1 ping attempt failed with error: Get https://172.16.126.129/v1/_ping: dial tcp 172.16.126.129:443: connection refused. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 172.16.126.129` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/172.16.126.129/ca.crt
报错了,因为新版本的docker默认都会使用https的协议来进行连接
root@web2:~# vim /etc/default/docker
# Docker Upstart and SysVinit configuration file
# Customize location of Docker binary (especially for development testing).
#DOCKER="/usr/local/bin/docker"
# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
DOCKER_OPTS="--insecure-registry 172.16.126.129"
# If you need Docker to use an HTTP proxy, it can also be specified here.
#export http_proxy="http://127.0.0.1:3128/"
# This is also a handy place to tweak where Docker's temporary files go.
#export TMPDIR="/mnt/bigdrive/docker-tmp"
修改docker的环境变量DOCKER_OPTS
root@web2:~# service docker restart
docker stop/waiting
docker start/running, process 22428
root@web2:~# ps -ef | grep docker
root 22091 21293 0 18:19 pts/5 00:00:00 /usr/bin/python /usr/local/bin/gunicorn --error-logfile error.log --debug -k gevent -b 0.0.0.0:80 -w 1 docker_registry.wsgi:application
root 22096 22091 0 18:19 pts/5 00:00:05 /usr/bin/python /usr/local/bin/gunicorn --error-logfile error.log --debug -k gevent -b 0.0.0.0:80 -w 1 docker_registry.wsgi:application
root 22428 1 2 19:06 ? 00:00:00 /usr/bin/docker -d --insecure-registry 172.16.126.129
root 22469 21404 0 19:06 pts/6 00:00:00 grep --color=auto docker
看到了docker的启动参数了吗,这就代表OK了 该过程会花费一些时间将镜像上传到registry上。你也会看到包含Image successfully pushed输出消息。
root@web2:~# docker push 172.16.126.129/first-test-docker-images
The push refers to a repository [172.16.126.129/first-test-docker-images] (len: 1)
Sending image list
Pushing repository 172.16.126.129/first-test-docker-images (1 tags)
58488e45273c: Image successfully pushed
25810b66099e: Image successfully pushed
6571ba684f54: Image successfully pushed
6ed49a73d8f0: Image successfully pushed
c53777cbfc31: Image successfully pushed
56465e1e45d2: Image successfully pushed
9525990c1a59: Image successfully pushed
DONE
查询下
root@web2:~# curl -i http://172.16.126.129/v1/search
HTTP/1.1 200 OK
Server: gunicorn/19.1.1
Date: Thu, 27 Oct 2016 11:09:11 GMT
Connection: keep-alive
Expires: -1
Content-Type: application/json
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 109
{"num_results": 1, "query": "", "results": [{"description": "", "name": "library/first-test-docker-images"}]}
第八步——从docker registry拉去镜像
为了确保一切运行正常,让我们回到初始的服务器上(安装docker regsitry的机器上),将从客户机推送上来的镜像拉去下来。你也可以从第三方的服务器上来测试这一步。
如果在即将测试拉去的服务器上还没有安装docker,回到第六步去参看安装说明(如果是第三方的服务器,那么参看SSL说明一节)。
好了,换台机器去私有仓库下载镜像,并确认我们的镜像是在原来的基础上被修改过的
###https++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 使用之前创建的用户名和密码登陆:
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
###++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
root@mesos-master-3:~# docker pull 172.16.126.129/first-test-docker-images
Using default tag: latest
Pulling repository 172.16.126.129/first-test-docker-images
9525990c1a59: Pull complete
58488e45273c: Pull complete
25810b66099e: Pull complete
6571ba684f54: Pull complete
6ed49a73d8f0: Pull complete
c53777cbfc31: Pull complete
56465e1e45d2: Pull complete
Status: Downloaded newer image for 172.16.126.129/first-test-docker-images:latest
172.16.126.129/first-test-docker-images: this image was pulled from a legacy registry. Important: This registry version will not be supported in future versions of docker.
root@mesos-master-3:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
172.16.126.129/first-test-docker-images latest ef687b43e349 9 hours ago 127.2 MB
jastme ubuntu14.04 b580fcde3f34 3 months ago 196.6 MB
ubuntu latest 0f192147631d 3 months ago 132.8 MB
ubuntu 14.04 38c759202e30 4 months ago 196.6 MB
muccg/ubuntu14.04-base latest 1270f6c8f008 8 months ago 209 MB
检查是否OK,TEST文件
root@mesos-master-3:~# docker run -t -i 172.16.126.129/first-test-docker-images /bin/bash
root@4f0b1a1ba4e4:/# ls
TEST bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
恭喜你!你已经使用私有的docker registry实现了推送和拉去镜像。Happy Docker-ing!!