您的位置:首页 > 运维架构 > Docker

docker安装以及redis在docker中的应用实例

2016-02-24 09:32 716 查看
由于不好上传文章,我这里直接上传到资源里面,里面pdf进行了详解:http://download.csdn.net/detail/xyblog/9441287

环境要求:ubuntu 15.10

 

一、docker环境搭建

sudo apt-get update

sudo apt-get install apt-transport-httpsca-certificates

 

设置key

sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80--recv-keys 58118E89F3A912897C070ADBF76221572C52609D

 

安装vim

sudo apt-get install vim

sudo vim /etc/apt/sources.list

 

添加源

deb https://apt.dockerproject.org/repoubuntu-wily main

 

更新

sudo apt-get update

 

安装

sudo apt-get install docker-engine

 

二、安装image

#需要漫长的等待,如果出错了,或者卡死需要执行 sudo service docker restart来重置,然后继续执行下面的拉去命令,直到成功。

sudo docker pull ubuntu:15.10  

 

安装完毕后,查看镜像:

sudo docker images   #显示所有的images

画红线的标示了:

REPOSITORY 表示当前仓库名字

TAG 标示image tag

注意:镜像名字:TAG     #中间用冒号连接 表示了唯一的一个镜像,如果没有指定 :TAG 只用了  镜像名字   则标示  镜像名字:last   这个镜像。

 

运行镜像:

sudo docker run –t –i ubuntu:15.10/bin/bash   #-t标示模拟终端  -i标示在当前终端输入输出  ubuntu:15.10 标志在ubuntu仓库里面查找15.10标志的image,   最后面 /bin/bash标示执行 这个命令,这里就是获取到一个shell。

修改成自己需要的image:

添加 curl

apt-get update

apt-get install curl

输入 exit退出容器

 

查看刚才运行的容器:

sudo docker ps –a     #显示出来所有容器,

可以看到我们刚才输入exit退出了容器,  那么响应的容器也停止运行了,可以到 STATUS 是 Exited 状态,我们需要现在需要把当前容器保存成为我们自己的容器:

得到容器ID: ca775d29a276

也可以用: sudo docker ps –q 获取到容器id

 

#提交通过容器建立镜像  local/baseimage:1   这里面local/baseimage标示 仓库名  1是TAG名字,  -m标示 消息,   -a 标示作者  

sudo docker –commit  –m “add curl” –a “guhui”ca775d29a276 –t local/baseimage:1

然后用 sudo docker images查看刚才建立的镜像

 

一、创建image

刚才已经知道如何建立自己的镜像了,现在用更加好和官方推荐的方式制作咱们的redis image。

 

建立一个目录 : mkdir redis && cd redis

咱们新建一个 dockerfile:

touch Dockerfile  

vim Dockerfile

 

输入下面的内容:

 

FROM local/baseimage:1

 

RUN sed -i"s/archive\.ubuntu\.com/mirrors\.163\.com/g" /etc/apt/sources.list

 

RUN apt-get update

 

RUN curl –sSL http://download.redis.io/releases/redis-3.0.7.tar.gz-o redis.tar.gz

 

RUN tar –zxf redis.tar.gz –C/usr/src/redis   --strip-components=1

 

RUN apt-get install –y gcc libc6-dev make

 

RUN make –C /usr/src/redis

 

RUN make –C /usr/src/redis install

 

RUN rm redis.tar.gz

 

RUN rm –r /usr/src/redis

 

EXPOSE 6379

 

CMD [“redis-server”]

 

 

 

 

说明:docker核心组件有 image、容器、registries,image是只读的一个模板,每次commit或者build其实是在image上面添加一层一层的层;registries就是镜像hub,官方的https://hub.docker.com ,可以在本地搭建自己的hub,在hub里存放了很多的镜像,我们最开始 sudo docker pull ubuntu:15.10就是从官方的hub上面拉去的iamge;
容器这里是一个动态的概念,容器可以运行,停止,重启,删除等,容器通过commit可以变成一个 image。

RUN #在dockerfile中表示在image中执行后面的命令,run只在build的时候才有用。

 

然后保存: wq

 

然后可以通过 dockerfile来建立redis image了:

执行:

sudo docker build –t local/redis:1 .       #最后面还有一个点号 不要忘了

 

