DOCKER 九月 06, 2020

华为鲲鹏下可用的 Redis docker 镜像

文章字数 4.2k 阅读约需 4 mins. 阅读次数

在华为鲲鹏服务器下,使用 Docker 时,因鲲鹏服务器使用的芯片为 ARM 架构,镜像也需要使用 ARM 版本的。

从 x86 架构拉取的镜像直接导出导入到鲲鹏服务器上是不可以直接使用的。

可以通过 docker inspect IMAGE_NAME 查看镜像的架构类型。

在鲲鹏服务器上重新拉取镜像,会自动下载 ARM 架构的镜像,前提是需要有提供 ARM 架构的版本,如:

Redis Official Image

但在鲲鹏服务器上,使用官方提供的 ARM64 版本的 Redis 镜像,启动时会报如下异常:

<jemalloc>: Unsupported system page size

从 Docker Hub 上试了一些有提供 ARM 版本的 Redis 镜像,基本都是相同的问题。唯一一个好用的镜像好像只有 Redis 4.x 的版本。

查找了一些资料,在华为云论坛上也有提到类似的问题:

解决办法是需要在目标服务器上自行构建一个镜像。

为了给懒人提供一个方便,这里先提供一个已经构建好的,鲲鹏服务器上可用的 Redis 5.0.9 版本的镜像文件:https://gitee.com/AlphaHinex/trunk/blob/master/docker-library/redis/5.0/redis-kunpeng-5.0.9.tar.gz

如需自行构建,可参考如下构建步骤。

获取官方镜像的 Dockerfile

如:https://github.com/docker-library/redis/tree/master/5.0

根据实际情况进行调整

比如更换国内更快的 apt-get 数据源

RUN sed -i s@/deb.debian.org/@/mirrors.163.com/@g /etc/apt/sources.list
RUN apt-get clean

阿里云的 debian 镜像中 arm 相关的包不全,可使用 163 的镜像

如果在代理网络环境下,可以添加代理相关配置,以及网络不稳定时可提前下载好所需资源,COPY 到镜像中,如:

10a14,17
>         echo "Acquire::http::Proxy \"http://user:pwd@proxy.com:8080\";" >/etc/apt/apt.conf; \
>         echo "Acquire::https::Proxy \"http://user:pwd@proxy.com:8080\";" >>/etc/apt/apt.conf; \
>         export http_proxy=http://user:pwd@proxy.com:8080; \
>         export https_proxy=http://user:pwd@proxy.com:8080; \
14,17c21,26
<     dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
<     wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
<     wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
<     export GNUPGHOME="$(mktemp -d)"; \
---
>     dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"
>
> COPY gosu-arm64 /usr/local/bin/gosu
> COPY gosu-arm64.asc /usr/local/bin/gosu.asc
>
> RUN export GNUPGHOME="$(mktemp -d)"; \
35a45,48
>         echo "Acquire::http::Proxy \"http://user:pwd@proxy.com:8080\";" >/etc/apt/apt.conf; \
>         echo "Acquire::https::Proxy \"http://user:pwd@proxy.com:8080\";" >>/etc/apt/apt.conf; \
>         export http_proxy=http://user:pwd@proxy.com:8080; \
>         export https_proxy=http://user:pwd@proxy.com:8080; \
47c60
<     wget -O redis.tar.gz "$REDIS_DOWNLOAD_URL"; \
---
>     wget -O redis.tar.gz "$REDIS_DOWNLOAD_URL" --no-check-certificate; \

调整后完整的 Dockerfile 文件可见:https://gitee.com/AlphaHinex/trunk/blob/master/docker-library/redis/5.0/Dockerfile

执行构建

在 Dockerfile 所在路径执行 docker build -t redis-kunpeng:5.0.9 .,即可构建出新的镜像。

导出镜像为离线文件时,可使用 docker save > redis-kunpeng-5.0.9.tar redis-kunpeng:5.0.9

将离线镜像文件导入,可使用 docker load < redis-kunpeng-5.0.9.tar

0%