1. 将本地的 Docker 镜像推送到远程仓库(如 Docker Hub、阿里云容器镜像服务等)。
2. 或者直接将镜像文件导出并传输到目标服务器。
以下是两种常见场景的解决方案:
---
### **方法 1:通过 Docker Registry 推送镜像**
这是最常用的方法,适用于需要将镜像上传到远程仓库并让其他服务器拉取的情况。
#### **步骤 1:为镜像打标签**
给本地镜像打上远程仓库的标签,格式为 `<registry>/<repository>:<tag>`。例如:
```bash
docker tag <local_image_id> <remote_registry>/<repository>:<tag>
```
**示例**:
```bash
docker tag my_image:latest dockerhub_username/my_image:latest
```
#### **步骤 2:登录远程仓库**
使用 `docker login` 命令登录远程仓库:
```bash
docker login <remote_registry>
```
**示例**:
```bash
docker login docker.io
```
#### **步骤 3:推送镜像**
将镜像推送到远程仓库:
```bash
docker push <remote_registry>/<repository>:<tag>
```
**示例**:
```bash
docker push dockerhub_username/my_image:latest
```
#### **步骤 4:在目标服务器拉取镜像**
在目标服务器上执行以下命令拉取镜像:
```bash
docker pull <remote_registry>/<repository>:<tag>
```
**示例**:
```bash
docker pull dockerhub_username/my_image:latest
```
---
### **方法 2:导出镜像并传输到目标服务器**
如果无法使用 Docker Registry,可以通过导出镜像文件并传输到目标服务器的方式实现。
#### **步骤 1:导出镜像**
将本地镜像保存为一个 `.tar` 文件:
```bash
docker save -o <output_file.tar> <image_name>:<tag>
```
**示例**:
```bash
docker save -o my_image.tar my_image:latest
```
#### **步骤 2:传输镜像文件**
使用工具(如 `scp`、`rsync` 或 FTP)将 `.tar` 文件传输到目标服务器。
**示例(使用 scp)**:
```bash
scp my_image.tar user@remote_server:/path/to/destination/
```
#### **步骤 3:加载镜像**
在目标服务器上加载镜像文件:
```bash
docker load -i <input_file.tar>
```
**示例**:
```bash
docker load -i /path/to/my_image.tar
```
---
### **方法 3:直接从源服务器复制镜像到目标服务器**
如果两台服务器都可以访问,并且支持 Docker 的 API,可以通过以下方式直接复制镜像:
#### **步骤 1:在源服务器导出镜像**
```bash
docker save <image_name>:<tag> | gzip > image.tar.gz
```
#### **步骤 2:通过管道传输到目标服务器**
使用 SSH 管道直接传输并加载镜像:
```bash
cat image.tar.gz | ssh user@remote_server "gunzip | docker load"
```
---
### **注意事项**
1. **网络限制**:如果目标服务器没有网络连接,推荐使用方法 2(导出镜像文件)。
2. **权限问题**:确保目标服务器上有足够的权限运行 `docker` 命令。
3. **镜像大小**:大镜像可能需要较长时间传输,建议压缩后再传输。
4. **安全性**:通过网络传输镜像时,确保使用安全协议(如 HTTPS 或 SSH)。