本篇内容主要讲解“Docker环境怎么构建redis单机容器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker环境怎么构建redis单机容器”吧!
1 背景介绍
用传统部署搭建一套redis环境,中间会消耗太多的重复的工作,导致部署效率非常低。例如:申请虚拟机,安装操作系统,软件包依赖安装和redis应用部署,这个过程中间需要花费不少时间,同时在安装的过程中出现问题也需要花费一些时间去处理。然后传统方式部署方式可移植性相当差。要想将现有redis迁移到新主机,可不是那么容易的事情,可能最简单的方式是tar包过去,但是新主机还是需要安装redis相关的依赖包上去,还需要花些时间去调试redis,中间反反复复的重复工作太浪费时间了。
为了打破传统部署模式带来的效率低下问题,我们采用docker容器部署模式,将重复的工作精简化,也为了方便运维工程师更加快速搭建一套redis环境,redis容器化后能够解决安装过程中出现的重复性繁琐的工作。最终以镜像的存储在镜像仓库中。只要有需求用到redis服务,可以在任何安装有docker软件的主机上面运行redis容器,即可达到需求。Docker容器化后的镜像即可实现即开即用的效果。
2 镜像打包流程
Ø Linux编译环境:准备一台能上外网的linux环境,并安装好docker运行环境。
Ø 基础镜像:在构建应用镜像前置条件,需要准备一套干净的centos基础镜像,然后在这个基础镜像上面去部署redis软件。
Ø 配置标准化:按dockerfile的命令格式来编写,将redis软件安装与redis配置步骤写入到dockerfile文件中。然后准备好运行环境需要的配置文件和对应的运行环境启动脚本,方便在构建应用镜像时将这些文件打包到镜像中。
Ø 构建应用镜像:通过编写dockerfile文件在基础操作系统镜像里面将所要运行的所依赖的软件包和redis软件部署到镜像中,最后通过docker命令将其打成一个新的完整镜像包,下次要用redis就直接下载镜像部署。
Ø启动容器:docker命令启动容器的过程中会将redis服务启动。
在Docker中,构建一个自定义镜像共有两种方法,一是通过commit指令构建,二是通过Dockerfile文件构建。这里我们推荐第二种方法用dockerfile文件构建redis镜像。
3 Dockerfile基本框架
Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。Docker程序将读取Dockerfile,根据指令生成定制的image。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是怎么产生的。有了Dockerfile,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻烦。
Dockerfile 的内容分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
操作系统 | FROM | 按需求选择不同类型的基础操作系统镜像 |
常用软件 | ADD | 选择运行所需要的常用软件,如PHP、NGINX,自动设置相应的运行变量 |
指定用户 | USER | 设置启动容器的用户,默认是root用户 |
执行安装 | RUN | 执行针对需求包编写安装脚本 |
切换目录 | WORKDIR | 可以多次切换(相当于cd命令) |
环境变量 | ENV | 镜像中设置环境变量 |
端口映射 | EXPOSE | 该指令会将容器中的端口映射成宿主机器中的某个端口 |
存储使用 | VOLUMN | 按需定义外挂目录(IO要求高,持久化,宿主机间共享等) |
启动运行 | ENTRYPOINT | 设置指令,指定容器启动时执行的命令,可以多次设置,但是只有最后一个有效 |
启动运行 | CMD | 容器启动时需要执行的脚本 |
4 Redis容器化过程
4.1 Linux编译环境
准备一台centos7虚拟机,并在这台主机上面安装Docker软件,这里以docker版本1.13.1为例,来介绍如何安装Docker软件步骤。
#下载docker-engine wget https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.13.1-1.el7.centos.x86_64.rpm #下载docker-engine-selinux wget https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.13.1-1.el7.centos.noarch.rpm #安装docker软件依赖文件 yum install -y libtool-ltdl policycoreutils-python #先安装docker-engine-selinux,再安装docker-engine-selinux yum localinstall docker-engine-selinux-1.13.1-1.el7.centos.noarch.rpm -y yum localinstall docker-engine-1.13.1-1.el7.centos.x86_64.rpm –y #重启docker服务 systemctl start docker systemctl enable docker |
下面代表docker软件已经安装成功
4.2 获取基础镜像
可以直接在Linux编译环境下载Centos7基础镜像,要求编译环境是要能上外网连上hub.docker.com外网镜像仓库来下载镜像,下面输入docker search centos可以看到外网docker镜像仓库中有很多centos镜像。可以通过docker pull openshift/base-centos7命令来下载centos基础镜像。
用docker pull已经将镜像下载到本地linux主机上面,接下来镜检查openshift/base-centos7镜像完整性,只要docker run命令来启动这个镜像,我们看到这个容器已经正常启起来。验证表明这个镜像是正常的。
下面是docker日常用到的一些简单命令:
下载centos镜像 docker pull openshift/base-centos7 查看镜像 docker images 删除镜像 Docker rmi <IMAGE ID > 运行docker容器 docker run -itd openshift/base-centos7 echo "hello word" 启停docker容器 docker start <CONTAINER ID > Docker stop <CONTAINER ID > Docker kill <CONTAINER ID > 进入docker容器中 Docker exec –it <CONTAINER ID > bash Docker attach <CONTAINER ID > 删除容器 Docker rm <CONTAINER ID > |
4.3 创建dockerfile构建redis环境
1、编写redis打包镜像的dockerfile步骤
2、dockerfile编程
#引用centos基础镜像 FROM openshift/base-centos7 MAINTAINER jaymarco #安装redis依赖包与redis软件 RUN yum install gcc gcc-c++ make cmake tar python-setuptools -y && \ curl -fL http://download.redis.io/releases/redis-3.2.3.tar.gz | tar xzf - -C /tmp &&\ cd /tmp/redis-3.2.3 && \ make PREFIX=/usr/local/redis install && \ mkdir -p /usr/local/redis/{bin,etc,var,logs} && \ cp -af src/{redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-sentinel,redis-server} /usr/local/redis/bin/ && \ cp -a redis.conf /usr/local/redis/etc/ &&\ cp -a sentinel.conf /usr/local/redis/etc/ &&\ echo "export PATH=/usr/local/redis/bin:\$PATH" > /etc/profile.d/redis.sh && \ source /etc/profile.d/redis.sh && \ groupadd -r redis &&\ useradd -g redis redis && \ chmod -R 755 /usr/local/redis/etc && \ yum clean all && \ rm -rf /tmp/redis-3.2.3 &&\ /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ echo 'Asia/Shanghai' >/etc/timezone #redis参数优化 RUN sed -e 's/^bind 127.0.0.1/#bind 127.0.0.1/' \ -e 's/# save ""/save ""/' \ -e 's/save 900 1/#save 900 1/' \ -e 's/save 300 10/#save 300 10/' \ -e 's/save 60 10000/#save 60 10000/' \ -e 's/appendonly no/appendonly yes/' \ -e 's/# maxmemory-policy noeviction/maxmemory-policy noeviction/' \ -e '481i\requirepass Redis@2017' \ -e '539i\maxmemory 2147483648' \ -i /usr/local/redis/etc/redis.conf && \ sed "s|dir ./|dir /usr/local/redis/dumpdb/|" -i /usr/local/redis/etc/redis.conf && \ sed "s|logfile ""|logfile "/usr/local/redis/logs/redis.log"|" -i /usr/local/redis/etc/redis.conf #容器端口映射 EXPOSE 6379 #启动redis ENTRYPOINT ["/usr/local/redis/bin/redis-server", "/usr/local/redis/etc/redis.conf"] |
4.4 构建redis镜像
通过docker build执行创建,-t参数指定镜像名称,来构建redis镜像
docker build -t redis:v3.2.3 .
执行中会有类似输出:
执行完毕后,输入docker images可以查看当前本机的镜像,如下图,可以看到新增的镜像
1.1 启动redis容器
Redis是有状态数据,我们将redis的数据文件存储到本地宿主机,只需要在启动redis容器的时候将本地目录以卷的方式挂载到容器中。
在本地宿主机创建一个redis存储目录
mkdir –p /home/redisdump
然后启动redis容器
docker run -itd --name redis -v /home/redisdump:/usr/local/redis/dumpdb \ -p 6379:6379 redis:v3.2.3 |
我们看到容器已经正常启动,并能查看到它正在运行的进行信息。
1 验证redis容器
启动redis容器的时候已将redis容器的6379端口映射到外面的宿主机6379端口,说明我们能够通过宿主机地址加上6379就能够访问redis容器里面的数据。
现在我们来测试一下
现在宿主机上模拟插入一条数据,然后返回到容器查看数据是否存在
进入容器我们查看数据是有的,说明我们的镜像是成功的。
到此,相信大家对“Docker环境怎么构建redis单机容器”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!