今天帮别人看了一个redis的问题,记录了过程,细节方面还是要注意的,这里i说一下,主要是这个路径的问题
1.查找并拉取redis
注意的是
[root@localhost docker]# docker pull redis:4.0.1
[root@localhost docker]# docker search redis
直接启动
docker run -itd --name redis_stb -p 6379:6379 redis
注意的是,当你在容器中寻找的时候,是找不到配置文件的(默认 redis 容器是没有配置文件的),所以如果要修改配置,还得自己加一个配置文件,然后使用该配置文件进行重新run一个容器。可以直接加入容器中然后启动,不过更推荐使用挂载的方式,因为这样更利于修改和查看,以及对应的持久化目录或者log目录也一样的配置,下面使用挂载的方式进行操作。
增加配置文件(注意这个路径实际上对应的是容器内路径)
# bind 127.0.0.1 #限制redis只能本地访问,有其他需求可自行修改
protected-mode no #默认yes,开启保护模式,自选
daemonize no
#默认no,为yes为守护进程方式启动,可后台运行,除非kill进程,yes会使配置文件方式启动redis失败
logfile /var/log/redis/redis.log //对应log日志地址,挂载再宿主机上
# dir /opt/redis/data #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)
requirepass 12345678 # 配置密码,也可以在docker命令中配置
注意
1.路径都需要存在
注意你挂载地址的关系,中间不能有不存在的地址,比如上述 /opt/data,容器中实际没有data这个目录,但是data挂载了宿主机的/opt/reids/redis_2/data中的data,他之前的都有,所以没事,如果你容器这个中间加一个其他不存在的路径,变成/opt/redis/data,redis目录不存在,对应宿主机有没有挂载对应,就会出错了
2.文件权限
宿主机上的log文件,要给他一个执行权限,比这里的例子,logs是我的日志目录
chmod 777 /opt/reids/logs
完整代码
docker run --name redis_stb -d -p 6379:6379 -v /opt/redis/redis.conf:/usr/local/etc/redis/redis.conf -v /opt/redis/data:/data -v /opt/redis/logs:/var/log/redis redis redis-server /usr/local/etc/redis/redis.conf
参数解释说明:
-P 端口映射:使用本身对应的端口,于net参数相关使用
--net=host 使用host网络模式,直接使用宿主端口,注意 host 只能在 linux 用,
这两步你可以使用-p的端口映射,网络模式自己注意,毕竟要相互交互的。
--name myredis 指定该容器名称,查看和进行操作都比较方便。(可选,不指定名字就不用)
-v 挂载目录,规则与端口映射相同。用冒号隔开,前面是宿主机地址对应后面容器地址,意思是当使用该路径下的文件或者路径时,去使用对应宿主机上的文件或路径,容器中也不需要有。
以这里的为例:
/opt/redis/logs:/var/log/redis //容器中/var/log/redis,会去宿主机/opt/redis/logs找
-v /opt/redis/data:/data //容器中/data,会去宿主机/opt/reids/data
/opt/redis/redis.conf:/usr/local/etc/redis/redis.conf //容器中/usr/local/etc/redis/redis.conf,会去宿主机/opt/redis/redis.conf找
重要: 配置文件映射,docker镜像redis 默认无配置文件。
-d redis 表示后台启动redis
redis-server /usr/local/etc/redis/redis.conf //以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis/redis.conf
//注意这里的目录,是你配置文件中的那个目录,别写错了,不要直接写宿主机上的目录
重要: docker 镜像reids 默认 无配置文件启动
--appendonly yes 开启redis 持久化(可以再配置文件中写)