docker安装redis

拉取docker hub中官方提供的redis:6.2.0镜像,执行docker run -it redis:6.2.0 bash命令启动。执行docker ps -a命令,查看容器id,执行docker exec命令进入容器中,再用ps、netstat命令查看进程,发现基本上什么命令也没有预装,安装好procps、net-toos后,再用ps、netstat命令查看进程,发现没有redis进程启动。再执行find / -name redis*命令,找下redis相关文件在哪个目录中。

root@d91297304d5c:/data# find / -name redis*
/usr/local/bin/redis-server
/usr/local/bin/redis-check-aof
/usr/local/bin/redis-benchmark
/usr/local/bin/redis-check-rdb
/usr/local/bin/redis-sentinel
/usr/local/bin/redis-cli

发现只有命令行客户端,没有redis的配置文件。

依赖docker hub中官方的redis:6.2.0构建自己的镜像,Dockerfile内容如下:

FROM redis:6.2.0
RUN apt-get update && apt-get install -y vim procps lsof curl wget net-tools iputils-ping telnet lrzsz 
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
WORKDIR /app
CMD redis-server /conf/redis.conf

构建脚本build.sh,内容如下:

#/bin/sh
docker build -t my_redis:6.2.0 -f ./redis_dockerfile .

把build.sh放在和Dockerfile同一目录下,执行build.sh,得到my_redis:6.2.0。redis:6.2.0大小在105M左右,my_redis:6.2.0大小在166M左右。

在mac电脑上,用自建的docker network n1,run命令如下

docker run -d --network n1 -p 6380:6380 -v /Users/shengruikou/Desktop/redis:/conf my_redis:6.2.0

启动后,用docker ps -a --no-trunc命令查看,会发现COMMAND一列的值是docker-entrypoint.sh /bin/sh -c 'redis-server /conf/redis.conf',看起来容器正常启动了。

登进去容器,用ps、netstat、lsof命令查看进程及监听端口,发现有进程启动,且监听6380端口。执行redis-cli -p 6380命令,用redis命令行客户端连接redis服务,输入ping后回车,会返回PONG,容器内redis服务正常启动。

在宿主机,执行redis-cli -p 6380命令,

宿主机的redis-cli命令客户端是怎么来的呢?

第一种方式:下载redis-6.2.0.tar.gz,解压,在主目录中执行make命令,之后就可以在新生成的src目录中就可以看到包括redis-cli在内的命令行客户端了。

第二种方式:在启动容器时,用-v参数把/usr/local/bin目录映射出来。此时run命令为

docker run -d --network n1 -p 6380:6380 -v /Users/shengruikou/Desktop/redis:/conf -v /Users/shengruikou/Desktop/redis/src:/usr/local/bin my_redis:6.2.0

原文地址:https://www.cnblogs.com/koushr/p/14560872.html