在windows环境里,用Docker搭建Redis开发环境(新书第一个章节)
大家都知道高并发分布式组件的重要性,而且如果要进大厂,这些技术不可或缺。但这些技术的学习难点在于,大多数项目里的分布式组件,都是搭建在Linux系统上,在自己的windows机器上很难搭建开发环境,如果无法搭建开发环境,就无法实际操练,而单靠背理论题,是无法通过面试的。
比如搭建Redis环境,或许可以在windows上下载个版本,但这个版本不是最新的,而且如果要搭建集群,可能还只能到Linux环境上。对此,可以先在Windows机器上安装Docker,然后在linux容器里安装Redis。这样一旦引入Docker,不仅能比较容易地搭建Redis集群,而且还能在Windows上搭建其它分布式组件的环境。
在本文里,首先将介绍Docker的相关技能,然后再给搭建基于Docker的Redis开发环境的步骤。
1 了解必要的Docker技能
在Docker里,容器、镜像和仓库是三个比较重要的概念。其中镜像(image)是一个静态的概念,比如可以把一个最小化的linux操作系统打包成一个镜像然后再传入仓库,也可以先在linux 上安装Redis,再把整合这两者的二进制流打包成一个镜像。如果在本机安装好Docker后,本地操作系统、Docker以及容器的相互关系如下图所示。其中最底层的是本机操作系统,比如Windows,在之上是能运行容器的Docker。

在实际项目里中,会用Docker命令,从仓库中下载镜像,比如是linux+Redos镜像,然后再能通过命令启动镜像,这样就可以使用镜像里的Redis等应用了。在下文给出具体的操作演示前,这里先总结下Docker的相关概念。
- 仓库其实是个代码中心,可以是在本地,也可以设置在远端,在其中能存储镜像,在本书里,一般是从默认的远端仓库里下载镜像。
- 镜像是静态,有些类似Java里的类,而容器是镜像运行时的实体,也可以理解成由类实例化而成的对象。而通过Docker加容器的方式,可以快速地在Windows平台上搭建基于Linux的Redis环境。
- 在开发应用意义上讲的Docker,一般包含Docker软件和Docker命令。在后文里,不仅会给出下载安装Docker的步骤,更会讲述平时项目里经常用到的能下载镜像和启动容器等的Docker命令。通过此类命令,大家能对Redis进行必要的开发、配置和部署动作。
如果要在Windows上安装Docker, 可以到官网www.docker.com上去下载对应于Windows的Docker安装程序,下载完成后按步骤依次按提示点击,即可完成安装。完成后,能在任务栏里看到Docker图标,鼠标移上去后,能看到类似于“Docker正在运行”的提示。再进入到命令窗口,输入docker version命令,如果能正确地看到输出的版本信息,就说明Docker已经成功地在本地安装成功。
2 Docker的相关命令
这里将给出比较常用Docker命令,打开命令行窗口,首先运行docker images来看下当前本机有哪些镜像。由于此时刚安装好Docker,还没下载镜像,所以本地没有任何镜像。可以通过docker pull命令来下载镜像,比如可以用docker pull ubuntu:latest,去默认的远端docker仓库下载最新的ubuntu镜像,而ubuntu 是基于Debian的Linux 操作系统,这里pull命令后ubuntu:latest,表示去下载最新版本的ubuntu。下载完成后,再运行docker iamges命令,就能看到如下图所示的效果。

