无网络docker镜像迁移
1、背景
- 私服服务器:docker私服部署在没有网络的服务器A上。
- 应用程序服务器:无网络服务器B,A和B可以相互通信
- 开发者:开发者的电脑C有网络,C可以和A、B通信,可以上传私服,部署应用。
2、私服安装
有网络环境保存镜像
在有网络的电脑B上,运行以下命令将Docker Registry镜像保存为tar文件:
docker pull registry:2
docker save registry:2 > registry.tar
无网络安装
在服务器A上,运行以下命令加载并启动Docker Registry:
docker load < registry.tar
docker run -d -p 5000:5000 --restart=always --name registry registry:2
此时,服务器A上的Docker私有仓库已经启动,监听在localhost:5000
。Docker Registry 本身不提供 Web 界面,默认仅提供 API 服务。
验证是否成功
curl http://your-registry-ip:5000/v2/_catalog
- 预期响应:
{"repositories":[]}
(初始为空)。
部署可视化界面(非必须)
docker run -d \-p 8081:80 \-e REGISTRY_URL=http://your-registry-ip:5000/v2 \-e REGISTRY_TRUST_ANY_SSL=true \joxit/docker-registry-ui:static
访问地址:http://localhost:8081
3、构建应用镜像并上传到私有仓库
构建应用镜像
在电脑C上,构建你的应用镜像,例如:
docker build -t my-app:latest .
将应用镜像推送到服务器A的私有仓库
首先,将应用镜像打上服务器A私有仓库的标签
docker tag my-app:latest <服务器A的IP地址>:5000/my-app:latest
然后,将镜像推送到服务器A的私有仓库:
docker push <服务器A的IP地址>:5000/my-app:latest
在推送过程中,Docker会将镜像数据传输到服务器A上的私有仓库。
4、运行镜像
在服务器B上从私有仓库拉取镜像并运行应用。
拉取镜像
在服务器B上,运行以下命令从私有仓库拉取应用镜像:
docker pull <服务器A的IP地址>:5000/my-app:latest
运行应用容器
拉取镜像后,运行应用容器
docker run -d --name my-app-container <服务器A的IP地址>:5000/my-app:latest