你们都知道高并发分布式组件的重要性,并且若是要进大厂,这些技术不可或缺。但这些技术的学习难点在于,大多数项目里的分布式组件,都是搭建在Linux系统上,在本身的windows机器上很难搭建开发环境,若是没法搭建开发环境,就没法实际操练,而单靠背理论题,是没法经过面试的。linux
好比搭建Redis环境,或许能够在windows上下载个版本,但这个版本不是最新的,并且若是要搭建集群,可能还只能到Linux环境上。对此,能够先在Windows机器上安装Docker,而后在linux容器里安装Redis。这样一旦引入Docker,不只能比较容易地搭建Redis集群,并且还能在Windows上搭建其它分布式组件的环境。面试
在本文里,首先将介绍Docker的相关技能,而后再给搭建基于Docker的Redis开发环境的步骤。 redis
在Docker里,容器、镜像和仓库是三个比较重要的概念。其中镜像(image)是一个静态的概念,好比能够把一个最小化的linux操做系统打包成一个镜像而后再传入仓库,也能够先在linux 上安装Redis,再把整合这二者的二进制流打包成一个镜像。若是在本机安装好Docker后,本地操做系统、Docker以及容器的相互关系以下图所示。其中最底层的是本机操做系统,好比Windows,在之上是能运行容器的Docker。 docker
在实际项目里中,会用Docker命令,从仓库中下载镜像,好比是linux+Redos镜像,而后再能经过命令启动镜像,这样就可使用镜像里的Redis等应用了。在下文给出具体的操做演示前,这里先总结下Docker的相关概念。shell
若是要在Windows上安装Docker, 能够到官网www.docker.com上去下载对应于Windows的Docker安装程序,下载完成后按步骤依次按提示点击,便可完成安装。完成后,能在任务栏里看到Docker图标,鼠标移上去后,能看到相似于“Docker正在运行”的提示。再进入到命令窗口,输入docker version命令,若是能正确地看到输出的版本信息,就说明Docker已经成功地在本地安装成功。 ubuntu
这里将给出比较经常使用Docker命令,打开命令行窗口,首先运行docker images来看下当前本机有哪些镜像。因为此时刚安装好Docker,还没下载镜像,因此本地没有任何镜像。能够经过docker pull命令来下载镜像,好比能够用docker pull ubuntu:latest,去默认的远端docker仓库下载最新的ubuntu镜像,而ubuntu 是基于Debian的Linux 操做系统,这里pull命令后ubuntu:latest,表示去下载最新版本的ubuntu。下载完成后,再运行docker iamges命令,就能看到以下图所示的效果。 windows
其中REPOSITORY和TAG字段分别表示镜像的名字和标签,而IMAGE ID则表示镜像的ID,CREATED和SIZE则表示该镜像的建立时间和大小。通常来讲,能够经过REPOSITORY:TAG或IMAGE ID,能惟一标识某个镜像。bash
而经过docker rmi命令能删除本地镜像,具体语法是docker rmi 镜像名:标签,或者是docker rmi 镜像ID。好比这里能经过docker rmi ubuntu:latest或docker rmi 1d622ef86b13,能删除刚下载的ubuntu:latest镜像。服务器
镜像和容器是相似于类和对象的关系,经过实例化类,能获得对象,而经过run命令,则能运行镜像生成容器。好比经过前文的docker pull命令下载好ubuntu镜像后,就能够经过以下的run命令来启动该镜像。并发
1 docker run -it ubuntu:latest /bin/bash
其中经过ubuntu:latest,能指定待运行的镜像,-it表示在终端交互式操做,而/bin/bash则表示容器启动后须要执行的命令,这里是启动shell。运行上述命令后,就能在该容器里运行基于linux的命令,好比ls或pwd,运行完命令后,能够经过exit从容器交互窗口里退出来。相关的操做的效果以下图所示。
而经过docker ps命令,能看到当前全部的容器,若是要展现全部的容器,则能够加入-a参数。运行docker ps -a后,能看到以下图所示的结果。
其中STATUS表示当前容器的状态,这里是Exited,表示已退出,并且从中还能看到容器的ID以及该容器所对应的镜像。
而经过docker rm 容器ID命令,能删除指定的容器,好比能经过docker rm bc8d0ea9a1a3命令删除刚才经过run命令建立的容器,删除后再运行docker ps -a,就能确认该容器已经被删除。
能够用“docker pull redis”命令,下载最新版本的redis镜像,这里也能够用“docker pull redis:标签”的命令,下载指定版本的redis,若是不指定,则会用默认的标签latest去下载最新版本的redis镜像。运行该命令后,能看到以下图所示的效果图,从中能看到,已经成功下载了最新版本redis镜像。
随后能够用以下的run命令来运行Redis容器。
1 docker run -itd --name myFirstRedis -p 6379:6379 redis:latest
这里的-it表示在终端交互式操做,而d则表示在后台运行。经过—name能指定该容器的名字,而经过-p参数,指定了容器的6379端口映射到宿主机(即运行Docker的机器)6379端口,这样在容器外部就能以宿主机ip:6379的方式访问Redis服务,最后的redis:latest参数,则指定根据该镜像启动容器。运行完上述run命令后,再执行docker ps命令,能看到以下图所示的结果。
从中能看到,名为myFirstRedis的容器处于Up状态,而且是经过6379端口对外提供服务。
经过run命令,能在后台启动Redis容器,此时能够经过以下的exec命令,进入到Redis容器,进入容器后,就能执行Redis的相关操做。
1 docker exec -it myFirstRedis /bin/bash
docker exec 表示在运行的容器中执行命令, 其中myFirstRedis参数表示在哪一个容器里执行命令,-it表示以终端交互的方式执行命令,而/bin/bash则表示须要指定的命令。执行上述exec命令后,就能看到以下图所示的效果,这说明已经进入了名为myFirstRedis的容器,随后在命令窗口里能够继续输入Redis命令。
在上图所示的界面里,能够继续输入redis-cli命令,链接该容器里的Redis服务器,随后能够经过set val 1命令,建立一个值的1的val变量,建立后再能够经过get val来获取val变量的值,具体效果以下图所示。
这里提到的redis-cli等命令的含义,在后文里会详细说明,但只要若是能成功地运行Redis相关命令并看到对应的结果,就能说明基于Docker的Redis开发环境已经成功地安装到本机里。随后若是要退到Windows命令行,则须要连续两次输入exit,其中经过第一个exit命令,能退出用redis-cli进入到的Redis运行窗口,而经过第二个命令,能退出因docker exec命令而进入到的Redis容器。
因为本书所介绍的Redis的开发和运行环境是基于Docker的,当Redis容器启动后,在修改容器配置等操做后,可能须要重启容器,而且在一些场景里,还须要中止并删除过时的Redis容器,因此在这里就将给出相关的操做步骤。
当运行docker ps,发现名为myFirstRedis的Redis容器处于Up(即运行中)状态时,能够经过docker stop myFirstRedis命令中止该容器,其中myFirstRedis是待中止的容器名。请注意这里中止的是容器,而不是Redis服务,运行后再经过docker ps,就没法再看到myFirstRedis,应为该命令只返回处于Up状态的容器,此时须要用docker ps -a命令,查看全部容器时,才能看到以下图所示的效果,从中能看到,myFirstRedis容器已经处于Exited(即退出)状态。
若是要再启动该容器,能够用docker start myFirstRedis或docker restart myFirstRedis命令,这两个命令的参数都是待启动的容器名。这两个命令的差异是,docker start会挂载容器所关联的文件系统,而docker restart不会。因此在须要重启容器时,建议先运行docker stop命令,再运行docker start命令。
若是当Redis等容器里的配置或数据过于老旧时,能够经过docker rm命令删除该容器,具体语法是docker rm 容器名,但在删除前,首先要确保该容器处于Exited状态,不然删除时会出错。
好比要删除名为myFirstRedis的Redis容器,首先要用docker stop myFirstRedis命令确保该容器处于Exited状态,随后再用docker rm myFirstRedis命令删除,删除完成后再运行docker ps -a命令查看全部状态的容器时,就没法再看到该容器了。
在上文里,给出了针对容器和Redis的若干命令,为了让你们在学习过程当中不产生混淆,这里将根据流程,总结下相关的命令。
第一, 在安装完Docker软件后,能够在命令行里输入docker pull redis命令去下载最新的Redis镜像,下载完成后,能经过docker images命令来确认镜像。
第二, 能够用docker run -itd --name myFirstRedis -p 6379:6379 redis:latest命令,根据下载的redis:latest镜像建立名为myFirstRedis容器。建立完成后,能经过docker ps -a命令来查看对应的容器。
第三, 若是建立前已经有名为myFirstRedis的容器,那么若是再建立同名的容器,就会出现问题,这时能够先用docker stop myFirstRedis命令确保该容器处于Exited状态,并经过docker rm myFirstRedis命令删除该容器。
第四, 在建立并启动myFirstRedis容器后,则能够经过docker exec -it myFirstRedis /bin/bash命令进入到myFirstRedis容器,随后能够经过redis-cli命令,建立一个连到Redis服务器的客户端,并经过该客户端输入各类Redis命令。
第五, 若是须要从新启动myFirstRedis容器,能够先经过docker stop myFirstRedis命令中止该容器,再经过docker start myFirstRedis命令启动它。
第六, 若是要中止Redis服务器,则能够先经过redis-cli命令链接到服务器,再输入shutdown命令,或者在myFirstRedis容器的命令行里直接输入exit命令。
经过上文的总结,你们能系统性地理解相关命令。虽说,用Docker搭建基于Linux的Redis的开发环境要比直接安装基于Windows的Redis环境要麻烦,但一方面,在Linux环境上能安装最新版的Redis,而在Windows上则只能安装比较老的版本,并且在大多数项目里,Redis都是配置在Linux上,因此,你们在安装Redis环境上付出的努力是值得的。
本文是从我新书第一个章节里摘录出来的,若是你们感受能够,都请点赞,若是有什么项目,也能够留下评论。
本书谢绝任何转载