打破传统redis软件部署,docker容器化轻松搞定!

网友投稿 1163 2022-10-25

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

打破传统redis软件部署,docker容器化轻松搞定!

用传统部署搭建一套redis环境,中间会消耗太多的重复的工作,导致部署效率非常低。例如:申请虚拟机,安装操作系统,软件包依赖安装和redis应用部署,这个过程中间需要花费不少时间,同时在安装的过程中出现问题也需要花费一些时间去处理。然后传统方式部署方式可移植性相当差。要想将现有redis迁移到新主机,可不是那么容易的事情,可能最简单的方式是tar包过去,但是新主机还是需要安装redis相关的依赖包上去,还需要花些时间去调试redis,中间反反复复的重复工作太浪费时间了。

为了打破传统部署模式带来的效率低下问题,我们采用docker容器部署模式,将重复的工作精简化,也为了方便运维工程师更加快速搭建一套redis环境,redis容器化后能够解决安装过程中出现的重复性繁琐的工作。最终以镜像的存储在镜像仓库中。只要有需求用到redis服务,可以在任何安装有docker软件的主机上面运行redis容器,即可达到需求。Docker容器化后的镜像即可实现即开即用的效果。

  • Linux编译环境:准备一台能上外网的linux环境,并安装好docker运行环境。

  • 基础镜像:在构建应用镜像前置条件,需要准备一套干净的centos基础镜像,然后在这个基础镜像上面去部署redis软件。

  • 配置标准化:按dockerfile的命令格式来编写,将redis软件安装与redis配置步骤写入到dockerfile文件中。然后准备好运行环境需要的配置文件和对应的运行环境启动脚本,方便在构建应用镜像时将这些文件打包到镜像中。

  • 构建应用镜像:通过编写dockerfile文件在基础操作系统镜像里面将所要运行的所依赖的软件包和redis软件部署到镜像中,最后通过docker命令将其打成一个新的完整镜像包,下次要用redis就直接下载镜像部署。

  • 启动容器:docker命令启动容器的过程中会将redis服务启动。

在Docker中,构建一个自定义镜像共有两种方法,一是通过commit指令构建,二是通过Dockerfile文件构建。这里我们推荐第二种方法用dockerfile文件构建redis镜像。

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.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镜像。可以通过dockerpull openshift/base-centos7命令来下载centos基础镜像。

用docker pull已经将镜像下载到本地linux主机上面,接下来镜检查openshift/base-centos7镜像完整性,只要docker run命令来启动这个镜像,我们看到这个容器已经正常启起来。验证表明这个镜像是正常的。

下面是docker日常用到的一些简单命令:

1、下载centos镜像

docker pull openshift/base-centos7

2、查看镜像

docker images

3、删除镜像

Docker rmi <IMAGE ID >

4、运行docker容器

docker run -itd  openshift/base-centos7 echo "hello  word"

5、启停docker容器

docker start <CONTAINER ID >

Docker stop <CONTAINER ID >

Docker kill <CONTAINER ID >

6、进入docker容器中

Docker exec –it <CONTAINER ID >  bash

Docker attach <CONTAINER ID >

7、删除容器

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可以查看当前本机的镜像,如下图,可以看到新增的镜像。

4.5 启动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

我们看到容器已经正常启动,并能查看到它正在运行的进行信息。

这样redis的镜像已经打包好!

启动redis容器的时候已将redis容器的6379端口映射到外面的宿主机6379端口,说明我们能够通过宿主机地址加上6379就能够访问redis容器里面的数据。

现在我们来测试一下

现在宿主机上模拟插入一条数据,然后返回到容器查看数据是否存在

进入容器我们查看数据是有的,说明我们的镜像是成功的。

上一篇:OPEC+维持每日40万桶原油增产计划,确认将关注疫情发展
下一篇:欧佩克+维持增产计划,当天国际油价却为何收涨了?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~