Redis-dump Docker搭建的快速指南


背景

  • 最近学习redis想能够将dump文件进行导入处理.
  • 看到比较好的办法都是使用ruby ,但是公司的网络太感人了.
  • 想着比较简单的办法是通过docker方式来搭建.
  • 这里简单记录一下搭建过程.

dockerfile

FROM redis
RUN echo "" > /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/debian-security/ bullseye-security main" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib" >> /etc/apt/sources.list
RUN cat /etc/os-release
RUN redis-cli -v

RUN apt-get update && apt-get install ruby-dev -y \
    && apt-get install make -y \
    && apt-get install procps -y \
    && apt-get install gcc -y \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# RUN gem sources -a http://ruby.taobao.org/
RUN gem install redis-dump -V

注意事项

  • 第一次build时总是出现异常提示如图示:
W: Failed to fetch http://mirrors.aliyun.com/debian/dists/bullseye/InRelease  Temporary failure resolving 'mirrors.aliyun.com'
W: Failed to fetch http://mirrors.aliyun.com/debian-security/dists/bullseye-security/InRelease  Temporary failure resolving 'mirrors.aliyun.com'
W: Failed to fetch http://mirrors.aliyun.com/debian/dists/bullseye-updates/InRelease  Temporary failure resolving 'mirrors.aliyun.com'
W: Failed to fetch http://mirrors.aliyun.com/debian/dists/bullseye-backports/InRelease  Temporary failure resolving 'mirrors.aliyun.com'
  • 简单学习了下应该是Docker内的网络没有dns解析导致的方法为:
cd /etc/docker
vim daemon.json
# 添加内容
{
  "dns": ["8.8.8.8", "114.114.114.114"]
}
# 重启一下docker即可
systemctl restart docker

docker build && docker save

  • 方法为:
docker build . -t redis-dump
docker save redis-dump |gzip > redis-dump.tar.gz 

在公司内部进行使用.

  • 导入镜像以及进行简单使用
导出为 json 注意 集群模式 我不太明白怎么导出
docker run -it --net=host  redis-dump redis-dump -u redis://10.110.82.137 -a Password  >/deploy/redis-dump.json

注意可以根据帮助尽心进行处理: 
  Try: /usr/local/bin/redis-dump show-commands
Usage: /usr/local/bin/redis-dump [global options] COMMAND [command options] 
    -u, --uri=S                      Redis URI (e.g. redis://hostname[:port])
    -d, --database=S                 Redis database (e.g. -d 15)
    -a, --password=S                 Redis password (e.g. -a 'my@pass/word')
    -s, --sleep=S                    Sleep for S seconds after dumping (for debugging)
    -c, --count=S                    Chunk size (default: 10000)
    -f, --filter=S                   Filter selected keys (passed directly to redis' KEYS command)
    -b, --base64                     Encode key values as base64 (useful for binary values)
    -O, --without_optimizations      Disable run time optimizations
    -V, --version                    Display version
    -D, --debug
        --nosafe

导入到redis中来.

cat /deploy/21.30.json |  docker run -i --net=host redis-dump redis-load -n -d 15 -u redis://127.0.0.1:6379
注意 docker run 不能有t 不然会报错:
the input device is not a TTY