# docker-compose 导出导入容器教程

<div id="bkmrk-%E5%9C%A8ubuntu-23.04%E4%B8%8A%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%BD%A0%E4%BD%BF%E7%94%A8">在Ubuntu 23.04上，如果你使用 docker-compose 创建了容器，并且希望将其导出并拷贝到另一台服务器上进行恢复，可以按照以下步骤进行操作：</div><div id="bkmrk-">  
</div><div id="bkmrk-%E5%9C%A8%E6%BA%90%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E5%AF%BC%E5%87%BA%E5%AE%B9%E5%99%A8%E5%92%8C%E6%95%B0%E6%8D%AE">在源服务器上导出容器和数据</div><div id="bkmrk-1.-%E5%81%9C%E6%AD%A2%E5%AE%B9%E5%99%A8">1. 停止容器</div><div id="bkmrk-%E9%A6%96%E5%85%88%EF%BC%8C%E5%81%9C%E6%AD%A2%E9%80%9A%E8%BF%87-docker-compo">首先，停止通过 docker-compose 创建的容器：</div><div id="bkmrk-docker-compose-down">docker-compose down</div><div id="bkmrk--1">  
</div><div id="bkmrk--2">  
</div><div id="bkmrk-2.-%E5%AF%BC%E5%87%BA%E9%95%9C%E5%83%8F">2. 导出镜像</div><div id="bkmrk-%E5%AF%BC%E5%87%BA-docker-compose-%E4%B8%AD%E5%AE%9A">导出 docker-compose 中定义的所有镜像：</div><div id="bkmrk--3">  
</div><div id="bkmrk-docker-compose-confi">docker-compose config | awk '/image:/{print $2}' | xargs -I {} docker save -o {}.tar {}</div><div id="bkmrk--4">  
</div><div id="bkmrk-%E8%BF%99%E5%B0%86%E4%B8%BA-docker-compose.y">这将为 docker-compose.yml 中定义的所有镜像创建 .tar 文件。</div><div id="bkmrk--5">  
</div><div id="bkmrk-3.-%E5%AF%BC%E5%87%BA%E6%95%B0%E6%8D%AE%E5%8D%B7%EF%BC%88%E5%A6%82%E6%9E%9C%E6%9C%89%E4%BD%BF%E7%94%A8%E6%95%B0%E6%8D%AE%E5%8D%B7%EF%BC%89">3. 导出数据卷（如果有使用数据卷）</div><div id="bkmrk-%E5%A6%82%E6%9E%9C%E5%AE%B9%E5%99%A8%E4%BD%BF%E7%94%A8%E4%BA%86%E6%95%B0%E6%8D%AE%E5%8D%B7%E5%B9%B6%E4%B8%94%E4%BD%A0%E6%83%B3%E5%A4%87%E4%BB%BD%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8D%AE">如果容器使用了数据卷并且你想备份这些数据卷，可以使用以下命令：</div><div id="bkmrk-%E9%A6%96%E5%85%88%EF%BC%8C%E5%88%97%E5%87%BA%E5%AE%B9%E5%99%A8%E4%BD%BF%E7%94%A8%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8D%B7%EF%BC%9A">首先，列出容器使用的数据卷：</div><div id="bkmrk--6">  
</div><div id="bkmrk--7">  
</div><div id="bkmrk-docker-volume-ls">docker volume ls</div><div id="bkmrk--8">  
</div><div id="bkmrk-%E7%84%B6%E5%90%8E%EF%BC%8C%E5%AF%BC%E5%87%BA%E7%89%B9%E5%AE%9A%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8D%B7%EF%BC%88%E4%BE%8B%E5%A6%82-my_vo">然后，导出特定的数据卷（例如 my_volume）：</div><div id="bkmrk-docker-run---rm--v-m">docker run --rm -v my_volume:/volume -v $(pwd):/backup busybox tar czf /backup/my_volume.tar.gz -C /volume .</div><div id="bkmrk--9">  
</div><div id="bkmrk--10">  
</div><div id="bkmrk-4.-%E6%89%93%E5%8C%85%E4%B8%BA-tar.gz">4. 打包为 tar.gz</div><div id="bkmrk-%E5%B0%86%E5%AF%BC%E5%87%BA%E7%9A%84%E9%95%9C%E5%83%8F%E5%92%8C%E6%95%B0%E6%8D%AE%E5%8D%B7%E4%B8%80%E8%B5%B7%E6%89%93%E5%8C%85%E4%B8%BA-tar.">将导出的镜像和数据卷一起打包为 tar.gz 文件：</div><div id="bkmrk--11">  
</div><div id="bkmrk-tar-czf-docker_backu">tar czf docker_backup.tar.gz *.tar *.tar.gz</div><div id="bkmrk-%E6%8B%B7%E8%B4%9D%E6%96%87%E4%BB%B6%E5%88%B0%E7%9B%AE%E6%A0%87%E6%9C%8D%E5%8A%A1%E5%99%A8">拷贝文件到目标服务器</div><div id="bkmrk-%E5%B0%86-docker_backup.tar.">将 docker_backup.tar.gz 文件拷贝到目标服务器，可以使用 scp 或其他文件传输工具。</div><div id="bkmrk--12">  
</div><div id="bkmrk-scp-docker_backup.ta">scp docker_backup.tar.gz user@target_server:/path/to/destination</div><div id="bkmrk--13">  
</div><div id="bkmrk-%E5%9C%A8%E7%9B%AE%E6%A0%87%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%81%A2%E5%A4%8D">在目标服务器上恢复</div><div id="bkmrk--14">  
</div><div id="bkmrk-1.-%E8%A7%A3%E5%8E%8B-tar.gz-%E6%96%87%E4%BB%B6">1. 解压 tar.gz 文件</div><div id="bkmrk-%E5%9C%A8%E7%9B%AE%E6%A0%87%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E8%A7%A3%E5%8E%8B-docker_bac">在目标服务器上解压 docker_backup.tar.gz 文件：</div><div id="bkmrk--15">  
</div><div id="bkmrk-tar-xzf-docker_backu">tar xzf docker_backup.tar.gz</div><div id="bkmrk--16">  
</div><div id="bkmrk-2.-%E5%8A%A0%E8%BD%BD%E9%95%9C%E5%83%8F">2. 加载镜像</div><div id="bkmrk-%E5%8A%A0%E8%BD%BD%E5%AF%BC%E5%87%BA%E7%9A%84docker%E9%95%9C%E5%83%8F%EF%BC%9A">加载导出的Docker镜像：</div><div id="bkmrk--17">  
</div><div id="bkmrk-for-image-in-%2A.tar%3B-">for image in *.tar; do docker load -i $image; done</div><div id="bkmrk--18">  
</div><div id="bkmrk-3.-%E8%BF%98%E5%8E%9F%E6%95%B0%E6%8D%AE%E5%8D%B7%EF%BC%88%E5%A6%82%E6%9E%9C%E6%9C%89%E5%A4%87%E4%BB%BD%E6%95%B0%E6%8D%AE%E5%8D%B7%EF%BC%89">3. 还原数据卷（如果有备份数据卷）</div><div id="bkmrk--19">  
</div><div id="bkmrk-%E8%BF%98%E5%8E%9F%E6%95%B0%E6%8D%AE%E5%8D%B7%EF%BC%9A">还原数据卷：</div><div id="bkmrk-docker-run---rm--v-m-1">docker run --rm -v my_volume:/volume -v $(pwd):/backup busybox tar xzf /backup/my_volume.tar.gz -C /volume</div><div id="bkmrk--20">  
</div><div id="bkmrk-4.-%E5%90%AF%E5%8A%A8%E5%AE%B9%E5%99%A8">4. 启动容器</div><div id="bkmrk-%E7%A1%AE%E4%BF%9D-docker-compose.ym">确保 docker-compose.yml 文件已复制到目标服务器，然后启动容器：</div><div id="bkmrk--21">  
</div><div id="bkmrk-docker-compose-up--d">docker-compose up -d</div><div id="bkmrk--22">  
</div><div id="bkmrk-%E7%A4%BA%E4%BE%8B%E6%93%8D%E4%BD%9C%E6%80%BB%E7%BB%93">示例操作总结</div><div id="bkmrk-%E5%9C%A8%E6%BA%90%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%EF%BC%9A">在源服务器上：</div><div id="bkmrk--23">  
</div><div id="bkmrk-%E5%81%9C%E6%AD%A2%E5%AE%B9%E5%99%A8%EF%BC%9A">停止容器：</div><div id="bkmrk--24">  
</div><div id="bkmrk-docker-compose-down-1">docker-compose down</div><div id="bkmrk-%E5%AF%BC%E5%87%BA%E9%95%9C%E5%83%8F%EF%BC%9A">导出镜像：</div><div id="bkmrk--25">  
</div><div id="bkmrk-docker-compose-confi-1">docker-compose config | awk '/image:/{print $2}' | xargs -I {} docker save -o {}.tar {}</div><div id="bkmrk--26">  
</div><div id="bkmrk-docker-run---rm--v-m-2">docker run --rm -v my_volume:/volume -v $(pwd):/backup busybox tar czf /backup/my_volume.tar.gz -C /volume .</div><div id="bkmrk-%E6%89%93%E5%8C%85%E4%B8%BA-tar.gz%EF%BC%9A">打包为 tar.gz：</div><div id="bkmrk--27">  
</div><div id="bkmrk-tar-czf-docker_backu-1">tar czf docker_backup.tar.gz *.tar *.tar.gz</div><div id="bkmrk-%E4%BC%A0%E8%BE%93%E6%96%87%E4%BB%B6%EF%BC%9A">传输文件：</div><div id="bkmrk--28">  
</div><div id="bkmrk-scp-docker_backup.ta-1">scp docker_backup.tar.gz user@target_server:/path/to/destination</div><div id="bkmrk-%E5%9C%A8%E7%9B%AE%E6%A0%87%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%EF%BC%9A">在目标服务器上：</div><div id="bkmrk--29">  
</div><div id="bkmrk-%E8%A7%A3%E5%8E%8B-tar.gz-%E6%96%87%E4%BB%B6%EF%BC%9A">解压 tar.gz 文件：</div><div id="bkmrk--30">  
</div><div id="bkmrk-tar-xzf-docker_backu-1">tar xzf docker_backup.tar.gz</div><div id="bkmrk-%E5%8A%A0%E8%BD%BD%E9%95%9C%E5%83%8F%EF%BC%9A">加载镜像：</div><div id="bkmrk--31">  
</div><div id="bkmrk-for-image-in-%2A.tar%3B--1">for image in *.tar; do docker load -i $image; done</div><div id="bkmrk-%E8%BF%98%E5%8E%9F%E6%95%B0%E6%8D%AE%E5%8D%B7%EF%BC%88%E5%8F%AF%E9%80%89%EF%BC%89%EF%BC%9A">还原数据卷（可选）：</div><div id="bkmrk--32">  
</div><div id="bkmrk-docker-run---rm--v-m-3">docker run --rm -v my_volume:/volume -v $(pwd):/backup busybox tar xzf /backup/my_volume.tar.gz -C /volume</div><div id="bkmrk-%E5%90%AF%E5%8A%A8%E5%AE%B9%E5%99%A8%EF%BC%9A">启动容器：</div><div id="bkmrk--33">  
</div><div id="bkmrk-docker-compose-up--d-1">docker-compose up -d</div><div id="bkmrk-%E9%80%9A%E8%BF%87%E8%BF%99%E4%BA%9B%E6%AD%A5%E9%AA%A4%EF%BC%8C%E4%BD%A0%E5%8F%AF%E4%BB%A5%E6%88%90%E5%8A%9F%E5%9C%B0%E5%B0%86-docke">通过这些步骤，你可以成功地将 docker-compose 创建的容器从一台服务器导出并恢复到另一台服务器上</div>