dockerfile创建redis4.0.10

前言:

         本文讲解如果用dockerfile创建redis4.0.10镜像并挂载容器数据、配置文件目录!

一、下载redis4.0.10的源码安装包

[root@dingzhi ~]# cd redis4.0.10/
[root@dingzhi redis4.0.10]#  wget http://download.redis.io/releases/redis-4.0.10.tar.gz
#文件大小才2M左右

二、在/root/redis4.0.10里创建dockerfile


[root@dingzhi redis4.0.10]# vim dockerfile
FROM centos:latest
MAINTAINER https://blog.csdn.net/lituxiu
ENV TIME_ZOME Asia/Shanghai
ARG WJ="redis-4.0.10"

#wget http://download.redis.io/releases/redis-4.0.10.tar.gz
ADD $WJ.tar.gz /usr/local/
RUN yum -y install gcc gcc-c++ make \
        && mkdir -p /usr/local/$WJ/etc \
        && mkdir /usr/local/$WJ/data \
        && cd /usr/local/$WJ \
        && make MALLOC=libc  \
        && mv /usr/local/$WJ/redis.conf /usr/local/$WJ/etc \
        && sed -i -e 's@protected-mode yes@protected-mode no@g' /usr/local/$WJ/etc/redis.conf \
        && echo "requirepass kU08#y" >> /usr/local/$WJ/etc/redis.conf \
        && sed -i 's/dir \.\//dir \/usr\/local\/redis-4.0.10\/data/'  /usr/local/$WJ/etc/redis.conf  \

        && echo "${TIME_ZOME}" > /etc/timezone \
        && ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime \
        && yum clean all \
        && yum -y remove gcc gcc-c++ make

WORKDIR /usr/local/$WJ/src
EXPOSE 6379
#启动
ENTRYPOINT  /usr/local/redis-4.0.10/src/redis-server /usr/local/redis-4.0.10/etc/redis.conf

说明:

1、关闭redis保护模式sed -i -e 's@protected-mode yes@protected-mode no@g' /usr/local/$WJ/etc/redis.conf  。因为默认redis需要设置管理员账号密码,开启了保护模式,所以如果第一次使用没有设置管理员,就会出现报错,关闭保护模式即可。

2、这一步sed -i 's/dir \.\//dir \/usr\/local\/redis-4.0.10\/data/'  /usr/local/$WJ/etc/redis.conf  ,是修改redis存储数据的存放位置,修改后的路径为/usr/local/redis-4.0.10/data/的目录下。不修改的话,就存放在/usr/local/redis-4.0.10/下,与其它配置、启动的文件同一级目录,不分隔实现寄主主机挂载数据目录的话,不方便管理。

三、创建redis4.0.10镜像

[root@dingzhi redis4.0.10]# docker build -t redis4.0.10:latest ./

四、实现本地数据持久化挂载

4.1、查看创建好的redis4.0.10镜像

[root@dingzhi ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis4.0.10         latest              bbcb83519ab6        3 hours ago         314 MB
tomcat8.5.40        latest              f06aacf399c4        8 hours ago         622 MB
jdk8.0.211          latest              c598103b2c55        2 days ago          608 MB
nginx1.15.7         latest              4b05c87dcbec        2 days ago          302 MB
php7.2.16           latest              3428fd528787        2 days ago          627 MB
docker.io/mysql     5.7                 98455b9624a9        3 weeks ago         372 MB
docker.io/centos    latest              9f38484d220f        5 weeks ago         202 MB

4.2、启动镜像并映射容器端口与挂载容器数据目录

[root@dingzhi ~]# docker run --restart=always -p 6379:6379 -v /data/redis/data/:/usr/local/redis-4.0.10/data --name redis -d bbcb
e7da69d3a62f17331a09bf94f8b6ae176a991f00aeacab2869e4774c4f39f408
[root@dingzhi ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
e7da69d3a62f        bbcb                "/bin/sh -c '/usr/..."   4 seconds ago       Up 3 seconds        0.0.0.0:6379->6379/tcp   redis

(实现/data/redis/data/目录的数据/usr/local/redis-4.0.10/data/的数据同步)

4.3、实现容器的data和etc目录文件挂载

        同时想要把容器里的/usr/local/redis-4.0.10/etc/redis.conf复制到/usr/local/redis-4.0.10/data/里,关闭容器,在寄主主机/data/redis/data/里就有redis.conf,创建目录mkdir /data/redis/etc/后移动mv /data/redis/data/redis.conf   /data/redis/etc/ 

[root@dingzhi ~]# docker exec -it redis /bin/bash   #进入redis容器里
[root@e7da69d3a62f redis-4.0.10]# pwd
/usr/local/redis-4.0.10
[root@e7da69d3a62f redis-4.0.10]# ls
00-RELEASENOTES  CONTRIBUTING  INSTALL    Makefile   data  etc      runtest-cluster   sentinel.conf  tests
BUGS             COPYING       MANIFESTO  README.md  deps  runtest  runtest-sentinel  src            utils
[root@e7da69d3a62f redis-4.0.10]# cp etc/redis.conf  data/   #复制redis.conf到实现寄主主机本地挂载

         先停止并删除容器

[root@dingzhi ~]# docker kill $(docker ps -q)    #停止运行中的容器
e7da69d3a62f
[root@dingzhi ~]# docker rm -f $(docker ps -qa)  #删除停止运行的容器
e7da69d3a62f

         寄主主机本地目录设置好后,再次启动容器,多添加了容器的/usr/local/redis-4.0.10/etc/目录挂载


[root@dingzhi data]# cd /data/redis
[root@dingzhi redis]# ls
data  etc
[root@dingzhi redis]# ls etc/
[root@dingzhi redis]# mv data/redis.conf  etc/
[root@dingzhi redis]# ls etc/
redis.conf

[root@dingzhi ~]# docker run --restart=always -p 6379:6379 -v /data/redis/data/:/usr/local/redis-4.0.10/data -v /data/redis/etc/:/usr/local/redis-4.0.10/etc  --name redis -d bbcb
bd9e26d3795f97196620c32203921056cbd5acdec112df40bf8279e697ddf82

五、测试验证

 5.1、登录容器

[root@dingzhi ~]# docker exec -it bd9e  /bin/bash

5.2、容器内登录redis客户端,并创建数据

[root@bd9e26d3795f src]# ./redis-cli -h 127.0.0.1 -p 6379 -a kU08#y 
Warning: Using a password with '-a' option on the command line interface may not be safe.
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name lituxiu
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"lituxiu"
127.0.0.1:6379> exit

[root@bd9e26d3795f src]# ls /usr/local/redis-4.0.10/data/   
[root@bd9e26d3795f src]#
# redis一开始数据创建了也不会那么快生成,不必惊慌,这和redis的存储机制有关。

  5.3、在宿主主机重起redis容器,数据就生成了

[root@dingzhi data]# pwd
/data/redis/data
[root@dingzhi data]# ls                  
[root@dingzhi data]# docker restart bd9e
bd9e
[root@dingzhi data]# ls
dump.rdb
[root@dingzhi data]# 

dockerfile创建redis4.0.10镜像并挂载重要的数据、配置目录,记录完毕!

猜你喜欢

转载自blog.csdn.net/lituxiu/article/details/89412893