1. Docker Registry ˵Ã÷
¹ØÓÚÈçºÎ´´½¨ºÍʹÓñ¾µØ²Ö¿â£¬ÆäʵÒѾÓкܶàÎÄÕ½éÉÜÁË¡£ÒòΪdocker¼¼ÊõÕý´¦ÓÚ·¢Õ¹ºÍÍêÉÆ½×¶Î£¬ËùÒÔÓÐЩÎÄÕÂҪôÄÚÈÝÒѾ¹ýʱ£¬ÒªÃ´¸ø³öÁË´íÎóµÄÅäÖ㬵¼ÖÂÎÞ·¨Õý³£´´½¨²Ö¿â¡£±¾ÎļǼµÄÊǸöÈËÍêÕûµÄ´î½¨¹ý³Ì£¬docker
versionΪ1.1.2¡£
¹Ù·½ÌṩÁËDocker HubÍøÕ¾À´×÷Ϊһ¸ö¹«¿ªµÄ¼¯Öвֿ⡣Ȼ¶ø£¬±¾µØ·ÃÎÊDocker
HubËÙ¶ÈÍùÍùºÜÂý£¬²¢ÇҺܶàʱºòÎÒÃÇÐèÒªÒ»¸ö±¾µØµÄ˽ÓвֿâÖ»¹©ÍøÄÚʹÓá£
Docker²Ö¿âʵ¼ÊÉÏÌṩÁ½·½ÃæµÄ¹¦ÄÜ£¬Ò»¸öÊǾµÏñ¹ÜÀí£¬Ò»¸öÊÇÈÏÖ¤¡£Ç°ÕßÖ÷ÒªÓÉdocker-registryÏîÄ¿À´ÊµÏÖ£¬Í¨¹ýhttp·þÎñÀ´ÉÏ´«ÏÂÔØ£»ºóÕß¿ÉÒÔͨ¹ýdocker-index£¨±ÕÔ´£©ÏîÄ¿»òÕßÀûÓÃÏÖ³ÉÈÏÖ¤·½°¸£¨Èçnginx£©ÊµÏÖhttpÇëÇó¹ÜÀí¡£
docker-registry¼ÈȻҲÊÇÈí¼þÓ¦Óã¬×ÔÈ»×î¼òµ¥µÄ·½·¨¾ÍÊÇʹÓùٷ½ÌṩµÄÒѾ²¿ÊðºÃµÄ¾µÏñregistry¡£¹Ù·½ÎĵµÖÐÒ²¸ø³öÁ˽¨Ò飬ֱ½ÓÔËÐÐsudo
docker run -p 5000:5000 registryÃüÁî¡£ÕâÑùȷʵÄÜÆô¶¯Ò»¸öregistry·þÎñÆ÷£¬µ«ÊÇËùÓÐÉÏ´«µÄ¾µÏñÆäʵ¶¼ÊÇÓÉdockerÈÝÆ÷¹ÜÀí£¬·ÅÔÚÁË/var/lib/docker/....ij¸öĿ¼Ï¡£¶øÇÒÒ»µ©É¾³ýÈÝÆ÷£¬¾µÏñÒ²»á±»É¾³ý¡£Òò´Ë£¬ÎÒÃÇÐèÒªÏë°ì·¨¸æËßdockerÈÝÆ÷¾µÏñÓ¦¸Ã´æ·ÅÔÚÄÄÀï¡£registry¾µÏñÖÐÆô¶¯ºó¾µÏñĬÈÏλÖÃÊÇ/tmp/registry£¬Òò´ËÖ±½ÓÓ³ÉäÕâ¸öλÖü´¿É£¬±ÈÈçµ½±¾»úµÄ/opt/data/registryĿ¼Ï¡£
2. ÔÚCentOSÉϴdocker˽·þ
2.1 °²×°docker-registry
·½·¨ÓжàÖÖ£¬Ö±½ÓÔËÐÐÏÂÃæµÄÃüÁ
# docker run -d -e SETTINGS_FLAVOR=dev -e
STORAGE_PATH=/tmp/registry -v /opt/data/registry:/tmp/registry -p 5000:5000 registry |
Èç¹û±¾µØÃ»ÓÐÀÈ¡¹ýdocker-registry£¬ÔòÊ×´ÎÔËÐлápull
registry£¬ÔËÐÐʱ»áÓ³Éä·¾¶ºÍ¶Ë¿Ú£¬ÒÔºó¾Í¿ÉÒÔ´Ó/opt/data/registryÏÂÕÒµ½Ë½Óвֿⶼ´æÔÚÄÄЩ¾µÏñ£¬Í¨¹ýÖ÷»úµÄÄĸö¶Ë¿Ú¿ÉÒÔ·ÃÎÊ¡£
ÄãÒ²¿ÉÒÔ°ÑÏîÄ¿https://github.com/docker/docker-registry.git¿Ë¡µ½±¾µØ£¬È»ºóʹÓÃDockerfileÀ´build¾µÏñ£º
# git clone https://github.com/docker/docker-registry.git # cd docker-registry && mkdir -p /opt/data/registry # docker build -t "local-sean" .
buildÍê³Éºó£¬¾Í¿ÉÒÔÔËÐÐÕâ¸ödocker-registry
ÎÒÃÇÏÈÅäÖÃ×Ô¼ºµÄconfig.ymlÎļþ£¬µÚÒ»ÖÖ·½·¨ÊÇÖ±½ÓÔÚrunµÄʱºòÖ¸¶¨±äÁ¿
# cp config/config_sample.yml /opt/data/registry/config.yml
# vi /opt/data/registry/config.yml
##ÕâÀï¿ÉÒÔÉèÖñ¾µØ´æ´¢SETTINGS_FLAVOR=dev£¬local STORAGE_PATH:/tmp/registryµÈ´ý
# docker run -d -v /opt/data/registry:/tmp/registry
-p 5000:5000 -e DOCKER_REGISTRY_CONFIG=/tmp/registry/config.yml
registry
»ò
docker run -d -e SETTINGS_FLAVOR=dev -e
STORAGE_PATH=/tmp/registry -v /db/docker-images:/tmp/registry
-p 5000:5000 registry |
2.2 ¿Í»§¶ËʹÓÃ
Òª´Ó˽·þÉÏ»ñÈ¡¾µÏñ»òÏò˽·þÌá½»¾µÏñ£¬ÏÖÔÚ±äµÃ·Ç³£¼òµ¥£¬Ö»ÐèÒªÔÚ²Ö¿âÇ°Ãæ¼ÓÉÏ˽·þµÄµØÖ·ºÍ¶Ë¿Ú£¬ÐÎÈç172.29.88.222:5000/centos6¡£×¢Ò⣬ÕâÀï¿ÉÒÔÑ¡Ôñ²»Ê¹ÓÃIP£¬¶øÊÇÓÃhostname£¬Èçregistry.domain.com:5000£¬µ«²»ÄܽöÓò»´ø.µÄÖ÷»úÃûregistry£¬docker»áÈÏΪregistryÊÇÓû§Ãû£¬½¨ÒéʹÓôøÓòÃûµÄhostname¼ÓportÀ´±íʾ¡£
ÓÚÊÇÔÚÁíÍâһ̨ҪʹÓÃdockerµÄÖ÷»úÉϾͿÉÒÔͨ¹ýÕą̂˽·þÀÈ¡ºÍÍÆË;µÏñÁË£º
´Ó˽·þÉÏËÑË÷´æÔÚÄÄЩ¿ÉÓþµÏñ # curl -X GET http://sean.domain.com:5000/v1/search {"num_results": 2, "query": "", "results": [{"description": "", "name": "library/centos6"},
{"description": "", "name": "library/nginx"}]}
°´Ìõ¼þËÑË÷nginx
# curl -X GET http://sean.domain.com:5000/v1/search?q=centos6
ÀÈ¡imageµ½±¾µØ
docker pull library/centos6
## ±¾µØ¶Ô·Ý¾µÏñÆô¶¯ÆðÀ´£¬ÐγÉcontainer
## ¸øcontainerÈ¥ÁíÍâÒ»¸öÃû×Ö
# docker tag 68edf809afe7 registry.domain.com:5000/centos6-test
## ×îºó½«ÐµÄdocker imagesÍÆË͵½Ë½·þÉÏ
docker push registry.domain.com:5000/centos6-test |
µÚÒ»´Îpushµ½Ë½·þÉÏʱ»áÌáʾÓû§Ãû¡¢ÃÜÂëºÍÓÊÏ䣬´´½¨¼´¿É¡£Ò²¿ÉÒÔÔÚdocker˽·þ¶Ë¼ÓÈëÈÏÖ¤»úÖÆ¡£
3. ¼ÓÈënginxÈÏÖ¤
£¨ÇëÔÚʵ¼Ê²Ù×÷ÒÔǰ£¬ÏÈÔĶÁÍê±¾½Ú£¬ÔÙÈ·¶¨ÊÇ·ñÔÚǰ¶Ë¼ÓÈënginx£©
3.1 °²×°¼°ÅäÖÃnginx
´ÓÉÏÃæµÄ¹ý³Ì¿ÉÒÔ¿´µ½£¬³ý·Ç·À»ðǽÏÞÖÆ£¬·ñÔòÈκÎÖ÷»ú¿ÉÒÔ´´½¨Õ˺Ų¢Ïë˽·þÍÆË;µÏñ£¬¸ü°²È«µÄ×ö·¨ÊÇÔÚÍâ²ã¼ÓÈëµÇ¼ÈÏÖ¤»úÖÆ¡£
×îºÃ°²×°1.4.x°æ±¾£¬²»È»ÏÂÃæµÄÓÐЩÅäÖÿÉÄܻ᲻¼æÈÝ # yum install nginx
´´½¨Á½¸öµÇ¼Óû§
# htpasswd -c /etc/nginx/docker-registry.htpasswd
sean
New password:
Re-type new password:
Adding password for user sean
# htpasswd -c /etc/nginx/docker-registry.htpasswd
itsection |
ΪÁËÈÃnginxʹÓÃÕâ¸öÃÜÂëÎļþ£¬²¢ÇÒת·¢8080¶Ë¿ÚµÄÇëÇóµ½Docker Registry£¬ÐÂÔönginxÅäÖÃÎļþ
vi /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:5000;
}
server {
listen 8080;
server_name sean.domain.com; -- your registry
server_name
# 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À´Ê¹ÓÃÕâ¸övirtual-host # ln -s /etc/nginx/sites-enabled/docker-registry /etc/nginx/conf.d/docker-registry.conf ÖØÆônginxÀ´¼¤»îÐéÄâÖ÷»úµÄÅäÖà # service nginx restart |
3.2 ¼ÓÈëÈÏÖ¤ºóʹÓÃdocker-registry
´ËʱÖ÷»úµÄ5000¶Ë¿ÚÓ¦¸Ãͨ¹ý·À»ðǽ½ûÖ¹·ÃÎÊ£¨»òÕßÔÚdocker run¶Ë¿ÚÓ³Éäʱֻ¼àÌý»Ø»·½Ó¿ÚµÄIP
-p 127.0.0.1:5000:5000£©¡£
# curl localhost:5000 "docker-registry server (dev) (v0.8.1)" |
Èç¹ûÖ±½Ó·ÃÎÊ·ÃÎʽ«µÃµ½Î´ÊÚȨµÄÐÅÏ¢£º
# curl localhost:8080 <html> <head><title>401 Authorization Required</title></head> <body bgcolor="white"> <center><h1>401 Authorization Required</h1></center> <hr><center>nginx/1.4.7</center> </body> </html> |
´øÓû§ÈÏÖ¤µÄdocker-registry£º
# curl http://sean:sean@sean.domain.com:8080/v1/search {"num_results": 2, "query": "", "results": [{"description": "", "name": "library/centos6"},
{"description": "", "name": "library/nginx"}]}
# docker login registry.domain.com:8080
Username: sean
Password:
Email: zhouxiao@domain.com
Login Succeeded
# docker pull registry.domain.com:8080/library/centos6 |
²»³öÒâÍâµÄ»°£¬ÉÏÃæµÄdocker pull»áʧ°Ü£º
# docker pull registry.domain.com:8080/library/centos6 Pulling repository registry.domain.com:8080/library/centos6 2014/11/11 21:00:25 Could not reach any registry endpoint
# docker push registry.domain.com:8080/ubuntu:sean
The push refers to a repository [registry.domain.com:8080/ubuntu]
(len: 1)
Sending image list
Pushing repository registry.domain.com:8080/ubuntu
(1 tags)
2014/11/12 08:11:32 HTTP code 401, Docker will
not send auth headers over HTTP.
nginxÈÕÖ¾
2014/11/12 07:03:49 [error] 14898#0: *193 no user/password
was provided for basic
authenticatGET /v1/repositories/library/centos6/tags
HTTP/1.1", host: "registry.domain.com:8080" |
±¾ÎĺóµÄµÚ1ƪ²Î¿¼ÎĵµÃ»ÓгöÏÖÕâ¸öÎÊÌ⣬µ«ÆÀÂÛÖÐÓÐÌá¼°¡£
ÓÐÈË˵ÊÇbackend storageµÄÎÊÌ⣬ÕâÀïÊDZ¾µØ´æ´¢¾µÏñ£¬²»Ó¦¸Ã¡£¾¹ý²éÔÄ´óÁ¿×ÊÁÏ£¬²¢·´¸´²Ù×÷ÑéÖ¤£¬ÊÇdocker-registry°æ±¾µÄÎÊÌâ¡£´Óv0.10.0¿ªÊ¼£¬docker
loginËäÈ»Succeeded£¬µ«pull»òpushµÄʱºò£¬~/.dockercfgϵÄÓû§µÇ¼ÐÅÏ¢½«²»ÔÊÐíͨ¹ýHTTPÃ÷ÎÄ´«Êä¡££¨Èç¹ûÄãÔ¸Òâ¿ÉÒԲ鿴v0.10.0µÄÔ´Âë
registry.go£¬ÔÚ·ÖÖ§v0.9.1¼°ÒÔǰÊÇûÓÐHTTP code 401, Docker will
not send auth headers over HTTPµÄ£©
ĿǰµÄ°ì·¨Èý¸ö£º
³·ÍË£¬Õâ¾ÍÊÇΪʲôÏÈ˵Ã÷ÔÚ²Ù×÷ǰÏ߲鿴µ½ÕâµÄÔÒòÁË
»»³Év0.9.1¼°ÒÔϰ汾¡£ÏÖÔÚ¶¼v1.3.1ÁË£¬ÎÒ²ÂÄã²»»áÕâô×ö
ÐÞ¸ÄÔ´Âësession.go£¬È¥µôÏàÓ¦µÄÅжÏÐУ¬È»ºógitÏÂÀ´ÖØÐ°²×°¡£ÎÒ²ÂÄã¸ü²»»áÕâô×ö
°²×°SSLÖ¤Ê飬ʹÓÃHTTPS´«Êä¡£ÕâÊÇÃ÷ÖǵÄÑ¡Ôñ£¬Ð°汾dockerÒ²ÍÆ¼öÎÒÃÇÕâô×ö£¬ÍùÏ¿´¡£
3.3 Ϊnginx°²×°sslÖ¤Êé
Ê×ÏÈ´ò¿ªnginxÅäÖÃÎļþÖÐsslµÄÈýÐÐ×¢ÊÍ
# vi /etc/nginx/conf.d/docker-registry.conf ... server { listen 8000; server_name registry.domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
...
|
±£´æÖ®ºó£¬nginx»á·Ö±ð´Ó/etc/nginx/ssl/nginx.crtºÍ/etc/nginx/ssl/nginx.key¶ÁÈ¡sslÖ¤ÊéºÍ˽Կ¡£Èç¹ûÄã×Ô¼ºÔ¸Ò⻨ǮÂòÒ»¸össlÖ¤Ê飬ÄǾͻá±äµÃ·Ç³£¼òµ¥£¬°ÑÖ¤ÊéºÍ˽Կ¿½±´³ÉÉÏÃæÒ»Ñù¼´¿É¡£¹ØÓÚSSLÒÔ¼°Ç©ÊðsslÖ¤Ê飬Çë²Î¿¼ÆäËûÎÄÕ¡£
ÕâÀïÎÒÃÇ×ÔÇ©ÊðÒ»¸össlÖ¤Ê飬°Ñµ±Ç°ÏµÍ³×÷Ϊ£¨Ë½ÓУ©Ö¤Êé°ä·¢ÖÐÐÄ£¨CA£©¡£
´´½¨´æ·ÅÖ¤ÊéµÄĿ¼
È·ÈÏCAµÄһЩÅäÖÃÎļþ
# vi /etc/pki/tls/openssl.cnf ... [ CA_default ]
dir = /etc/pki/CA # Where everything is kept
certs = $dir/certs # Where the issued certs are
kept
crl_dir = $dir/crl # Where the issued crl are
kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation
of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place
for new certs.
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem # The private
key
RANDFILE = $dir/private/.rand # private random
number file
...
default_days = 3650 # how long to certify for
...
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name
(full name)
stateOrProvinceName_default = GD
...[ req_distinguished_name ]²¿·ÖÖ÷ÒªÊǰä֤ʱһЩĬÈϵÄÖµ£¬¿ÉÒÔ²»¶¯ |
(1) Éú³É¸ùÃÜÔ¿
# cd /etc/pki/CA/ # openssl genrsa -out private/cakey.pem 2048 |
ΪÁ˰²È«Æð¼û£¬ÐÞ¸Äcakey.pem˽ԿÎļþȨÏÞΪ600»ò400£¬Ò²¿ÉÒÔʹÓÃ×ÓshellÉú³É(
umask 077; openssl genrsa -out private/cakey.pem 2048
)£¬ÏÂÃæ²»ÔÙÖØ¸´¡£
(2) Éú³É¸ùÖ¤Êé
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem |
»áÌáʾÊäÈëһЩÄÚÈÝ£¬ÒòΪÊÇ˽Óеģ¬ËùÒÔ¿ÉÒÔËæ±ãÊäÈ룬×îºÃ¼ÇסÄÜÓëºóÃæ±£³ÖÒ»Ö¡£ÉÏÃæµÄ×Ôǩ֤Êécacert.pemÓ¦¸ÃÉú³ÉÔÚ/etc/pki/CAÏ¡£
(3) ΪÎÒÃǵÄnginx web·þÎñÆ÷Éú³ÉsslÃÜÔ¿
# cd /etc/nginx/ssl # openssl genrsa -out nginx.key 2048 |
ÎÒÃǵÄCAÖÐÐÄÓëÒªÉêÇëÖ¤ÊéµÄ·þÎñÆ÷ÊÇͬһ¸ö£¬·ñÔòÓ¦¸ÃÊÇÔÚÁíһ̨ÐèÒªÓõ½Ö¤ÊéµÄ·þÎñÆ÷ÉÏÉú³É¡£
(4) ΪnginxÉú³ÉÖ¤ÊéÇ©ÊðÇëÇó
# openssl req -new -key nginx.key -out nginx.csr ... Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:GD Locality Name (eg, city) []:SZ Organization Name (eg, company) [Internet Widgits Pty Ltd]:COMPANY Organizational Unit Name (eg, section) []:IT_SECTION Common Name (e.g. server FQDN or YOUR name) []:your.domain.com Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
... |
ͬÑù»áÌáʾÊäÈëһЩÄÚÈÝ£¬ÆäËüËæ±ã£¬³ýÁËCommone NameÒ»¶¨ÒªÊÇÄãÒªÊÚÓèÖ¤ÊéµÄ·þÎñÆ÷ÓòÃû»òÖ÷»úÃû£¬challenge
password²»Ìî¡£
(5) ˽ÓÐCA¸ù¾ÝÇëÇóÀ´Ç©·¢Ö¤Êé
# openssl ca -in nginx.csr -out nginx.crt |
ÉÏÃæÇ©·¢¹ý³ÌÆäʵĬÈÏʹÓÃÁË-cert cacert.pem -keyfile
cakey.pem£¬ÕâÁ½¸öÎļþ¾ÍÊÇǰÁ½²½Éú³ÉµÄλÓÚ/etc/pki/CAϵĸùÃÜÔ¿ºÍ¸ùÖ¤Êé¡£
µ½´ËÎÒÃÇÒѾӵÓÐÁ˽¨Á¢ssl°²È«Á¬½ÓËùÐèÒªµÄËùÓÐÎļþ£¬²¢ÇÒ·þÎñÆ÷µÄcrtºÍkey¶¼Î»ÓÚÅäÖõÄĿ¼Ï£¬Î¨ÓиùÖ¤Êécacert.pemλÖò»È·¶¨·ÅÔÚCentOS6ϵÄÄĸöµØ·½¡£
¾ÑéÖ¤ÒÔϼ¸¸öλÖò»ÐУº£¨Adding trusted root certificates
to the server£©
/etc/pki/ca-trust/source/anchors¡¢/etc/pki/ca-trust/source¡¢/etc/pki/ca-trust/extracted¡¢
/etc/pki/ca-trust/extracted/pem/¡¢/etc/pki/tls/certs/cacert.crt
¶¼»á±¨´í£º
# docker login https://registry.domain.com:8000 Username (sean): sean 2014/11/14 02:32:48 Error response from daemon: Invalid Registry endpoint:
Get https://registry.domain.com:8000/v1/_ping: x509: certificate signed by unknown authority
# curl https://sean:sean@registry.domain.com:8000/
curl: (60) Peer certificate cannot be authenticated
with known CA certificates
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by
default, using a "bundle"
of Certificate Authority (CA) public keys (CA
certs). If the default
bundle file isn't adequate, you can specify an
alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed
by a CA represented in
the bundle, the certificate verification probably
failed due to a
problem with the certificate (it might be expired,
or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification
of the certificate, use
the -k (or --insecure) option. |
(6) ĿǰÈøùÖ¤ÊéÆð×÷ÓõÄÖ»·¢ÏÖÒ»¸ö°ì·¨£º
# cp /etc/pki/tls/certs/ca-bundle.crt{,.bak} ±¸·ÝÒÔ·À³ö´í # cat /etc/pki/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt
# curl https://sean:sean@registry.domain.com:8000
"docker-registry server (dev) (v0.8.1)" |
½«cacert.pem¸ùÖ¤Êé×·¼Óµ½ca-bundle.crtºóÒ»¶¨ÒªÖØÆôdockerºǫ́½ø³Ì²ÅÐС£
Èç¹ûdocker loginÒÀÈ»±¨´ícertificate signed
by unknown authority£¬²Î¿¼Running Docker with https£¬Æô¶¯dockerºǫ́½ø³Ìʱָ¶¨ÐÅÈεÄCA¸ùÖ¤Ê飺
# docker -d --tlsverify --tlscacert /etc/pki/CA/cacert.pem
»òÕß½«cacert.pem¿½±´µ½~/.docker/ca.pem
# mkdir ~/.docker && cp /etc/pki/CA/cacert.pem
~/.docker/ca.pem
# docker -d
×îºÃÖØÆôÒ»ÏÂregistry
# docker restart <registry_container_id>
|
ÉÏÃæÓá°Èç¹û¡±ÊÇÒòΪһ¿ªÊ¼×ÜÌáʾcertificate signed by
unknown authority£¬ÓÐÈË˵½«¸ùÖ¤Êé·ÅÔÚ/etc/docker/certs.dÏ£¬»¹ÓÐÈË˵Æô¶¯docker
daemonÊÕ¼ÓÈë--insecure-registry .. µ«ÖÕ¾¿ÊÇÒòΪ°æ±¾²îÒì²»³É¹¦¡£µ«ºóÀ´ÓÖÆæ¼£°ãµÄ²»ÐèÒª--tlscacert¾ÍºÃÁË¡£
Õâ¸öµØ·½ÕõÔúÁ˺ܾã¬ÖØµã¹Ø×¢Ò»ÏÂÕâ¸öÏÂÃæ¼¸¸öissue£º
https://github.com/docker/docker-registry/issues/82
https://github.com/docker/docker/pull/2687
https://github.com/docker/docker/pull/2339
(7) ×îÖո㶨£º
# docker login https://registry.domain.com:8000 Username: sean Password: Email: zhouxiao@domain.com Login Succeeded
# curl https://sean:sean@registry.domain.com:8000
"docker-registry server (dev) (v0.8.1)"
# docker push registry.domain.com:8000/centos6:test_priv
The push refers to a repository [registry.domain.com:8000/centos6]
(len: 1)
Sending image list
Pushing repository registry.domain.com:8000/centos6
(1 tags)
511136ea3c5a: Image successfully pushed
5b12ef8fd570: Image successfully pushed
68edf809afe7: Image successfully pushed
40627956f44c: Image successfully pushed
Pushing tag for rev [40627956f44c] on
{https://registry.domain.com:8000/v1/repositories/centos6/tags/test_priv} |
µ«»¹ÓÐÒ»¸öСÎÊÌâû½â¾ö£¬ËäÈ»ÒѾ¿ÉÒÔÕý³£Ê¹Ó㬵«Ã¿´ÎÇëÇóÔÚnginxµÄerror.logÖл¹ÊÇ»áÓÐ[error]
8299#0: *27 no user/password was provided for basic
authentication£¬Ó¦¸ÃÊÇÕâ¸ö°æ±¾dockerÔÝδ½â¾öµÄbug¡£
3.3 ÆäËüÎÊÌâ
(1) dockerºǫ́½ø³ÌÒâÍâÖжϺó£¬ÖØÐÂdocker start <container_id>±¨´í
# docker start b36bd796bd3d Error: Cannot start container b36bd796bd3d: Error getting container
b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652 from driver devicemapper: Error mounting '/dev/mapper/docker-253:0-
787676-b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652' on '/var/lib/docker/devicemapper/mnt/b36bd796bd3d463c4fedb
70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652': device or resource busy 2014/11/08 15:14:57 Error: failed to start one or more containers |
¾·ÖÎö²úÉúÕâ¸öÎÊÌâµÄÔÒòÊÇ×öÁËÒ»¸ö²Ù×÷£ºÔÚdockerºǫ́½ø³ÌÆô¶¯µÄÖÕ¶Ë£¬¼ÌÐø»Ø³µºó»áÁÙʱÍ˳öºǫ́½ø³ÌµÄÈÕÖ¾Êä³ö£¬ÎÒ¾ÍÔÚÕâ¸öshellÏÂʹÓÃyum°²×°Èí¼þ°ü£¬µ«ÓÉÓÚÍøÂçÔÒòyum¿¨×¡²»¶¯£¬ÓÚÊÇÎÒ¾ÍÁíÆðÁËÒ»¸öÖÕ¶ËkillÁËÕâ¸öyum½ø³Ì£¬²»ÖªÎªºÎ»áÓ°Ïìµ½±íÃæÒѾÍ˳öǰ̨Êä³öµÄdocker¡£½â¾ö°ì·¨ÊÇumountÈÝÆ÷µÄ¹ÒÔØµã£º
# umount /var/lib/docker/devicemapper/mnt/b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652
# service docker start Õý³£ |
ÄÜÏëµ½µÄÁíÍâÒ»¸ö°ì·¨ÊÇ£¬Æô¶¯dockerºǫ́½ø³Ìʱ£¬Öض¨ÏòÊä³ödocker
-d > /dev/null 2>&1£¨/var/log/dockerÒÑ×Ô¶¯¼Ç¼ÁËÒ»·ÝÈÕÖ¾£©¡£
(2) ÅäÖÃÍênginxµÄdocker-registry.confºóÆô¶¯±¨´í
# service nginx start [emerg] 14714#0: unknown directive "upstream" in /etc/nginx/conf.d/docker-registry.conf:4 |
ÔÒòÊÇnginx°æ±¾Ì«µÍ£¬Ò»Ð©ÅäÖÃÖ¸Áî²»¼æÈÝ£¬Ê¹ÓÃyum install
nginxĬÈϰ²×°ÁË1.0.x£¬Ð¶ÔØÖØÐÂÏÂÔØnginx-1.4.7-1.el6.ngx.x86_64.rpm°²×°½â¾ö¡£
(3) ÍøÂçÉèÖôúÀíÎÊÌâ
pull, push¹ÙÍøµÄ¾µÏñʱÓÉÓÚGFWµÄÔÒòÐèÒªÉèÖôúÀí£¬µ«²»ÊÇhttp_proxy¶øÊÇHTTP_PROXY£¬¶ÔÓÚdockerÀ´ËµÍ¬Ê±ÉèÖÃÕâÁ½¸öÖµ¾Í»á³öÎÊÌ⣬ÓÐʱ³öÓÚ°²×°Èí¼þ°üµÄÐèÒªÉèÖÃhttp_proxy£¬¾Í»áµ¼Ö³åÍ»¡£ÔÚdocker-registryÖÐÈç¹ûÍü¼ÇÁ˵±Ç°ÄÄÒ»¸öÔÚÆð×÷Óã¬ÕÒ±éËùÓÐÎÊÌâ¶¼·¢ÏÖ²»ÁËÔÒò£¬¶ødocker·µ»Ø¸øÎÒÃǵĴíÎóÒ²ÄÑÒÔÅжϡ£ÇмÇ~
|