docker里的ubuntu16下搭建redis

2 篇文章 0 订阅
1 篇文章 0 订阅

总结根据下面的博客搭建docker+redis时遇到的坑。
http://blog.csdn.net/lifetragedy/article/details/50628820

先声明一下,不是上面的博客写的不好,而是博主本人第一次搭建,之前也从没用过docker,所以有些地方可能对于老手来说不值一提,但作为新手还是要注意一下的,不,是特别需要注意。其实博主本来可以用vm里的openSESU(linux发行版之一)来直接安装redis的,但看这个docker蛮好玩的,就试用一下,结果折腾了两天才搞好。好了,废话不多说了,开始填坑了。只是坑太多了,都不知道怎么讲起了。。。

写在前面的话:
1.推荐使用官网里DockerToolbox,它有一个可视化的工具。
不要使用原博里的boot2docker windows了,网上搜的根本下不动。

2.记得要进入你的BIOS里打开那个虚拟化的东东,Intel是叫什么hyper-v吧,AMD是叫SVM那个,跟电脑的型号有关,可能有不同叫法,总之改成enable就行了,要不然你根本安装不了docker。

额,首先,还是讲讲docker吧,我只写自己的理解,什么docker是进程间的隔离,一般的虚拟机是在OS之上利用虚拟机管理程序虚拟出一个完整的操作系统就不说了,给两个链接:
docker与虚拟机性能比较
How is Docker different from a normal virtual machine?
docker首先要区分两个概念,一个是容器(container:就是用~>docker ps查询出来的那些),一个是镜像(images:用docker images可以查询出来)。有人说这就像是类和实例之间的区别,images是类,container是实例,也挺形象的。
但如果按照本意理解,我觉得images就是一个模板然后根据这个模板创建不同的container,因为是模板所以是”死的”,在运行的永远是”活的”container。

1)、所以每次我们在进入(进入一个运行的container用:~>docker exec -it container_id /bin/bash)container修改后

2)、然后退出时(退出用:~>exit)

3)、最好保存为一个images(先用~>docker ps查看刚才进入的容器id,再用~>docker commit container_id image_name(自己想的images名字))

这样就可以利用这个image还原出上次的环境,就不用重复上次的步骤了。

1坑一
从这引出第一个坑,那就是不用的image可不可以删除呢?原博说可以,其实没有说清楚,也可以说原博说的有问题。
答案是:有继承关系的不可以,没有继承关系的可以。
就哪原博来说吧,首先创建了一个ubuntu14镜像,然后用这个image创建一个容器,在里面进行ssh的配置,之后退出,commit为一个新的image,命名为ubuntu:ssh。那这个ubuntu14就不可以被删除,除非先删除ubuntu:ssh这个。依次类推。但我们可以删除tag,这样使用

~>docker images

时就不会显示。除非用

~>docker images -a

这会查询出所有的images,包括tag为none的。但就算这样,你依然删不掉这个imges,所以不用再搜怎么删掉tag为none的image了,不过“坏的”none倒是可以用网上的方法删掉。

坑二
安装后的(即make后)/usr/local/redis1/bin/文件夹下是没有redis.conf文件的,要到解压文件里拷一份过来,或者懂脚本的话知道./redis-server 后的那个redis.conf其实是个参数,所以你也可以直接指定在/opt/redis-stable文件夹下的那个redis.conf文件。但是要注意按他那样修改文件是不够的,还要注释掉一句 bind 127.0.0.1 ::1,后面你就知道了,不注释掉这一句你根本连不上,哦,是假的连上了,因为你ping的时候会报错,会说你的redis运行在protected mode上,之后再输flushall就会说报在驱动器上插入软盘这样的鬼问题。

坑三
折腾了最久的就是redis启动了咩有啊,启动了怎么连不上啊。
首先判断redis server是否启动,用下面这句:

ps -ef|grep redis

这里写图片描述
注意,一定要出现./redis-server *:6379这句才算启动成功,只出现下面的那句说明没有启动成功。这里顺便说一句,如果你没有注释掉bind 127.0.0.1这句,就是绑定当前主机,那6379前面的就会是127.0.0.1,这样你用win下的命令行来连的话就连不上。
这里说的是用

