docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker迁移服务到离线服务器

使用Docker迁移服务到离线服务器的过程

作者:程序设计实验室

最近遇到的这个场景,需要把之前开发的一套系统迁移到一个离线的服务器上,这个服务器有点麻烦,接入VPN后通过堡垒机才能访问,速度也很慢,遇到不少坑,本文记录一下迁移过程,需要的朋友可以参考下

前言

最近遇到的这个场景,需要把之前开发的一套系统迁移到一个离线的服务器上,这个服务器有点麻烦,接入VPN后通过堡垒机才能访问,速度也很慢,遇到不少坑,本文记录一下迁移过程。

基本信息

原本这套系统也挺简单的,Django 写的后端接口,搭配 Vue+Echarts 大屏,数据库用 Mysql 和 Redis 作为缓存,这些在原服务器上都是用 docker 部署的。

这台离线的服务器是 Centos7.9 系统的,虽然不能访问外网,但还好有个本地的 yum 仓库,可惜 yum 官方源少得可怜,只能安装很有限的几个软件。

现在除了前端不需要迁移之外,其他的服务都需要迁移到这个离线的服务器上。

迁移步骤:

离线安装docker

前面说到这个服务器是有 yum 本地镜像的,但里面并没有 docker,所以需要自行下载 docker 的 RPM 安装包。

在这个地址: https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

需要下载以下安装包(版本号本文撰写时的最新版,请读者自行下载当下的最新版本)

然后把这些安装包都上传到服务器

执行命令安装

sudo yum install containerd.io-1.6.21-3.1.el7.x86_64.rpm docker-ce-24.0.2-1.el7.x86_64.rpm # 以及其他...

就是把全部文件都放在同一个 install 命令后面,因为这些包是有相互依赖要求的,如果一个个装的话可能会因为顺序问题报错。

安装之后启动一下 docker

sudo systemctl enable docker
sudo systemctl start docker

添加用户组啥的也属于安装 docker 后的常规操作了

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

之后就可以不使用 root 用户来执行 docker 命令了

导出镜像

导出镜像有两种方式

PS:这俩的导出导入命令的匹配的,不能混用

前者主要用于制作基础镜像,导出后是没有历史记录和元数据的,也没有 entrypoint 所以无法直接运行,这次迁移服务使用 save 方式。

操作命令

docker save <container_id> -o image.tar

也可以重定向

docker save <container_id> > image.tar

补充一下这俩方式的具体区别

应用场景区别

打包数据

在旧的服务器上,使用了 docker 来部署 MySQL 服务,并且将 data 映射出来,需要把 data 也一并迁移到新的服务器上。

MySQL docker 的 volumes 配置

volumes:
	- ./data:/var/lib/mysql

因为VPN带宽很低,这次使用 tar + bzip2 来打包压缩

tar -cjvf ./data data.tar.bz2

命令参数说明:

然后将这个 data.tar.bz2 上传到新的服务器。

解压命令我也贴一下

tar -xjvf data.tar.bz2

这个命令会在当前目录生成 data 目录。

命令参数说明:

导入镜像

把前面导出的 docker 镜像上传后,执行导入命令

docker load &lt; image.tar

之后执行 docker images 看看是否导入成功

启动容器

把原本的几个 docker-compose 配置上传

之前为了方便更新,Django项目是上传代码之后在服务器直接 build,像这样

version: "3.6"
services:
  web:
    restart: always
    build: .
    environment:
      - ENVIRONMENT=docker
      - URL_PREFIX=demo/api
      - DEBUG=false
      - DEFAULT_DATABASE=mysql
    command: uwsgi uwsgi.ini
    volumes:
      - .:/code

但在离线服务器上,没有网络肯定是没法 build 了

所以要把 build . 改成 image: 镜像名称

搞定后顺利启动~

配置周边组件

只提供接口的话,也没啥啦,再安装个 nginx 就好

然而众所周知 yum 的默认源连 nginx 都没有,要安装 nginx 的话还得添加 epel-release 源

sudo yum install epel-release

万幸,离线服务器的本地源有这个东西

sudo yum update
sudo yum install nginx

搞定~

然后还是老套路,用 systemctl 启动 nginx,不重复了。

这个服务器很折腾的,既然搞定了,得测试一下,但是接口都不开放,ssh链接也是通过多层跳转的,好像没法开启 ssh-tunnel 转发在本地测试。

所以只能用 curl 之类的工具来测试一下。

不过我这次另辟蹊径,用命令行浏览器来试试能不能打开项目的网页。

分别试了这俩:

成功打开了网页,这俩浏览器的效果都差不多。

参考资料

到此这篇关于使用Docker迁移服务到离线服务器的文章就介绍到这了,更多相关Docker迁移服务到离线服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文