{"id":406,"date":"2017-09-13T16:10:54","date_gmt":"2017-09-13T08:10:54","guid":{"rendered":"https:\/\/blog.jsjs.org\/?p=406"},"modified":"2017-09-13T16:10:54","modified_gmt":"2017-09-13T08:10:54","slug":"docker-%e9%95%9c%e5%83%8f%e4%bb%93%e5%ba%93-harbor-%e9%83%a8%e7%bd%b2-%e4%bb%a5%e5%8f%8a-%e8%b7%a8%e6%95%b0%e6%8d%ae%e5%a4%8d%e5%88%b6","status":"publish","type":"post","link":"https:\/\/blog.jsjs.org\/?p=406","title":{"rendered":"docker \u955c\u50cf\u4ed3\u5e93 Harbor \u90e8\u7f72 \u4ee5\u53ca \u8de8\u6570\u636e\u590d\u5236"},"content":{"rendered":"<p>docker \u955c\u50cf\u4ed3\u5e93 Harbor \u90e8\u7f72 \u8de8\u6570\u636e\u590d\u5236<\/p>\n<p>Harbor \u662f Vmwar \u516c\u53f8\u5f00\u6e90\u7684 \u4f01\u4e1a\u7ea7\u7684 Docker Registry \u7ba1\u7406\u9879\u76ee<\/p>\n<p>\u5b83\u4e3b\u8981 \u63d0\u4f9b Dcoker Registry \u7ba1\u7406UI\uff0c\u53ef\u57fa\u4e8e\u89d2\u8272\u8bbf\u95ee\u63a7\u5236, AD\/LDAP \u96c6\u6210\uff0c\u65e5\u5fd7\u5ba1\u6838\u7b49\u529f\u80fd\uff0c\u5b8c\u5168\u7684\u652f\u6301\u4e2d\u6587\u3002<\/p>\n<p>Harbor \u7684\u6240\u6709\u7ec4\u4ef6\u90fd\u5728 Dcoker \u4e2d\u90e8\u7f72\uff0c\u6240\u4ee5 Harbor \u53ef\u4f7f\u7528 Docker Compose \u5feb\u901f\u90e8\u7f72\u3002<\/p>\n<p>\u6ce8\uff1a \u7531\u4e8e Harbor \u662f\u57fa\u4e8e Docker Registry V2 \u7248\u672c\uff0c\u6240\u4ee5 docker \u7248\u672c\u5fc5\u987b &gt; = 1.10.0 docker-compose &gt;= 1.6.0<\/p>\n<p>\u5f00\u6e90\u9879\u76ee\u5730\u5740\uff1ahttps:\/\/github.com\/vmware\/harbor<\/p>\n<p>\u4e00\u3001 \u4f7f\u7528docker compose \u5feb\u901f\u90e8\u7f72:<\/p>\n<p>\u9996\u5148\u7528 git \u4e0b\u8f7d \u6e90\u7801\u3002<\/p>\n<p>git clone https:\/\/github.com\/vmware\/harbor<\/p>\n<p>\u4e0b\u8f7d\u5b8c\u4ee5\u540e \u8fdb\u5165 harbor\/Deploy \u76ee\u5f55<\/p>\n<p>\u521d\u59cb\u5316\u914d\u7f6e\uff0c \u914d\u7f6e\u6587\u4ef6\u4e3aharbor.cfg<\/p>\n<p>&nbsp;<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>## Configuration file of Harbor\n# hostname \u8bbe\u7f6e\u8bbf\u95ee\u5730\u5740\uff0c\u652f\u6301IP\uff0c\u57df\u540d\uff0c\u4e3b\u673a\u540d\uff0c\u7981\u6b62\u8bbe\u7f6e127.0.0.1\nhostname = reg.mydomain.com\n\n# \u8bbf\u95ee\u534f\u8bae\uff0c\u53ef\u8bbe\u7f6e http,https\nui_url_protocol = http\n\n# \u90ae\u4ef6\u901a\u77e5, \u914d\u7f6e\u90ae\u4ef6\u901a\u77e5\u3002\nemail_server = smtp.mydomain.com\nemail_server_port = 25\nemail_username = sample_admin@mydomain.com\nemail_password = abc\nemail_from = admin &lt;sample_admin@mydomain.com&gt;\nemail_ssl = false\n\n# harbor WEB UI\u767b\u9646\u4f7f\u7528\u7684\u5bc6\u7801\nharbor_admin_password = Harbor12345\n\n# \u8ba4\u8bc1\u65b9\u5f0f\uff0c\u8fd9\u91cc\u652f\u6301\u591a\u79cd\u8ba4\u8bc1\u65b9\u5f0f\uff0c\u9ed8\u8ba4\u662f db_auth \uff0c\u65e2mysql\u6570\u636e\u5e93\u5b58\u50a8\u8ba4\u8bc1\u3002\n# \u8fd9\u91cc\u8fd8\u652f\u6301 ldap \u4ee5\u53ca \u672c\u5730\u6587\u4ef6\u5b58\u50a8\u65b9\u5f0f\u3002\nauth_mode = db_auth\n\n# ldap \u670d\u52a1\u5668\u8bbf\u95ee\u5730\u5740\u3002\nldap_url = ldaps:\/\/ldap.mydomain.com\nldap_basedn = uid=%s,ou=people,dc=mydomain,dc=com\n\n# mysql root \u8d26\u6237\u7684 \u5bc6\u7801\ndb_password = root123\nself_registration = on\nuse_compressed_js = on\nmax_job_workers = 3\nverify_remote_cert = on\ncustomize_crt = on\n\n# \u4e00\u4e9b\u663e\u793a\u7684\u8bbe\u7f6e.\ncrt_country = CN\ncrt_state = State\ncrt_location = CN\ncrt_organization = organization\ncrt_organizationalunit = organizational unit\ncrt_commonname = example.com\ncrt_email = example@example.com<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>\u4fee\u6539\u4e3a\u914d\u7f6e\u6587\u4ef6\u4ee5\u540e \u8fd0\u884c.\/prepare\u811a\u672c\u66f4\u65b0\u914d\u7f6e, \u51fa\u73b0\u5982\u4e0b\u4fe1\u606f\u8868\u793a \u66f4\u65b0\u5b8c\u6bd5.<\/p>\n<p>&nbsp;<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>Generated configuration file: .\/config\/ui\/env\nGenerated configuration file: .\/config\/ui\/app.conf\nGenerated configuration file: .\/config\/registry\/config.yml\nGenerated configuration file: .\/config\/db\/env\nGenerated configuration file: .\/config\/jobservice\/env\nClearing the configuration file: .\/config\/ui\/private_key.pem\nClearing the configuration file: .\/config\/registry\/root.crt\nGenerated configuration file: .\/config\/ui\/private_key.pem\nGenerated configuration file: .\/config\/registry\/root.crt\nThe configuration files are ready, please use docker-compose to start the service.<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>\u6267\u884c\u5b8c\u6bd5\u4f1a\u751f\u6210\u4e00\u4e2a docker-compose.yml \u00a0\u6587\u4ef6<\/p>\n<p>&nbsp;<\/p>\n<p>\u914d\u7f6e docker-compose.yml \u6587\u4ef6\u4e2d\u7684 \u6302\u8f7d\u76ee\u5f55\uff0c\u542f\u52a8\u65b9\u5f0f\u7b49\u9009\u9879\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u4f7f\u7528 pip install docker-compose \u5b89\u88c5 docker-compose<\/p>\n<p>\u6267\u884c docker-compose up -d \u6784\u5efadocker \u5bb9\u5668<\/p>\n<p>docker hub \u4e0b\u8f7d\u955c\u50cf\u5b9e\u5728\u662f\u6162\uff0c Harbor \u63d0\u4f9b\u4e86\u4e00\u4e2a \u914d\u7f6e\u672c\u5730\u955c\u50cf\u7684\u914d\u7f6e: cd harbor\/contrib\/prebuild-install<\/p>\n<p>\u8fd0\u884c update_compose.sh \u914d\u7f6e\u672c\u5730\u7684\u955c\u50cf\u4ed3\u5e93<\/p>\n<p>\u6211\u4eec\u4e5f\u53ef\u4ee5\u914d\u7f6e &#8211;registry-mirror= \u6765\u52a0\u901f\u4e0b\u8f7d \u4f7f\u7528 daocloud \u63d0\u4f9b\u7684 mirror http:\/\/b438f72b.m.daocloud.io<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>[root@localhost Deploy]# docker images\nREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE\ndeploy_jobservice   latest              be822b50163d        43 minutes ago      804.6 MB\ndeploy_mysql        latest              5015ce56c9d5        49 minutes ago      328.8 MB\ndeploy_ui           latest              8596c12dbeba        About an hour ago   808.1 MB\ndeploy_log          latest              6a74c6f52a2b        About an hour ago   187.9 MB\nmysql               5.6                 5e0f1b09e25e        2 days ago          328.8 MB\nubuntu              14.04               0ccb13bf1954        12 days ago         187.9 MB\ngolang              1.6.2               8ecba0e9bd48        5 weeks ago         753.5 MB\nnginx               1.9                 c8c29d842c09        10 weeks ago        182.7 MB\nregistry            2.4.0               8b162eee2794        3 months ago        171.1 MB<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>[root@localhost Deploy]# docker ps -a\nCONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                      NAMES\n9704f42b05d5        deploy_jobservice        \"\/go\/bin\/harbor_jobse\"   4 minutes ago       Up 4 minutes                                                   deploy_jobservice_1\n0f8ff9b099d2        library\/nginx:1.9        \"nginx -g 'daemon off\"   4 minutes ago       Up 4 minutes        0.0.0.0:80-&gt;80\/tcp, 0.0.0.0:443-&gt;443\/tcp   deploy_proxy_1\n6b0159939874        deploy_ui                \"\/go\/bin\/harbor_ui\"      4 minutes ago       Up 4 minutes        80\/tcp                                     deploy_ui_1\n6f2298da0f67        deploy_mysql             \"docker-entrypoint.sh\"   4 minutes ago       Up 4 minutes        3306\/tcp                                   deploy_mysql_1\n2dbca506e1ea        library\/registry:2.4.0   \"\/bin\/registry serve \"   4 minutes ago       Up 4 minutes        5000\/tcp, 0.0.0.0:5001-&gt;5001\/tcp           deploy_registry_1\nfc5b1a201c72        deploy_log               \"\/bin\/sh -c 'cron &amp;&amp; \"   4 minutes ago       Up 4 minutes        0.0.0.0:1514-&gt;514\/tcp                      deploy_log_1<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>\u5b8c\u6210\u4ee5\u540e\uff0c\u4f7f\u7528 http:\/\/userIP\/ \u8bbf\u95ee Harbor<\/p>\n<p>\u4f7f\u7528 \u5e10\u53f7 admin, \u5bc6\u7801\u4e3a \u914d\u7f6e\u6587\u4ef6\u4e2d harbor_admin_password = Harbor12345 \u7684\u5bc6\u7801 \u767b\u9646<\/p>\n<p>\u81f3\u6b64\uff0c Harbor \u5df2\u7ecf\u642d\u5efa\u5b8c\u6210\uff0c\u5177\u4f53\u5728 WEB UI \u4e0b\u9762\u64cd\u4f5c\u4e5f\u662f\u975e\u5e38\u7684\u7b80\u5355\uff0c\u53ea\u6709\u51e0\u4e2a\u9009\u9879\u3002<\/p>\n<p>docker \u9700\u8981\u4e0a\u4f20 push \u955c\u50cf\uff0c\u9700\u8981\u5728 docker \u4e2d\u914d\u7f6e &#8211;insecure-registry userIP \u6216\u8005\u5728nginx \u4e2d\u914d\u7f6e https<\/p>\n<p>\u914d\u7f6e\u5b8c\u6bd5\u4ee5\u540e\uff0c\u91cd\u542f docker<\/p>\n<p>\u4f7f\u7528 docker login userIP \u767b\u9646 Harbor<\/p>\n<div class=\"cnblogs_code\">\n<pre>[root@swarm-manager ~]#docker login 10.6.0.192\nUsername (admin): admin\nPassword:\nLogin Succeeded<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>\u67e5\u770b \u672c\u5730 images<\/p>\n<div class=\"cnblogs_code\">\n<pre>[root@swarm-manager ~]#docker images\nREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE\nmongodb             latest              8af05a33e512        3 weeks ago         958.4 MB\nsath89\/oracle-12c   latest              7effebcd18ee        11 weeks ago        5.692 GB\ncentos              latest              778a53015523        4 months ago        196.7 MB<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>tag \u4fee\u6539 image \u7684\u540d\u5b57. \u683c\u5f0f\u4e3a: userip\/\u9879\u76ee\u540d\/image\u540d\u5b57:\u7248\u672c\u53f7<\/p>\n<p>&nbsp;<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>[root@swarm-manager ~]#docker tag mongodb 10.6.0.192\/jicki\/mongodb:1.0\n\n\n[root@swarm-manager ~]#docker images\nREPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE\n10.6.0.192\/jicki\/mongodb   1.0                 8af05a33e512        3 weeks ago         958.4 MB\nmongodb                    latest              8af05a33e512        3 weeks ago         958.4 MB\nsath89\/oracle-12c          latest              7effebcd18ee        11 weeks ago        5.692 GB\ncentos                     latest              778a53015523        4 months ago        196.7 MB<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>push \u955c\u50cf\u5230 Harbor<\/p>\n<p>&nbsp;<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>[root@swarm-manager ~]#docker push 10.6.0.192\/jicki\/mongodb:1.0\nThe push refers to a repository [10.6.0.192\/jicki\/mongodb]\nc1e4cd91bcd4: Pushed\nd9a948970255: Pushed\ndd9b001e77ee: Pushed\n625440e212f2: Pushed\n75fa23acbccb: Pushed\nfd269370dcf4: Pushed\n44e3199c59b3: Pushed\ndb3474cfcfbc: Pushed\n5f70bf18a086: Pushed\n6a6c96337be1: Pushed\n1.0: digest: sha256:c7d2e619d86089ffef373819a99df1390c4f2df4aeec9c1f7945c55d63edc670 size: 2824<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u767b\u9646 WEB UI \uff0c \u9009\u62e9\u9879\u76ee\uff0c \u9879\u76ee\u540d\u79f0 jicki \uff0c \u8fdb\u5165 \u65e2\u53ef\u67e5\u770b\u521a\u624d\u4e0a\u4f20\u7684 image<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images2015.cnblogs.com\/blog\/487774\/201608\/487774-20160804164648450-844827301.png\" alt=\"\" \/><\/p>\n<p>\u81f3\u6b64\uff0c Harbor \u90fd\u5df2\u7ecf\u90e8\u7f72\u5b8c\u6210\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e8c\u3001 \u914d\u7f6eDocker \u955c\u50cf\u590d\u5236\u3002<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images2015.cnblogs.com\/blog\/487774\/201608\/487774-20160804164719575-1558722471.png\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images2015.cnblogs.com\/blog\/487774\/201608\/487774-20160804164729075-2095036684.png\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u914d\u7f6e 2\u4e2a Harbor<\/p>\n<p>IP 1 = 10.6.0.192<\/p>\n<p>IP 2 = 10.6.0.196<\/p>\n<p>\u5728 10.6.0.192 \u4e0a\u9762\u6211\u4eec\u5df2\u7ecfpush \u4e86\u4e00\u4e2a \u955c\u50cf\uff0c\u6240\u4ee5\u6211\u4eec\u5c06\u8fd9\u53f0\u5f53\u4f5c \u4e3b\u8282\u70b9\uff0c10.6.0.196 \u4e3a\u4ece\u590d\u5236\u8282\u70b9\u3002<\/p>\n<p>\u8fdb\u5165 WEB UI \u9009\u62e9 \u9879\u76ee\uff0c \u9009\u62e9\u9879\u76ee\u4e3a jicki , \u7136\u540e\u9009\u62e9 \u590d\u5236 \u9009\u9879\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images2015.cnblogs.com\/blog\/487774\/201608\/487774-20160804164800700-687387730.png\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u70b9\u51fb \u65b0\u589e\u7b56\u7565<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images2015.cnblogs.com\/blog\/487774\/201608\/487774-20160804164810325-273699273.png\" alt=\"\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images2015.cnblogs.com\/blog\/487774\/201608\/487774-20160804164817731-2456290.png\" alt=\"\" \/><\/p>\n<p>\u521b\u5efa\u5b8c\u6bd5\u4ee5\u540e\uff0c\u6211\u4eec\u53ef\u4ee5\u770b \u590d\u5236\u7b56\u7565 \u5df2\u7ecf\u6709\u4e00\u680f\u3002<\/p>\n<p>\u590d\u5236\u4efb\u52a1\u91cc\u9762 \u4e5f\u5df2\u7ecf\u6709\u4e00\u4e2a\u4efb\u52a1\u3002<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images2015.cnblogs.com\/blog\/487774\/201608\/487774-20160804164825403-601082588.png\" alt=\"\" \/><\/p>\n<p>\u7a0d\u7b49\u4e00\u4f1a\uff0c\u53ef\u4ee5\u770b\u5230 \u590d\u5236\u4efb\u52a1\u91cc\u9762 \u90a3\u4e2a\u4efb\u52a1\u5df2\u7ecf\u63d0\u793a \u5b8c\u6210\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images2015.cnblogs.com\/blog\/487774\/201608\/487774-20160804164838293-1217692842.png\" alt=\"\" \/><\/p>\n<p>\u767b\u9646 10.6.0.196 \u7684 WEB UI<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images2015.cnblogs.com\/blog\/487774\/201608\/487774-20160804164848559-1929311245.png\" alt=\"\" \/><\/p>\n<p>\u6211\u4eec\u53ef\u4ee5\u770b\u5230\uff0c \u955c\u50cf\u5df2\u7ecf\u590d\u5236\u8fc7\u6765\u3002\u800c\u4e14\u8fde \u65e5\u5fd7\u64cd\u4f5c \u4e5f\u4f1a\u590d\u5236\u8fc7\u6765\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>harbor \u5347\u7ea7<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e00\u3001<\/p>\n<p>cd harbor\/Deploy\/<\/p>\n<p>\u6267\u884c docker-compose down<\/p>\n<p>\u5220\u9664\u539f\u6709\u7684\u5bb9\u5668<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e8c\u3001<\/p>\n<p>\u5907\u4efd\u6574\u4e2a\u76ee\u5f55<\/p>\n<p>mv harbor\/ \/tm\/harbor<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e09\u3001<\/p>\n<p>\u91cd\u65b0 \u4e0b\u8f7d\u65b0\u7684\u6e90\u7801<\/p>\n<p>git clone https:\/\/github.com\/vmware\/harbor<\/p>\n<p>&nbsp;<\/p>\n<p>\u56db\u3001<br \/>\n\u5982\u679charbor \u662f\u8fc1\u79fb\u5230\u5176\u4ed6\u670d\u52a1\u5668\uff0c\u8bf7\u5148\u6267\u884c\u6570\u636e\u5907\u4efd<\/p>\n<p>cd harbor\/migration\/<\/p>\n<p>\u4fee\u6539 migration.cfg \u6587\u4ef6\u91cc\u9762\u7684 \u6570\u636e\u5e93 \u5e10\u53f7\u5bc6\u7801<\/p>\n<p>docker build -t migrate-tool .<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e94\u3001<br \/>\n\u8fd0\u884c\u4e00\u4e2a\u4e34\u65f6\u6570\u636e\u5e93\u5bb9\u5668\uff0c\u6ce8\u610f\uff1a\/data\/database \u4e3a\u4f60\u8bbe\u7f6e\u7684\u6302\u8f7d\u6570\u636e\u5e93\u7684\u76ee\u5f55 \/path\/to\/backup \u6570\u636e\u5907\u4efd\u7684\u76ee\u5f55<\/p>\n<p>\u6570\u636e\u5e93\u5907\u4efd\uff1a<br \/>\ndocker run -ti &#8211;rm -v \/data\/database:\/var\/lib\/mysql -v \/path\/to\/backup:\/harbor-migration\/backup migrate-tool backup<\/p>\n<p>&nbsp;<\/p>\n<p>\u516d\u3001<br \/>\n\u6570\u636e\u5e93\u8fd8\u539f\uff1a<br \/>\ndocker run -ti &#8211;rm -v \/data\/database:\/var\/lib\/mysql migrate-tool up head<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e03\u3001<br \/>\n\u5bf9\u6bd4\u4e00\u4e0b\u914d\u7f6e\u6587\u4ef6\uff1a<\/p>\n<p>cd harbor\/Deploy\/<\/p>\n<p>diff harbor.cfg \/tmp\/harbor\/Deploy\/harbor.cfg<\/p>\n<p>diff docker-compose.yaml \/tmp\/harbor\/Deploy\/docker-compose.yaml<\/p>\n<p>\u5982\u679c\u4fee\u6539\u4e86\u7aef\u53e3 \u5fc5\u987b\u66f4\u65b0 cd harbor\/Deploy\/config\/nginx\/nginx.conf \u91cc\u9762\u7684\u7aef\u53e3<\/p>\n<p>&nbsp;<\/p>\n<p>\u516b\u3001<br \/>\n\u6267\u884c .\/prepare \u751f\u6210\u65b0\u7684\u914d\u7f6e\u6587\u4ef6<\/p>\n<p>cd \/harbor\/Deploy\/<\/p>\n<p>.\/prepare<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e5d\u3001<br \/>\n\u6700\u540ebuild \u65b0\u7684\u955c\u50cf\uff0c\u542f\u52a8\u5bb9\u5668<\/p>\n<p>cd \/harbor\/Deploy\/<\/p>\n<p>docker-compose up &#8211;build -d<\/p>\n<p>&nbsp;<\/p>\n<p>\u5341\u3001<br \/>\n\u767b\u9646 WEB UI \u68c0\u67e5\u662f\u5426OK<\/p>\n","protected":false},"excerpt":{"rendered":"<p>docker \u955c\u50cf\u4ed3\u5e93 Harbor \u90e8\u7f72 \u8de8\u6570\u636e\u590d\u5236 Harbor \u662f Vmwar \u516c\u53f8\u5f00\u6e90\u7684 \u4f01\u4e1a\u7ea7\u7684 Docker Registry \u7ba1\u7406\u9879\u76ee \u5b83\u4e3b\u8981 \u63d0\u4f9b Dcoker Registry \u7ba1\u7406UI\uff0c\u53ef\u57fa\u4e8e\u89d2\u8272\u8bbf\u95ee\u63a7\u5236, AD\/LDAP \u96c6\u6210\uff0c\u65e5\u5fd7\u5ba1\u6838\u7b49\u529f\u80fd\uff0c\u5b8c\u5168\u7684\u652f\u6301\u4e2d\u6587\u3002 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-406","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=406"}],"version-history":[{"count":0,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/406\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=406"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=406"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}