《 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 $fetchDepsENV 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/edd4d555df57dc84265fdfb4ef59a4678832f6dagrep -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 /dataCOPY 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 redisRUN 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/138tzdataENV 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/edd4d555df57dc84265fdfb4ef59a4678832f6dagrep -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 --versionRUN mkdir /data && chown redis:redis /data
VOLUME /data
WORKDIR /dataCOPY 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
版权声明: 本文为博主原创文章,请在转载时务必注明博文出处!

Docker系列(二十四)——Docker实例六Docker安装Redis实例相关推荐

  1. 数据与广告系列二十四:效果广告后定向时代如何逆流而上

    作者·黄崇远 『数据虫巢』 全文共4338字 题图ssyer.com " 在效果广告的发展历程中,当前已经处于后定向时代,或者说是弱定向时代,我们是应该顺应潮流还是应该逆流而上?" ...

  2. 数学之美系列二十四 -- 谈谈动态规划与如何设计动态规划算法

    数学之美--动态规划 今 年九月二十三日,Google.T-Mobile 和 HTC 宣布了第一款基于开源操作系统 Android 的 3G 手机,其中一个重要的功能是利用全球卫星定位系统实现全球导航 ...

  3. 二十四、动网格Remeshing方法及实例

    1 概念介绍 这次我们做一个比较复杂,同时也是比较实用的案例-网格重构.网格重构(Remeshing)方法是动网格常用的方法,一般会和弹簧光顺方法及扩散光顺方法相结合使用.当网格变形达到一定的程度后, ...

  4. 【Python学习系列二十四】scikit-learn库逻辑回归实现唯品会用户购买行为预测

    1.背景:http://www.datafountain.cn/#/competitions/260/intro DataFountain上的唯品会用户购买行为预测比赛题目,笔者用逻辑回归实现,分数是 ...

  5. 电气器件系列二十四:电子式压力传感器PPG-D(1)

    说明书地址: https://max.book118.com/html/2017/0721/123285653.shtm 正压.负压=真空压力.连成压=复合压力 复合压力: 复合量程就是测量的量程是从 ...

  6. 【ASE入门学习】ASE入门系列二十四——轴向溶解

    武器出现消失效果复刻,涉及知识点:轴向溶解.光边溶解.Surface材质.UV2(第二套UV).Animation动画制作.简单光粒子制作 至此自发光四个部分说明完毕(第一部分是自反光贴图自身)把这4 ...

  7. js系列二十四:额外知识补充,无限参数柯理化

    在前端经常面试中,可能会运到这样一个问题涉及到柯理化的题目 add(1)(2)(3) = 6; add(1, 2, 3)(4) = 10; add(1)(2)(3)(4) = 15; 这个问题的目的是 ...

  8. 数据与广告系列二十六:知识迁移的Embedding应用,智能化定向的解药

    作者·黄崇远 『数据虫巢』 全文共4348字 题图ssyer.com " 效果广告后定向时代,虽有千般万难,我们一样还得解决定向智能的问题." 需要提前说明的是,这一篇会涉及到本系 ...

  9. Docker最全教程之MySQL容器化 (二十四)

    Docker最全教程之MySQL容器化 (二十四) 原文:Docker最全教程之MySQL容器化 (二十四) 前言 MySQL是目前最流行的开源的关系型数据库,MySQL的容器化之前有朋友投稿并且写过 ...

最新文章

  1. 第三部分 基本类型:第16章 数组
  2. PMcaff O2O 产品峰会:行业最强干货,BAT总监级最佳实战 | 火热报名
  3. boost::container_hash模块实现哈希序列
  4. 树状数组(Binary Indexed Tree)
  5. mysql联合索引(复合索引)详解
  6. django ajax页面加载,Python Django 之 基于JQUERY的AJAX 登录页面
  7. C语言之数组和指针位移的本质(四十五)
  8. (转)机器学习入门,强烈推荐
  9. python反编译命令_Python 反编译模块dis
  10. 2019-9-9,中兴笔试
  11. 关于政务版本中的公文签名及签章
  12. Rust入门教程(三):Package、Crate 和 Module
  13. 【MATLAB】改变坐标轴范围
  14. 如何用Python画奥运五环——circle()
  15. t480 拆触摸板_ThinkPad T480 触摸板怎么用?
  16. android打开app白色页面,完美解决Android App启动页有白屏闪过的问题
  17. 360视频:金字塔棱台投影TSP
  18. linux安装浏览器 linux本地浏览器进行访问
  19. ubuntu 中w指令中的IDLE是什么意思
  20. VS中编译带Qt的他人项目,环境搭建及解决报错

热门文章

  1. npm 如何查看一个包的版本信息
  2. 真香,理解记忆法学习Python基础语法
  3. json.decoder.JSONDecodeError: Invalid \escape: line 1 column 44 (char 43)
  4. Lucene6.6的介绍和使用
  5. Spark SQL 工作流程源码解析(四)optimization 阶段(基于 Spark 3.3.0)
  6. EtherCAT IGH 的下载和编译
  7. 我用Python实现截图识别文字,工作效率提升,直接打卡下班
  8. EA教程 (四) SQLHelper类
  9. C程序-蓝桥-九宫格
  10. 栋感光波-冲刺日志(第5次)