如果中途出错了,或者build失败,会有临时的容器和空名的image,你需要删除。

删除容器:  sudo docker rm 容器ID

删除image: sudo docker rmi 镜像ID              

 

建立成功后会如下所示:

 

一、运行

在命令行输入 sudo docker run –t –i local/redis:1 显示如下所示,就说明运行成功了。

根据指定的conf来运行redis:

这里有2种方法:第一种是再新建一个Dockerfile来搞:

 

FROM local/redis:1

COPY /home/guhui/redis.conf/usr/local/redis.conf

EXPOSE 6379

 

CMD [“redis-server”, “/usr/local/redis.conf”]

 

这样也是可以运行的,运行命令:

sudo docker run –t –i image

 

这里用第二种方法:

直接运行:

sudo docker run –v $(pwd)/redis.conf:/usr/local/redis.conf–d local/redis:1 redis-server /usr/local/redis.conf

运行后输出一窜字符串,这个字符串是容器的容器id,咱们看下:

这里显示的容器id是缩减版的

 

查看容器运行日志:

一、主从配置配置:

 

先运行主:

sudo docker run –p 7001:6379 –name redis1 –v$(pwd)/redis.conf:/usr/local/redis.conf –d local/redis:1 redis-server/usr/local/redis.conf

说明:run标示运行一个容器–p标示把容器内的端口6379映射到容器外机器的7001端口,如果使用大写的-P就程序随机指定一个端口,   --name标示指定容器名称, -v 标示把本地某个文件挂载到容器内部, -d标示在后台运行容器  redis-server/usr/local/redis.conf标示运行redis 并且指定配置文件。

 

查看运行状况:最后一个NAMES 标志咱指定的名称

查找正在运行的第一个容器:

如果n=-1标示查询所有

 

获取容器的ip地址:

sudo docker inspect –f ‘{{range.NetworkSetttings.Networks’}}{{.IPAddress}}{{end}}’$(sudo docker ps –q –n=1) 

inspect是查询容器信息的; $(sudodocker ps –q n=1)标示查询到第一个运行的容器id。

 

模糊查询: sudo docker inspect $(sudo docker ps –q –n=1) | grep IPA

咱们再运行一个从:

sudo docker run –p 7002:6379 –name redis2 –v$(pwd)/redis.conf:/usr/local/redis.conf –d local/redis:1 redis-server /usr/local/redis.conf

 

只修改了映射端口为7002, name改为 redis2

咱们查看容器:

设置主从:

先查看从的ip:

sudo docker inspect –f ‘{{range.NetworkSetttings.Networks’}}{{.IPAddress}}{{end}}’$(sudo docker ps –q –n=1) 

连接到从容器:

sudo docker run –t –i local/redis:1redis-cli –h 172.17.0.3 –p 6379

通过redis-cli客户端来连接

 

info 查看当前从信息:

可以看到是主的,咱现在设置当前redis为从

在查看信息:

可以看到当前客户端 redis2(172.17.0.3)是从,并且已经把redis1(172.17.0.2)作为主了。

当只有一个从的时候,当前从是只读的:

咱们在从上执行 set a 123 可以看出执行不力

当然,咱可以添加一个哨兵来监控此主从:

哨兵配置文档:

哨兵端口默认是: 26379

sentinel monitor master1 172.17.0.2 6379 1 设置主为172.17.0.2

sentinel down-after-milliseconds master13000 #和主交互3秒超时了,主动认为主down了

sentinel failover-timeout master1 5000 #当failover时间内5秒仍然没有传递failover操作就认为failover失败了。

 

运行哨兵:

查看:

获取到哨兵的ip地址:

查看哨兵日志:

从这里咱就可以看出来:

获取到了一个主 172.17.0.2

从是 172.17.0.3

 

 

咱们实际连接到哨兵查看下:

可以看到主name master1 172.17.0.2  都是正确的

咱们进入主看看:

执行命令:

然后咱们到从去执行:

 

咱们现在模拟主挂掉:

执行stop命令停止容器

咱们在从里执行info查看:

可以看出来,从已经变成主了,连接的从是0,咱们到 sentinel客户端去看看:

 

可以看出来,以前的从变成主了,

咱们启动停止的以前的主:

sudo docker start 容器id:

咱们查看现在的主;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker redis