在这篇文章中,将了解如何使 Docker
镜像用于受保护或者无法访问互联网的服务器(即 docker pull <镜像名称>
无效的机器)。
作为一个具体示例,我们将使用最新的 Nginx
镜像来执行测试。通过以下步骤,将能够在安全网络中部署 Nginx
,而无需访问互联网。此外,当需要在未来版本中升级容器的镜像版本时,可以使用相同的步骤。
有两种方法可以做到:
- 最简单的方法是使用
docker save
和docker load
- 通过设置自己的镜像存储库
我们将专注于第一个选项,因为后者有点复杂。
如果选项二更适合实际的需求,请查看 Docker 在线文档。
在撰写本文时,1.21.5
是最新的 Nginx
版本,因此我们将在示例中使用它。镜像名称由三部分组成,即:
user_account/
(注意末尾的/
);或官方Docker
镜像存储库的空字符串(并且没有/
)image_name
:tag
(注意开头的‘:’)
Nginx Docker
镜像名称具有以下语法:nginx:1.21.5
,但可以在以下示例中将其更改为实际想要的任何镜像地址,并且它的工作方式相同。
在继续所需的命令之前,假设 serverA
是可以访问 互联网的机器,serverB
是防火墙后面或者无法访问互联网的机器。
步骤很简单。在 serverA
上,获取图像并将其保存到文件中:
$ docker pull nginx:1.21.5
1.21.5: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:1.21.5
docker.io/library/nginx:1.21.5
$ docker save nginx:1.21.5 | gzip > ~/nginx.1.21.5.tar.gz
现在,需要做的就是将生成的 tar
文件移动到 serverB
(通过使用scp
或任何其他方式).
然后在 serverB
上执行以下命令:
$ docker load < ~/nginx.1.21.5.tar.gz
2edcec3590a4: Loading layer [==================================================>] 83.86MB/83.86MB
e379e8aedd4d: Loading layer [==================================================>] 62MB/62MB
b8d6e692a25e: Loading layer [==================================================>] 3.072kB/3.072kB
f1db227348d0: Loading layer [==================================================>] 4.096kB/4.096kB
32ce5f6a5106: Loading layer [==================================================>] 3.584kB/3.584kB
d874fd2bc83b: Loading layer [==================================================>] 7.168kB/7.168kB
Loaded image: nginx:1.21.5
$ docker images | grep nginx
nginx 1.21.5 605c77e624dd 3 weeks ago 141MB
现在serverB
上可以像使用 docker pull nginx:1.21.5
一样使用镜像:
$ docker run --name some-nginx -d -p 8080:80 nginx:1.21.5
16d5ad2ee8f69a0f5989a6f94462b0f4ede773436fa8b21d62602afb6de328fc