首先登录云服务器,将需要传输的镜像保存为 .tar
格式的文件:
bash
# 语法:docker save -o [导出的文件名.tar] [镜像名:标签]
docker save -o my_image.tar nginx:latest # 示例:导出nginx镜像
从云服务器下载文件到局域网机器
局域网机器可直接通过互联网访问云服务器,主动拉取文件(无需云服务器反向访问内网),步骤如下:
在局域网目标机器上操作(发起端是局域网机器)
利用scp
(基于 SSH)或wget
/curl
(若文件通过 HTTP 服务暴露)直接从云服务器下载:用 scp 拉取(云服务器需开启 SSH 服务,端口通常为 22):
bash
# 语法:scp [云服务器用户名@云服务器公网IP:云服务器上的文件路径] [局域网机器本地保存路径] scp root@云服务器公网IP:/path/to/my_image.tar /home/局域网用户/local_dir/
执行后输入云服务器的登录密码(或使用 SSH 密钥免密),文件会直接下载到局域网机器的指定路径。
用 wget/curl 拉取(若云服务器通过 Nginx/Apache 等暴露了文件下载链接):
bash
# wget示例(需云服务器提供可访问的URL) wget https://云服务器公网IP:端口/path/to/my_image.tar -P /home/局域网用户/local_dir/ # curl示例 curl -O https://云服务器公网IP:端口/path/to/my_image.tar -o /home/局域网用户/local_dir/my_image.tar
场景 2:局域网内机器间传输文件
局域网内机器本身已互通(与是否能访问互联网无关),可直接通过内网 IP 传输,常用方式:
scp/sftp 传输(适用于 Linux/macOS,Windows 可通过 WSL 或工具):
在局域网内的源机器(如 A 机器)上执行,将文件推送到同局域网的目标机器(如 B 机器):bash
# 语法:scp [A机器上的文件路径] [B机器用户名@B机器内网IP:B机器目标路径] scp /home/A用户/local_file.tar B用户@192.168.1.101:/home/B用户/
实例1:在云服务器上操作
ubuntu@10-7-127-87:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ad5708199ec7 7 days ago 192MB
hello-world latest 1b44b5a3e06a 12 days ago 10.1kB
tomcat latest 3a258b4af57b 2 weeks ago 468MB
cleverest/crproxy latest c1a4187eb570 7 weeks ago 94.9MB
grafana/grafana 10.1.0 6fc2a772178b 24 months ago 392MB
prom/node-exporter v1.6.1 458e026e6aa6 2 years ago 22.8MB
prom/prometheus v2.45.0 e1fbd49323c6 2 years ago 236MB
gcr.io/cadvisor/cadvisor v0.47.0 b2a3c8cd6153 2 years ago 87.3MB
ubuntu@10-7-127-87:~$ docker save -o nginx.tar nginx:latest
ubuntu@10-7-127-87:~$ docker save -o tomcat.tar tomcat:latest
ubuntu@10-7-127-87:~$ pwd
/home/ubuntu
然后再本地局域网操作
scp ubuntu@103.218.XXX.XXX:/home/ubuntu/nginx.tar /home/shitou/nginx.tar
The authenticity of host '103.218.XXX.XXX (103.218.XXX.XXX)' can't be established.
ED25519 key fingerprint is SHA256:dbj9PoKTdsvn1IoTC0ctCo2t6wAqQjhNlCiqVS+8Bio.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '103.218.XXX.XXX' (ED25519) to the list of known hosts.
ubuntu@103.218.XXX.XXX's password:
Permission denied, please try again.
ubuntu@103.218.XXX.XXX's password:
nginx.tar 100% 187MB 3.3MB/s 00:56
shitou@aishitou:~$ scp ubuntu@103.218.XXX.XXX:/home/ubuntu/tomcat.tar /home/shitou/tomcat.tar
ubuntu@103.218.XXX.XXX's password:
tomcat.tar 100% 452MB 2.6MB/s 02:51
shitou@aishitou:~$ docker load -i nginx.tar
Loaded image: nginx:latest
shitou@aishitou:~$ docker load -i tomcat.tar
cd9664b1462e: Loading layer 80.63MB/80.63MB
7ad9404c656d: Loading layer 64.65MB/64.65MB
74b13d8a4515: Loading layer 307.3MB/307.3MB
b975e904aaaf: Loading layer 2.56kB/2.56kB
886ae98b49c1: Loading layer 7.168kB/7.168kB
342586930e8a: Loading layer 2.56kB/2.56kB
5f70bf18a086: Loading layer 1.024kB/1.024kB
b3e39a1a1009: Loading layer 20.97MB/20.97MB
Loaded image: tomcat:latest
然后再局域网内启动镜像成为容器,查看版本号,
# 创建必要的本地目录用于持久化(修改为/opt/nginxy/)
mkdir -p /opt/nginxy/{conf,conf.d,html,logs}
# 拉取并启动Nginx容器
docker run -d \
--name nginx-server \
# 端口映射: 主机7867端口映射到容器80端口
-p 7867:80 \
# 持久化挂载(对应修改后的目录)
-v /opt/nginxy/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/nginxy/conf.d:/etc/nginx/conf.d \
-v /opt/nginxy/html:/usr/share/nginx/html \
-v /opt/nginxy/logs:/var/log/nginx \
# 设置重启策略: 跟随系统启动自动重启
--restart=always \
# 资源限制: CPU最多使用1个核心,内存限制为512MB
--cpus=1.0 \
--memory=512m \
nginx:latest