文章

内网中部署Docker项目

内网中部署Docker项目

1 前言

由于内网中无法直接拉取镜像,所以需要将镜像文件打包后传入内网中,再在内网中加载出来,基于docker的docekr savedocker load实现,下面是具体步骤。

2 实施步骤

2.1 在外网环境导出所有镜像

利用 docker-compose 管理的容器直接提取镜像并导出,避免处理变量问题:

命令解释:

  • docker-compose ps -q:获取当前 docker-compose 管理的所有容器 ID;
  • xargs docker inspect --format '':从容器信息中提取实际使用的镜像名(已解析变量,如 docker.io/netboxcommunity/netbox:v4.4-3.4.1);
  • sort | uniq:去重(避免重复导出相同镜像,如 netboxnetbox-worker 可能共用一个镜像);
  • xargs docker save -o netbox_images.tar:将所有去重后的镜像导出到 netbox_images.tar
1
2
3
4
5
# 进入 docker-compose.yml 所在目录
cd /path/to/netbox-docker

# 导出所有由 docker-compose 管理的镜像(去重后合并为一个 tar 包)
docker-compose ps -q | xargs docker inspect --format '' | sort | uniq | xargs docker save -o netbox_images.tar

2.2 传输文件到内网

各显神通。

2.3 在内网环境导入镜像

登录内网机器,进入存放 netbox_images.tar 的目录,执行导入:

1
docker load -i netbox_images.tar

导入完成后,用 docker images 确认镜像已存在(包括 netboxcommunity/netbox:v4.4-3.4.1postgres:17-alpinevalkey/valkey:8.1-alpine 等)。

2.4 启动服务

1
docker-compose up -d

3 总结

在内网环境中部署真的才能体会到docker强大的迁移性,基本都是一条命令跑起来服务,像这个项目是netbox,有redis、MySQL还有主进程,都是基于docker compose进行了编排,把镜像都加载好了直接就能一键启动,非常的便捷。

本文由作者按照 CC BY 4.0 进行授权