{"id":182,"date":"2025-09-18T21:43:13","date_gmt":"2025-09-18T13:43:13","guid":{"rendered":"https:\/\/blog.xiaolin2000.club\/?p=182"},"modified":"2025-09-21T21:11:20","modified_gmt":"2025-09-21T13:11:20","slug":"%e5%a4%87%e4%bb%bd%e6%81%a2%e5%a4%8ddocker%e9%95%9c%e5%83%8f","status":"publish","type":"post","link":"https:\/\/blog.xiaolin2000.club\/?p=182","title":{"rendered":"\u5907\u4efd\u6062\u590dDocker\u955c\u50cf"},"content":{"rendered":"\n<span id=\"h2-0\" class=\"heading-anchor\" aria-hidden=\"true\"><\/span><h2 class=\"wp-block-heading has-vivid-red-color has-text-color has-link-color has-medium-font-size wp-elements-739890338a509de8943de1c33bf3b372\">\ud83d\udd39<strong> Windows \u4e00\u952e\u811a\u672c\uff08PowerShell\uff09<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Write-Host \"=== Docker \u955c\u50cf\u5907\u4efd\/\u6062\u590d\u811a\u672c ===\"\nWrite-Host \"1) \u4fdd\u5b58\u6240\u6709\u955c\u50cf\"\nWrite-Host \"2) \u6062\u590d\u6240\u6709\u955c\u50cf\"\n$choice = Read-Host \"\u8bf7\u8f93\u5165\u9009\u9879 (1 \u6216 2)\"\n\nif ($choice -eq \"1\") {\n    $images = docker images --format \"{{.Repository}}:{{.Tag}}\"\n    foreach ($image in $images) {\n        if ($image -ne \"&lt;none&gt;:&lt;none&gt;\") {\n            $safeName = $image -replace \"&#91;\/:]\", \"_\"\n            $fileName = \"$safeName.tar\"\n            Write-Host \"\u6b63\u5728\u4fdd\u5b58 $image \u5230 $fileName ...\"\n            docker save -o $fileName $image\n        }\n    }\n    Write-Host \"\u2705 \u6240\u6709\u955c\u50cf\u5df2\u4fdd\u5b58\u5b8c\u6210\uff01\"\n}\nelseif ($choice -eq \"2\") {\n    Get-ChildItem *.tar | ForEach-Object {\n        Write-Host \"\u6b63\u5728\u5bfc\u5165 $($_.Name) ...\"\n        docker load -i $_.Name\n    }\n    Write-Host \"\u2705 \u6240\u6709\u955c\u50cf\u5df2\u5bfc\u5165\u5b8c\u6210\uff01\"\n}\nelse {\n    Write-Host \"\u274c \u8f93\u5165\u65e0\u6548\uff0c\u8bf7\u8f93\u5165 1 \u6216 2\"\n}\n<\/code><\/pre>\n\n\n\n<p>\u4fdd\u5b58\u6210 <code>docker-backup.ps1<\/code>\uff0c\u53f3\u952e \u2192 <strong>\u7528 PowerShell \u8fd0\u884c<\/strong>\uff0c\u5728\u9884\u5b58\u653e\u955c\u50cf\u6587\u4ef6\u5939\u91cc\u8fd0\u884c\u3002<\/p>\n\n\n\n<span id=\"h2-1\" class=\"heading-anchor\" aria-hidden=\"true\"><\/span><h2 class=\"wp-block-heading has-vivid-red-color has-text-color has-link-color has-medium-font-size wp-elements-e2bb13fc1fb6714946a604421174e5f7\">\ud83d\udd39 <strong>Linux \/ Mac \u4e00\u952e\u811a\u672c\uff08Shell\uff09<\/strong><\/h2>\n\n\n\n<p>\u4fdd\u5b58\u6210 <code>docker-backup.sh<\/code>\uff0c\u7136\u540e\u8d4b\u4e88\u6267\u884c\u6743\u9650\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod +x docker-backup.sh\n.\/docker-backup.sh\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\necho \"=== Docker \u955c\u50cf\u5907\u4efd\/\u6062\u590d\u811a\u672c ===\"\necho \"1) \u4fdd\u5b58\u6240\u6709\u955c\u50cf\"\necho \"2) \u6062\u590d\u6240\u6709\u955c\u50cf\"\nread -p \"\u8bf7\u8f93\u5165\u9009\u9879 (1 \u6216 2): \" choice\n\nif &#91; \"$choice\" == \"1\" ]; then\n    images=$(docker images --format \"{{.Repository}}:{{.Tag}}\")\n    for image in $images; do\n        if &#91;&#91; \"$image\" != \"&lt;none&gt;:&lt;none&gt;\" ]]; then\n            safeName=$(echo $image | tr '\/:' '_')\n            fileName=\"${safeName}.tar\"\n            echo \"\u6b63\u5728\u4fdd\u5b58 $image \u5230 $fileName ...\"\n            docker save -o \"$fileName\" \"$image\"\n        fi\n    done\n    echo \"\u2705 \u6240\u6709\u955c\u50cf\u5df2\u4fdd\u5b58\u5b8c\u6210\uff01\"\nelif &#91; \"$choice\" == \"2\" ]; then\n    for file in *.tar; do\n        echo \"\u6b63\u5728\u5bfc\u5165 $file ...\"\n        docker load -i \"$file\"\n    done\n    echo \"\u2705 \u6240\u6709\u955c\u50cf\u5df2\u5bfc\u5165\u5b8c\u6210\uff01\"\nelse\n    echo \"\u274c \u8f93\u5165\u65e0\u6548\uff0c\u8bf7\u8f93\u5165 1 \u6216 2\"\nfi\n<\/code><\/pre>\n\n\n\n<p>\u9ed8\u8ba4\u4f1a\u628a\u955c\u50cf\u4fdd\u5b58\u6210 <code>.tar<\/code> \u6587\u4ef6\uff0c\u5b58\u653e\u5728 <strong>\u4f60\u8fd0\u884c\u811a\u672c\u7684\u5f53\u524d\u76ee\u5f55<\/strong>\u3002<\/p>\n\n\n\n<span id=\"h3-2\" class=\"heading-anchor\" aria-hidden=\"true\"><\/span><h3 class=\"wp-block-heading has-vivid-red-color has-text-color has-link-color has-medium-font-size wp-elements-cbd15e41c3d579999df65977d244d2ad\">\ud83d\udccd \u4e3e\u4e2a\u4f8b\u5b50\uff1a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5982\u679c\u4f60\u5728 Windows \u4e0a\uff0c\u8fdb\u5165 <code>D:\\backup\\<\/code> \u6587\u4ef6\u5939\uff0c\u7136\u540e\u8fd0\u884c <code>docker-backup.ps1<\/code><br>\u2192 \u955c\u50cf\u4f1a\u4fdd\u5b58\u5230 <code>D:\\backup\\<\/code> \u4e0b\u9762\u3002<\/li>\n\n\n\n<li>\u5982\u679c\u4f60\u5728 Linux \/ Mac \u4e0a\uff0c\u5728 <code>\/home\/user\/docker-backup\/<\/code> \u6587\u4ef6\u5939\u6267\u884c<br>\u2192 \u955c\u50cf\u4f1a\u4fdd\u5b58\u5230 <code>\/home\/user\/docker-backup\/<\/code> \u76ee\u5f55\u4e0b\u3002<\/li>\n<\/ul>\n\n\n\n<span id=\"h3-3\" class=\"heading-anchor\" aria-hidden=\"true\"><\/span><h3 class=\"wp-block-heading has-vivid-red-color has-text-color has-link-color wp-elements-d24d19a0d55e5d4deb29d8c536638e6b\">\ud83d\udce6 \u6587\u4ef6\u540d\u89c4\u5219<\/h3>\n\n\n\n<p>\u811a\u672c\u4f1a\u628a\u955c\u50cf\u540d\u91cc\u7684 <code>\/<\/code> \u548c <code>:<\/code> \u66ff\u6362\u6210 <code>_<\/code>\uff0c\u6bd4\u5982\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>nginx:latest<\/code> \u2192 <code>nginx_latest.tar<\/code><\/li>\n\n\n\n<li><code>mysql:8.0<\/code> \u2192 <code>mysql_8.0.tar<\/code><\/li>\n\n\n\n<li><code>myrepo\/app:v1.2<\/code> \u2192 <code>myrepo_app_v1.2.tar<\/code><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udd39 Windows \u4e00\u952e\u811a\u672c\uff08PowerShell\uff09 \u4fdd\u5b58\u6210 docker-backup.ps1\uff0c\u53f3\u952e \u2192 \u7528 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":183,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[60,62,63,61],"class_list":["post-182","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-shiyong","tag-docker","tag-62","tag-63","tag-61"],"_links":{"self":[{"href":"https:\/\/blog.xiaolin2000.club\/index.php?rest_route=\/wp\/v2\/posts\/182","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.xiaolin2000.club\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.xiaolin2000.club\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.xiaolin2000.club\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.xiaolin2000.club\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=182"}],"version-history":[{"count":6,"href":"https:\/\/blog.xiaolin2000.club\/index.php?rest_route=\/wp\/v2\/posts\/182\/revisions"}],"predecessor-version":[{"id":207,"href":"https:\/\/blog.xiaolin2000.club\/index.php?rest_route=\/wp\/v2\/posts\/182\/revisions\/207"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.xiaolin2000.club\/index.php?rest_route=\/wp\/v2\/media\/183"}],"wp:attachment":[{"href":"https:\/\/blog.xiaolin2000.club\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=182"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.xiaolin2000.club\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=182"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.xiaolin2000.club\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}