鲲鹏架构入门与实战
上QQ阅读APP看书,第一时间看更新

5.4.4 容器迁移的流程

从5.4.3节的示例可以知道,在同一个架构下,很容易实现容器的迁移,也就是把容器提交为镜像,然后把镜像推送到仓库,其他的服务器可以从仓库下载这个镜像,然后从这个镜像创建容器,这样就实现了容器的迁移,过程如图5-12所示。

图5-12 同架构容器迁移

但是,在不同的架构下,直接使用其他架构的镜像会出现错误,因为镜像包含的软件本身也与架构相关,在一个架构下生成的镜像,在其他的架构中是无法直接运行的。但是,镜像也可以使用Dockerfile生成,可以修改一个架构下的Dockerfile文件,使其在其他架构下也可以生成相同功能的镜像。

这里通过在x86架构和鲲鹏架构下分别构建一个Redis5.0.9的镜像,演示不同架构之间容器的迁移。

1.x86架构Redis镜像构建

步骤1:准备x86架构服务器的容器环境,参考5.4.3节Docker的安装部分。

步骤2:创建/data/redis/文件夹,然后在该文件夹内创建Dockerfile文件,命令如下:

     mkdir -p /data/redis/
     cd /data/redis/
     vim Dockerfile

步骤3:在Dockerfile文件内输入构建指令,保存并退出,指令如下:

构建文件指令简介:

FROM:构建基于系统的镜像,这里使用的是基于CentOS的精简镜像,体积较小。

ENV:设置环境变量,这里把下载网址和文件名称设置成环境变量,方便制作不同Redis版本的镜像。

RUN:要执行的指令。本构建文件中,RUN指令执行的过程如下:

(1)使用yum安装必需的依赖项。

(2)删除了yum的缓存文件。

(3)使用wget下载redis的tar源码包。

(4)解压源码包到源码目录。

(5)删除tar包。

(6)使用make命令编译redis源码,编译时使用-j"$nproc"指定使用的核心数量。

(7)使用make install安装。

(8)删除源码目录。

VOLUME:创建挂载点/data。

WORKDIR:设置工作目录,这里把/data设置为工作目录。

EXPOSE:声明服务端口,这里把Redis提供服务的6379端口声明为服务端口。

CMD:设置容器启动后默认执行的命令及其参数,这里默认启动Redis服务。

步骤4:创建Redis镜像,命令如下:

     docker build -t x86/centos_redis:5.0.9 .

构建过程所需时间较长,最后构建成功后的回显如下:

步骤5:查看新构建的镜像,命令及回显如下:

可以看到新的镜像x86/centos_redis:5.0.9。

步骤6:创建/data/redis/data/文件夹,使用x86/centos_redis:5.0.9镜像运行容器,容器名称为x86_redis,命令如下:

创建成功后,查看容器运行状态,命令及回显如下:

容器状态为Up,表示已经正常运行了。

步骤7:使用redis-cli连接redis容器,然后输入ping,正常会返回PONG,命令及回显如下:

     [root@ecs-x86 redis]#docker exec - it x86_redis redis-cli
     127.0.0.1:6379> ping
     PONG

步骤8:测试set/get方法,指令及回显如下:

     127.0.0.1:6379> set x86 hello
     OK
     127.0.0.1:6379> get x86
     "hello"

这表明x86架构下使用镜像x86/centos_redis:5.0.9运行容器成功。

2.鲲鹏架构Redis镜像构建

步骤1:准备鲲鹏架构服务器的容器环境,可以使用5.4.3节安装的环境。

步骤2:创建/data/redis/文件夹,然后在该文件夹内创建Dockerfile文件,命令如下:

     mkdir -p /data/redis/
     cd /data/redis/
     vim Dockerfile

步骤3:在Dockerfile文件内输入构建指令,保存并退出,指令如下:

可以看出,鲲鹏架构的Dockerfile文件指令和x86架构的指令基本类似,主要区别在两个部分,一个是构建基于的镜像,这里选择的是Debian系统;另一个是apt-install,用来取代CentOS中的yum。除此之外,其他指令基本一致。

步骤4:创建Redis镜像,命令如下:

     docker build -t arm64v8/debian_redis:5.0.9 .

构建过程也需要较长时间,最后出现Successfully built表示构建成功了显示信息如下:

步骤5:查看新构建的镜像,命令及回显如下:

可以看到新的镜像arm64v8/debian_redis:5.0.9。

步骤6:创建/data/redis/data/文件夹,使用arm64v8/debian_redis:5.0.9镜像运行容器,容器名称为kunpeng_redis,命令如下:

创建成功后,查看容器运行状态,命令及回显如下:

可以看到kunpeng_redis已经成功运行。

步骤7:使用redis-cli连接redis容器,输入ping,正常会返回PONG,然后测试set/get方法,命令及回显如下:

这表明鲲鹏架构下redis服务运行成功了。

3.基于本地镜像构建Redis镜像

在使用Dockerfile构建新镜像时,除了可以基于仓库的镜像,也可以基于本地的镜像。这里创建一个生成Redis5.0.9镜像的Dockerfile文件,使用在5.4.3节中创建的arm64v8/centos4make镜像作为基础镜像。下面列出简化的步骤。

步骤1:进入鲲鹏服务器的/data/redis/文件夹。

步骤2:创建Dockerfile文件,文件指令如下:

步骤3:创建Redis镜像,命令如下:

     docker build -t arm64v8/debian4make_redis:5.0.9 .

构建成功后的回显如下:

后续的创建容器、测试Redis服务的过程和本节第2段“鲲鹏架构Redis镜像构建”的步骤6、7、8类似,就不再演示了,有兴趣的读者可以自己试一下。