Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
´î½¨dockerÄÚÍøË½·þ
 
×÷ÕߣºNik van der Ploeg À´Ô´£ºCSDN ·¢²¼ÓÚ 2015-9-8
  4518  次浏览      27
 

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£©¡£

´´½¨´æ·ÅÖ¤ÊéµÄĿ¼

# mkdir /etc/nginx/ssl

È·ÈÏ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·µ»Ø¸øÎÒÃǵĴíÎóÒ²ÄÑÒÔÅжϡ£ÇмÇ~

   
4518 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