其中REPOSITORY和TAG字段分别表示镜像的名字和标签,而IMAGE ID则表示镜像的ID,CREATED和SIZE则表示该镜像的创建时间和大小。一般来说,可以通过REPOSITORY:TAG或IMAGE ID,能唯一标识某个镜像。
而通过docker rmi命令能删除本地镜像,具体语法是docker rmi 镜像名:标签,或者是docker rmi 镜像ID。比如这里能通过docker rmi ubuntu:latest或docker rmi 1d622ef86b13,能删除刚下载的ubuntu:latest镜像。
2.1 Docker容器相关的命令
镜像和容器是类似于类和对象的关系,通过实例化类,能得到对象,而通过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,就能确认该容器已经被删除。
2.2 用pull命令下载最新Redis镜像
可以用“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端口对外提供服务。
2.3 通过exec命令进入Redis容器
通过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容器。
2.4 停止、重启和删除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命令查看所有状态的容器时,就无法再看到该容器了。
3 总结容器和Redis的相关命令
在上文里,给出了针对容器和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命令。
4 求赞和版本说明
通过上文的总结,大家能系统性地理解相关命令。虽然说,用Docker搭建基于Linux的Redis的开发环境要比直接安装基于Windows的Redis环境要麻烦,但一方面,在Linux环境上能安装最新版的Redis,而在Windows上则只能安装比较老的版本,而且在大多数项目里,Redis都是配置在Linux上,所以,大家在安装Redis环境上付出的努力是值得的。
本文是从我新书第一个章节里摘录出来的,如果大家感觉可以,都请点赞,如果有什么项目,也可以留下评论。
本书谢绝任何转载
在windows环境里,用Docker搭建Redis开发环境(新书第一个章节)的更多相关文章
- Docker最全教程之使用Docker搭建Java开发环境(十七)
前言 Java是一门面向对象的优秀编程语言,市场占有率极高,但是在容器化实践过程中,发现官方支持并不友好,同时与其他编程语言的基础镜像相比(具体见各语言镜像比较),确实是非常臃肿. 本篇仅作探索,希望 ...
- Windows系统 为 QT5软件 搭建 OpenCV2 开发环境
Windows系统 为 QT5软件 搭建 OpenCV2 开发环境 我们的电脑系统:Windows 10 64位 Qt5 软件:Qt 5. 7. 0 OpenCV2 版本:OpenCV2.4.10 1 ...
- Windows下visual studio code搭建golang开发环境
Windows下visual studio code搭建golang开发环境 序幕 其实环境搭建没什么难的,但是遇到一些问题,主要是有些网站资源访问不了(如:golang.org),导致一些包无法安装 ...
- windows下VisualStudio和QtCreator搭建Qt开发环境
一.简介 集成开发平台IDE都有各自的长处,编写Qt程序可根据自己的喜好来选择相应的IDE.下述文章都是装载博友的文章,其中有很多细节还得自己调整. 二.详解 1.VisualStudio搭建Qt开发 ...
- 怎么使用Docker搭建PHP开发环境呢?
在Docker流行之前,要搭建开发环境通常有两种选择:一种是使用wamp.xampp.mamp等集成开发环境安装包,另外一种就是使用普通虚拟机来安装linux服务器,然后通过下载一键安装包(如:lnm ...
- 使用Docker搭建LNMP开发环境
1.什么是Docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技 ...
- Swoft 新手向教程 - 通过 Docker 搭建一个开发环境
本系列文章将从使用层面介绍 Swoft 框架的使用及业务开发,面向初中级的 PHPer Swoft首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈组件化框架,内置协程网络服务器及常用的 ...
- Windows10系统下使用Docker搭建ClickHouse开发环境
前提 随着现在业务开展,几个业务系统的数据量开始急剧膨胀.之前使用了关系型数据库MySQL进行了一次数据仓库的建模,发现了数据量上来后,大量的JOIN操作在提高了云MySQL的配置后依然有点吃不消,加 ...
- Windows 8(64位)如何搭建 Android 开发环境与真机测试(转)
可以参考http://wenku.baidu.com/link?url=ghU6IFS1WJXLFKfM_0efv9YQEnMDBrdi9CXwirSs5IOLLeUfdIOh8OOVv0DX89Lt ...
随机推荐
- uni-app同步缓存值 设置 读取 删除
A页面 <view class="go-to-tab" @tap="gotologin"> 去login页面 </view> msg : ...
- CSS也能计算:calc
举个例子ul li适配屏幕,如果加个border:1px,不用border-content得情况下,每个li多加了2px: <ul><li></li><li& ...
- d3限制范围缩放和平移升级到版本4
感谢您提供帮助以更新下面的代码以在版本4中工作.我已将zoom.behaviour更改为d3.zoom,但我不清楚所需的其他更改.看起来比v3还要复杂! <!DOCTYPE html> & ...
- 计算机系统基础学习笔记(1)-基本GCC,objdump,GBD命令的使用
基本GCC命令的使用 GCC是一套由GNU项目开发的编程语言编译器,可处理C语言. C++.Fortran.Pascal.Objective-C.Java等等.GCC通常是 跨平台软件的编译器首选.g ...
- mysql创建存储过程及调用
创建存储过程简单示例: DELIMITER //CREATE PROCEDURE ccgc()BEGINSELECT * FROM TEXT;SELECT * FROM s_user;END//DEL ...
- 并发工具——CyclicBarrier
本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 CyclicBarrier简介 CyclicBarrie ...
- .NET中 kafka消息队列、环境搭建与使用
前面几篇文章中讲了一些关于消息队列的知识,就每中消息队列中间件,我们并没有做详细的讲解,那么,今天我们就来详细的讲解一下消息队列之一kafka的一些基本的使用与操作. 一.kafka介绍 kafka: ...
- 【题解】P3349 [ZJOI2016]小星星 - 子集dp - 容斥
P3349 [ZJOI2016]小星星 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 小 \(Y\) 是一个心灵手巧 ...
- 优质中文NLP资源集合,做项目一定用得到!
今天要给大家在推荐 Github 上一个优质的中文 NLP 工具和资源集合项目——funNLP,已经获得了 5.3k Stars,1k+ Forks. 项目作者 杨洋,一枚水博&互联网民工,目 ...
- 常见分布式全局唯一ID生成策略
全局唯一的 ID 几乎是所有系统都会遇到的刚需.这个 id 在搜索, 存储数据, 加快检索速度 等等很多方面都有着重要的意义.工业上有多种策略来获取这个全局唯一的id,针对常见的几种场景,我在这里进行 ...