./redis-server redis.conf

这句来连时判断redis是否启动的方法,因为我们在redis.conf里设置了使用守护进程来开启redis,所以就会在后台运行redis,所以要这样来判断。
但如果使用

./redis-server 

这句来开启redis,那直接看有没有启动画面就行了。就是那个一层一层的东西。

终极神坑
就是用这句话始终启动不了redis-server。

./redis-server redis.conf

而且又不报错,压根就不知道怎么解决。这时,不要怀疑,一定是redis.conf文件里的内容有错。不要想着改写法或者把redis.conf放到其他地方了。
我的就是redis.conf里的这句错了

dir "/usr/local/redis1/data"

没有在redis1下创建一个data文件夹。启动脚本是不会为你mkdir文件夹的这点要注意。其实原博中有教,但可能也是修改后没有保存为新的imges的原因,所以第二天再开的时候没考虑到,压根就不可能想到嘛。。。
但也因祸德芙。知道了可以查看log文件查找错误。
redis.conf里配置的位置

logfile "/var/log/redis/redis1.log"
35:C 18 Mar 10:04:51.373 # Can't chdir to '/usr/local/redis/data': No such file or directory
39:C 18 Mar 10:21:05.934 # Can't chdir to '/usr/local/redis/data': No such file or directory
46:C 18 Mar 10:29:00.054 # Can't chdir to '/usr/local/redis/data': No such file or directory
48:C 18 Mar 10:37:52.435 # Can't chdir to '/usr/local/redis/data': No such file or directory
53:C 18 Mar 10:42:10.195 # Can't chdir to '/usr/local/redis/data': No such file or directory
56:C 18 Mar 10:42:44.306 # Can't chdir to '/usr/local/redis/data': No such file or directory
30:C 18 Mar 23:35:22.588 # Can't chdir to '/usr/local/redis/data': No such file or directory
54:C 19 Mar 00:09:24.329 # Can't chdir to '/usr/local/redis/data': No such file or directory
60:C 19 Mar 00:11:26.290 # Can't chdir to '/usr/local/redis/data': No such file or directory
61:C 19 Mar 00:11:32.107 # Can't chdir to '/usr/local/redis/data': No such file or directory
63:C 19 Mar 00:13:55.100 # Can't chdir to '/usr/local/redis/data': No such file or directory
64:C 19 Mar 00:14:06.935 # Can't chdir to '/usr/local/redis/data': No such file or directory
74:C 19 Mar 01:03:38.161 # Can't chdir to '/usr/local/redis/data': No such file or directory
75:C 19 Mar 01:04:36.938 # Can't chdir to '/usr/local/redis/data': No such file or directory
78:C 19 Mar 01:05:34.192 # Can't chdir to '/usr/local/redis/data': No such file or directory
79:C 19 Mar 01:06:48.317 # Can't chdir to '/usr/local/redis/data': No such file or directory
83:C 19 Mar 01:07:15.929 # Can't chdir to '/usr/local/redis/data': No such file or directory
84:C 19 Mar 01:07:42.098 # Can't chdir to '/usr/local/redis/data': No such file or directory
85:C 19 Mar 01:09:24.167 # Can't chdir to '/usr/local/redis/data': No such file or directory
87:C 19 Mar 01:09:42.920 # Can't chdir to '/usr/local/redis/data': No such file or directory
95:C 19 Mar 01:11:27.031 # Can't chdir to '/usr/local/redis/data': No such file or directory
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.8 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 7001
 |    `-._   `._    /     _.-'    |     PID: 100
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

100:M 19 Mar 01:18:27.712 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
100:M 19 Mar 01:18:27.713 # Server started, Redis version 3.2.8
100:M 19 Mar 01:18:27.713 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
100:M 19 Mar 01:18:27.713 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
100:M 19 Mar 01:18:27.713 * The server is now ready to accept connections on port 7001
                _._                                                  

看这满屏的 Can’t chdir to ‘/usr/local/redis/data’: No such file or directory,瞬间明白redis.conf出错的原因。出现其它问题也可以查看日志文件来找出问题的源头。

其实还有遇到挺多小问题的,就不一一列举了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值