Docker系列(二十四)——Docker实例六Docker安装Redis实例

                                   《 Docker实例三Docker安装Redis实例 》

前言

在前面一篇文章种,完成了 《 Docker安装MongoDB实例 》,本篇将继续镜像安装教程,并完成Docker安装Redis实例。

 

Docker实例三Docker安装Redis实例

第一种:使用 docker pull 镜像名 拉取镜像

1、查询星级数大于30的MySQL镜像(注:星级数越高,越受欢迎的,默认在 Docker Hub 查询的),

输入命令 “ docker search -s 30 redis ” ,查询内容如下:

[root@localhost ~]# docker search -s 30 redis
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                    DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
redis                   Redis is an open source key-value store that…   6222                [OK]                
bitnami/redis           Bitnami Redis Docker Image                      99                                      [OK]
sameersbn/redis                                                         75                                      [OK]
grokzen/redis-cluster   Redis cluster 3.0, 3.2, 4.0 & 5.0               39                                      
hypriot/rpi-redis       Raspberry Pi compatible redis image             34                                      

 

2、拉取第一个镜像,也是官方版的镜像,输入命令 “ docker pull redis ”,默认拉取的为最新版本 latest ,内容如下:

[root@localhost ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
f17d81b4b692: Pull complete 
b32474098757: Pull complete 
8980cabe8bc2: Pull complete 
e614c66c2b9c: Pull complete 
6eb43ec9256b: Pull complete 
394ecf5f46d4: Pull complete 
Digest: sha256:f30f134bd475d451ce3207fb128bcef8ff87d0f520a39cac0c4ea285819c42a9
Status: Downloaded newer image for redis:latest

 

3、拉取完成后,输入命令 “ docker images redis ”,可以在本地镜像列表里查到REPOSITORY为redis的镜像,内容如下:

[root@localhost ~]# docker images redis
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              415381a6cb81        3 weeks ago         94.9MB

 

第二种:通过 Dockerfile 构建Docker镜像

1、新建Redis的Dockerfile文件存放目录,输入命令 “ mkdir -p /opt/dockerfile/redis ” ,并进入到目录下。

[root@localhost ~]# mkdir -p /opt/dockerfile/redis
[root@localhost ~]# cd /opt/dockerfile/redis/
[root@localhost redis]# 

2、创建dockerfile文件,输入命令 “ vi redisdockerfile ” ,并键入如下内容:

Ubuntu 版本:

# base 基础镜像
FROM debian:stretch-slim

# 首先添加用户和组,以确保一致地分配他们的id
RUN groupadd -r redis && useradd -r -g redis redis

# grab gosu for easy step-down from root
# https://github.com/tianon/gosu/releases
ENV GOSU_VERSION 1.10
RUN set -ex; \
	\
	fetchDeps=" \
		ca-certificates \
		dirmngr \
		gnupg \
		wget \
	"; \
	apt-get update; \
	apt-get install -y --no-install-recommends $fetchDeps; \
	rm -rf /var/lib/apt/lists/*; \
	\
	dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
	wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
	wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
	export GNUPGHOME="$(mktemp -d)"; \
	gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
	gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
	gpgconf --kill all; \
	rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc; \
	chmod +x /usr/local/bin/gosu; \
	gosu nobody true; \
	\
	apt-get purge -y --auto-remove $fetchDeps

ENV REDIS_VERSION 5.0.2
ENV REDIS_DOWNLOAD_URL http://download.redis.io/releases/redis-5.0.2.tar.gz
ENV REDIS_DOWNLOAD_SHA 937dde6164001c083e87316aa20dad2f8542af089dfcb1cbb64f9c8300cd00ed

# for redis-sentinel see: http://redis.io/topics/sentinel
RUN set -ex; \
	\
	buildDeps=' \
		ca-certificates \
		wget \
		\
		gcc \
		libc6-dev \
		make \
	'; \
	apt-get update; \
	apt-get install -y $buildDeps --no-install-recommends; \
	rm -rf /var/lib/apt/lists/*; \
	\
	wget -O redis.tar.gz "$REDIS_DOWNLOAD_URL"; \
	echo "$REDIS_DOWNLOAD_SHA *redis.tar.gz" | sha256sum -c -; \
	mkdir -p /usr/src/redis; \
	tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1; \
	rm redis.tar.gz; \
	\
# 禁用 Redis 保护模式 [1],因为它在 Docker 上下文中是不必要的
# (ports are not automatically exposed when running inside Docker, but rather explicitly by specifying -p / -P)
# [1]: https://github.com/antirez/redis/commit/edd4d555df57dc84265fdfb4ef59a4678832f6da
	grep -q '^#define CONFIG_DEFAULT_PROTECTED_MODE 1$' /usr/src/redis/src/server.h; \
	sed -ri 's!^(#define CONFIG_DEFAULT_PROTECTED_MODE) 1$!\1 0!' /usr/src/redis/src/server.h; \
	grep -q '^#define CONFIG_DEFAULT_PROTECTED_MODE 0$' /usr/src/redis/src/server.h; \
# 为了将来的参考,直接在源代码中修改它,而不只是提供默认的配置标志,因为很明显 “ 如果您指定 redis-server 的任何参数,将指定所有参数 ”
# see also https://github.com/docker-library/redis/issues/4#issuecomment-50780840
# (more exactly, this makes sure the default behavior of "save on SIGTERM" stays functional by default)
	\
	make -C /usr/src/redis -j "$(nproc)"; \
	make -C /usr/src/redis install; \
	\
	rm -r /usr/src/redis; \
	\
	apt-get purge -y --auto-remove $buildDeps

# 创建数据存放的容器数据卷
RUN mkdir /data && chown redis:redis /data
VOLUME /data
WORKDIR /data

COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]

# 暴露 redis 服务端口
EXPOSE 6379
CMD ["redis-server"]

 

Linux 版本:

FROM alpine:3.9

# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN addgroup -S redis && adduser -S -G redis redis

RUN apk add --no-cache \
# grab su-exec for easy step-down from root
		'su-exec>=0.2' \
# add tzdata for https://github.com/docker-library/redis/issues/138
		tzdata

ENV REDIS_VERSION 5.0.4
ENV REDIS_DOWNLOAD_URL http://download.redis.io/releases/redis-5.0.4.tar.gz
ENV REDIS_DOWNLOAD_SHA 3ce9ceff5a23f60913e1573f6dfcd4aa53b42d4a2789e28fa53ec2bd28c987dd

# for redis-sentinel see: http://redis.io/topics/sentinel
RUN set -ex; \
	\
	apk add --no-cache --virtual .build-deps \
		coreutils \
		gcc \
		linux-headers \
		make \
		musl-dev \
	; \
	\
	wget -O redis.tar.gz "$REDIS_DOWNLOAD_URL"; \
	echo "$REDIS_DOWNLOAD_SHA *redis.tar.gz" | sha256sum -c -; \
	mkdir -p /usr/src/redis; \
	tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1; \
	rm redis.tar.gz; \
	\
# disable Redis protected mode [1] as it is unnecessary in context of Docker
# (ports are not automatically exposed when running inside Docker, but rather explicitly by specifying -p / -P)
# [1]: https://github.com/antirez/redis/commit/edd4d555df57dc84265fdfb4ef59a4678832f6da
	grep -q '^#define CONFIG_DEFAULT_PROTECTED_MODE 1$' /usr/src/redis/src/server.h; \
	sed -ri 's!^(#define CONFIG_DEFAULT_PROTECTED_MODE) 1$!\1 0!' /usr/src/redis/src/server.h; \
	grep -q '^#define CONFIG_DEFAULT_PROTECTED_MODE 0$' /usr/src/redis/src/server.h; \
# for future reference, we modify this directly in the source instead of just supplying a default configuration flag because apparently "if you specify any argument to redis-server, [it assumes] you are going to specify everything"
# see also https://github.com/docker-library/redis/issues/4#issuecomment-50780840
# (more exactly, this makes sure the default behavior of "save on SIGTERM" stays functional by default)
	\
	make -C /usr/src/redis -j "$(nproc)"; \
	make -C /usr/src/redis install; \
	\
	rm -r /usr/src/redis; \
	\
	runDeps="$( \
		scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \
			| tr ',' '\n' \
			| sort -u \
			| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
	)"; \
	apk add --virtual .redis-rundeps $runDeps; \
	apk del .build-deps; \
	\
	redis-server --version

RUN mkdir /data && chown redis:redis /data
VOLUME /data
WORKDIR /data

COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 6379
CMD ["redis-server"]

 

3、通过 Dockerfile 的 docker build 构建一个 redis 镜像,这儿可以自定义镜像名,输入命令 “ docker build -f /opt/dockerfile/redis/redisdockerfile -t huazai/db/redis:v1.0 . ” 进行构建,部分构建内容如下:

[root@localhost redis]# docker build -f /opt/dockerfile/redis/redisdockerfile -t huazai/db/redis:v1.0 .
Sending build context to Docker daemon  6.144kB
Step 1/15 : FROM debian:stretch-slim
stretch-slim: Pulling from library/debian
f17d81b4b692: Pull complete 
Digest: sha256:ef6be890318a105f7401d0504c01c2888daa5d9e45b308cf0e45c7cb8e44634f
Status: Downloaded newer image for debian:stretch-slim
 ---> 4b4471f624dc
Step 2/15 : RUN groupadd -r redis && useradd -r -g redis redis
 ---> Running in b2c0601c9e6f
Removing intermediate container b2c0601c9e6f


# 此处省去 N 行

 ---> Running in 37332491a495
Removing intermediate container 37332491a495
 ---> ea2774c00271
Step 14/15 : EXPOSE 6379
 ---> Running in 0305b1c012b2
Removing intermediate container 0305b1c012b2
 ---> 1af762f295c0
Step 15/15 : CMD ["redis-server"]
 ---> Running in 76d467c25d6e
Removing intermediate container 76d467c25d6e
 ---> 845712c3bd26
Successfully built 845712c3bd26
Successfully tagged huazai/db/redis:v1.0


 

构建成功后,输入命令 “ docker images huazai/db/redis  ” ,可以在本地的镜像列表种查找到方才构建 redis 镜像,内容如下:

[root@localhost redis]# docker images huazai/db/redis
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
huazai/db/redis     v1.0                f8ea30f3fbef        7 minutes ago       94.9MB

 

 


测试 Redis 镜像

1、创建 Redis 相关目录,后面用于数据转递与共享的容器数据卷,

输入命令 “ mkdir -p /opt/redis/data /opt/redis/conf ” ,内容如下:

[root@localhost ~]# mkdir -p /opt/redis/data
[root@localhost ~]# cd /opt/redis/
[root@localhost redis]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec  6 21:14 data

目录说明:

 

data                                    

启动redis容器服务时,data目录将映射为redis容器配置的 /data/db 的目录,以达到数据转递共享与数据存储的目的;

 

2、启动镜像,创建一个容器实例,输入命令 “ docker run -it -d -p 6379:6379 --name redis01 -v /opt/redis/data:/data --privileged=true 镜像ID redis-server --appendonly yes ” ,启动后会产生一个 ID ,内容如下:

[root@localhost ~]# docker run -it -d -p 6379:6379 --name redis01 -v /opt/redis/data:/data --privileged=true f8ea30f3fbef redis-server --appendonly yes
0f5bb017d55cb0e411cfccaaed38db8c0b0f8a2667c99f436ff38ba48b61ced7
[root@localhost ~]# 

 

3、连接 redis 服务并操作,这儿只为测试通过 Dockerfile 构建的 redis 服务是否可用,如果需要具体的关于 redis NoSQL方面的操作,请参考博主其它有关的详细描述,这儿就直接输入命令 “ docker exec -it redis01 /bin/bash ” ,再连接到 redis 服务,输入命令 “ redis-cli ”,连接上后,就可以对 redis 服务进行操作了,内容如下:

[root@localhost ~]# docker exec -it redis01 /bin/bash
root@0f5bb017d55c:/data# redis-cli
127.0.0.1:6379> set name huazai
OK
127.0.0.1:6379> get name
"huazai"
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> 

 

 

 

 


 好了,关于 Docker系列(二十四)——Docker实例六Docker安装Redis实例 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者:华    仔
联系作者:who.seek.me@java98k.vip
来        源:CSDN (Chinese Software Developer Network)
原        文:https://blog.csdn.net/Hello_World_QWP/article/details/84764521
版权声明:本文为博主原创文章,请在转载时务必注明博文出处!
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值