背景是:我的国内服务器想获取一个docker镜像,作者并没有上传镜像到hub上,必须是在代码里自己构建的。但是由于国内服务器网络的问题,怎么都拉不下作者的项目。开始想办法。
方案1 自行构建
-
虽然是国内服务器,能ping通 github,但是一拉取大的项目时候,总是报错。基本是网络原因导致
-
然后我通过 github镜像站,通过镜像站的镜像拉取命令,成功拉取下来了作者的项目代码
-
然后我进入项目的目录里,准备去通过
docker build xxx
去构建镜像 -
但是在这一步,在构建镜像的时候,也是各种拉取nginx,maven出问题。看报错也还是网络问题导致。此路不通。
于是我准备换个思路,通过一台网络顺畅的HK服务器,先将镜像拉取下来,然后再给他迁移到我的国内服务器上
方案2 镜像迁移
-
在HK服务器上,做的操作是一样的。拉代码,build构建,一切都很顺利,当镜像构建完后。我们通过 docker images
就可以看到最新构建的镜像了。 -
开始迁移。我们将这个镜像打包。 执行命令 docker save XXXX -o /hu/XXXX.tar
其中XXX是镜像的名字,若有多个版本,你也可以在名字后面加上tag。 -o则是指定目录。 打包后的名字为 XXXX.tar。 -
接着我们需要将这个tar文件给复制到国内的服务器上。 在这一步,你可以选择SCP,可以选择FTP, 或者最简单的,可以通过可视化的带FTP的SSH终端来将镜像文件下载下来,再上传到国内的服务器即可。 比如:mobaxterm。 当然最简单的就是SCP命令。 scp XXXX.tar root@服务器ip:/hu/
root是你要连接的对应机器用户名,@后面跟服务器ip,最后面是指定的传输路径 -
将tar包传过去之后,我们需要执行命令来加载镜像。执行命令 docker load -i XXXX.tar
当页面按照以下内容输出后,则证明镜像加载成功。
docker load -i XXXX.tar
d47162d00c19: Loading layer 318.5MB/318.5MB
80dc1ea0fe01: Loading layer 859.1kB/859.1kB
5f70bf18a086: Loading layer 1.024kB/1.024kB
ded792b6cc33: Loading layer 3.958MB/3.958MB
2ab5754b0356: Loading layer 2.048kB/2.048kB
3a0cec27b01d: Loading layer 39.42kB/39.42kB
75c00f74b53e: Loading layer 40.45kB/40.45kB
8dc8381d4ee7: Loading layer 34.07MB/34.07MB
bbc4a41a1f58: Loading layer 1.319MB/1.319MB
891ad2b1554e: Loading layer 4.096kB/4.096kB
Loaded image: XXXX:latest
然后我们执行 docker images
就可以看到了这个镜像。接着就可以进行正常的启动容器等操作了。
至此!大功告成!