Docker之利用 Dockerfile构建 Redis 服务的教程

Dockerfile

 
ENV REDIS_VERSION=3.2.1
ENV REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-${REDIS_VERSION}.tar.gz \
        REDIS_DOWNLOAD_SHA1=26c0fc282369121b4e278523fce122910b65fbbf
 
RUN \
        REDIS_FILE=${REDIS_DOWNLOAD_URL##*/} && \
        mkdir /tmp/redis && \
        cd /tmp/redis && \
        curl -Lk "$REDIS_DOWNLOAD_URL" -o ${REDIS_DOWNLOAD_URL##*/} && \
        tar xf ${REDIS_DOWNLOAD_URL##*/} && \
        cd ${REDIS_FILE%.tar*} && \
        #yum install -y http://cbs.centos.org/kojifiles/packages/jemalloc/3.6.0/1.el7/x86_64/jemalloc-3.6.0-1.el7.x86_64.rpm \
        #http://cbs.centos.org/kojifiles/packages/jemalloc/3.6.0/1.el7/x86_64/jemalloc-devel-3.6.0-1.el7.x86_64.rpm && \
        yum install jemalloc-devel -y && \
        make -j $(awk '/processor/{i++}END{print i}' /proc/cpuinfo) && \
        mkdir -p /usr/local/redis/{bin,etc,var} && \
        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/ && \
        echo "export PATH=/usr/local/redis/bin:\$PATH" > /etc/profile.d/redis.sh && \
        source /etc/profile.d/redis.sh && \
        useradd -r -s /sbin/nologin -c "Redis Server" -d /data -m -k no redis && \
        #chmod +x /usr/local/redis/bin/entrypoint.sh && \
        yum clean all && \
        rm -rf /tmp/redis
 
COPY entrypoint.sh /usr/local/redis/bin/entrypoint.sh
RUN chmod +x /usr/local/redis/bin/entrypoint.sh
 
VOLUME ["/data"]
WORKDIR /data
 
EXPOSE 6379/tcp
 
ENTRYPOINT ["/usr/local/redis/bin/entrypoint.sh"]
 
CMD ["redis-server"]

entrypoint.sh 脚本

#!/bin/bash
#########################################################################
# File Name: entrypoint.sh
# Author: LookBack
# Email: admin#dwhd.org
# Version:
# Created Time: 2016年06月30日 星期四 19时38分40秒
#########################################################################
 
if ! which redis-server >/dev/null 2>&1; then source /etc/profile.d/redis.sh;fi
 
set -e
sysctl -w net.core.somaxconn=1024 >/dev/null 2>&1
sysctl -w vm.overcommit_memory=1 >/dev/null 2>&1
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
 
 
# first arg is `-f` or `--some-option`
# or first arg is `something.conf`
if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then
        set -- redis-server "$@"
fi
 
# allow the container to be started with `--user`
if [ "$1" = 'redis-server' -a "$(id -u)" = '0' ]; then
        chown -R redis .
        #exec gosu redis "$0" "$@"
fi
 
if [ "$1" = 'redis-server' ]; then
        # Disable Redis protected mode [1] as it is unnecessary in context
        # of Docker. Ports are not automatically exposed when running inside
        # Docker, but rather explicitely by specifying -p / -P.
        # [1] https://github.com/antirez/redis/commit/edd4d555df57dc84265fdfb4ef59a4678832f6da
        doProtectedMode=1
        configFile=
        if [ -f "$2" ]; then
                configFile="$2"
                if grep -q '^protected-mode' "$configFile"; then
                        # if a config file is supplied and explicitly specifies "protected-mode", let it win
                        doProtectedMode=
                fi
        fi
        if [ "$doProtectedMode" ]; then
                shift # "redis-server"
                if [ "$configFile" ]; then
                        shift
                fi
                set -- --protected-mode no "$@"
                if [ "$configFile" ]; then
                        set -- "$configFile" "$@"
                fi
                set -- redis-server "$@" # redis-server [config file] --protected-mode no [other options]
                # if this is supplied again, the "latest" wins, so "--protected-mode no --protected-mode yes" will result in an enabled status
        fi
fi
 
exec "$@"

 


如果需要基于此dockerfile基础上自己build,那么需要pull benyoo/centos:7.2.1511.20160630这个系统镜像,因为为了安装编译环境和尽可能的简写image的大小,我直接自己封了CentOS7.2.1511的系统image
如果不pull benyoo/centos:7.2.1511.20160630这个系统镜像,那么需要自己在CentOS系统镜像上完善编译环境。
使用方法:

docker run --name redis -d --privileged -p 6379:6379 benyoo/redis:3.2.1
--privileged参数是必须要的,因为启动redis服务的时候需要修改系统内核参数,如果不加在修改内核参数的时候会提示这是只读文件的错误
持久化存储:

docker run --name redis-server --privileged -p 6379:6379 -d benyoo/redis:3.2.1 --appendonly yes
如果想存在宿主机的存储上可以使用-v来挂载目录

docker run --name redis-server --privileged -p 6379:6379 -v /data/redis:/data -d benyoo/redis:3.2.1 --appendonly yes

时间: 2024-09-17 20:29:01

Docker之利用 Dockerfile构建 Redis 服务的教程的相关文章

Docker中使用Dockerfile构建 MariaDB 主从集群镜像

一.使用方法 1.单独MySQL模式 docker run -d \ -e TIMEZONE=Asia/Shanghai \ -v /data/mariadb-master:/data/mariadb \ -e MYSQL_ROOT_PASSWORD=lookback \ -p 3306:3306 \ mariadb:10.0.21 2.MariaDB MASTER docker run -d \ -e TIMEZONE=Asia/Shanghai \ -v /data/mariadb-mast

Docker之利用Dockerfile创建Nginx镜像

镜像获取方法 1.使用Dockerfile创建 wget -O- http://www.dwhd.org/wp-content/uploads/2015/11/Dockerfile1 >Dockerfile wget -O- http://www.dwhd.org/wp-content/uploads/2015/11/nginx.conf >nginx.conf wget -O- http://www.dwhd.org/wp-content/uploads/2015/11/run.sh1 &g

Docker之利用Dockerfile创建ShadowSocks多用户版镜像,实现快速集群式部署

镜像获取 [root@docker-node01 ~]# docker search shadowsocksr_manyuser NAME                           DESCRIPTION                  STARS     OFFICIAL   AUTOMATED benyoo/shadowsocksr_manyuser   基于ShadowSocksR版的manyuser封装   0                    [root@docker-

Spring Boot与Docker(二):使用Spring Boot和Docker构建微服务架构

本文讲的是Spring Boot与Docker(二):使用Spring Boot和Docker构建微服务架构,[编者的话]本篇是<使用Spring Boot和Docker构建微服务架构>系列的第二篇,本篇我们将会利用工具进行设置,深入探讨如何使用Docker工作,然后搭建我们的第一个容器.原文作者为3Pillar环球旗下美国Adbanced技术集团的总监Dan Greene,Dan有十八年的软件设计和开发经验,包括在电子商务.B2B集成.空间分析.SOA架构.大数据以及云计算等领域的软件产品架

利用OpenVSwitch构建多主机Docker网络

本文讲的是利用OpenVSwitch构建多主机Docker网络,[编者的话]当你在一台主机上成功运行Docker容器后,信心满满地打算将其扩展到多台主机时,却发现前面的尝试只相当于写了个Hello World的入门程序,多主机的网络设置成了下一道门槛.在你尝试各种方案时不妨先看看本文,或许就会豁然开朗,发现原来也不复杂.嗯,是的,本文用到了OpenVSwitch. 运行Docker已经不是什么新鲜事,网上有很多入门教程来帮助你在一台主机上运行容器.这台主机可以是Linux服务器,也可以是Mac(

硅谷Spring项目组专家教你利用Spring Cloud构建微服务

  在这一系列文章中,我将为您介绍利用Spring Cloud和Docker构建微服务平台的一些基本概念.   什么是Spring Cloud   Spring Cloud是一系列Pivotal云应用开放工具的合称,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理等操作提供了一种简单的开发方式,为构建分布式系统的一些常见模式提供了解决方案.   如果您熟悉构建应用程序的Spring Framework,那么对Spri

使用Spring Cloud和Docker构建微服务

本文讲的是使用Spring Cloud和Docker构建微服务,[编者的话]这是系列博文中的第一篇,本文作者使用Spring Cloud和Docker构建微服务平台,文章的例子浅显易懂. 本系列博文主要向大家介绍如何使用Spring Cloud和Docker构建微服务平台. 什么是Spring Cloud? Spring Cloud 是Pivotal提供的用于简化分布式系统构建的工具集.Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接器(Service Co

用dockerfile构建docker镜像

[CentOS7 docker]#  [CentOS7 docker]# cat dockerfile1/dockerfile  FROM centos67b6 EXPOSE 22 EXPOSE 3306 EXPOSE 6379 CMD service mysqld start; service redis start; service sshd start; [CentOS7 docker]#  [CentOS7 docker]# docker build -t centos67b7 dock

使用 Spring Cloud 和 Docker 构建微服务

该项目主要是对微服务,以及Spring Cloud系统学习的一些总结,使用gitbook写成了书. 探讨的话题主要有: 什么是微服务 注册中心Eureka 服务提供者 服务消费者 客户端负载均衡Ribbon 简化的Http客户端Feign 熔断器 Hystrix Hystrix监控界面Hystrix Dashboard Hystrix集群监控工具Turbine 配置中心 API Gateway 使用Docker构建微服务 目前基于Spring Cloud构建微服务的必要组件已经讲解完成. 下一步