无需Docker Registry传输Docker镜像
我在 Alpine Linux软件开发环境构建 采用Docker运行容器,在部署了合适的运行环境之后,想要把镜像保存下来,用到其他环境中使用。通常我们分发Docker镜像都会使用 Kubernetes部署registry仓库 。但是,对于个人偶尔使用的私有镜像,也许并不想这么折腾(不论是推送到公共镜像服务器还是自建镜像服务器)。此时,可以使用Docker内置的镜像输出和加载功能。
首先对运行的容器进行镜像保存:
docker commit
对运行的容器进行镜像保存docker commit acloud-dev local:acloud-dev
然后将Docker镜像保存为一个tar文件:
docker save
将镜像保存为tar文件docker save -o ~/acloud-dev.tar local:acloud-dev
将输出的镜像文件scp到目标主机上
在目标主机上执行以下命令加载自己制作的镜像:
在目标主机上执行
docker load
将镜像tar文件加载到docker系统中作为镜像docker load -i ~/acloud-dev.tar
然后就可以直接使用这个镜像用于后续工作了,例如运行容器:
运行
acloud-dev
容器docker run -dt --name acloud-dev --hostname acloud-dev \
-p 1122:22 \
-p 13000:3000 \
-p 18080:8080 \
-p 14000:4000 \
-p 1180:80 \
-p 1443:443 \
-v /home/admin/secrets:/home/admin/.ssh \
-v /home/admin/docs:/home/admin/docs \
acloud-dev
# 如果需要在运行时注入环境变量,则添加类似如下参数(添加代理案例)
# -e HTTP_PROXY=http://172.17.0.1:3128 \
# -e HTTPS_PROXY=http://172.17.0.1:3128 \
# -e NO_PROXY=localhost,127.0.0.1,*.baidu.com,192.168.0.0/16,10.0.0.0/8 \
备注
已验证: docker
的 save
和 load
和 nerdctl加载镜像到Kubernetes 完全兼容,可以相互转换