docker安装redis并配置外网可访问和密码 基于Dockerfile的方式
-
本人对docker的理解是docker是一个服务器部署的容器,在某种程度上类似于Java的Maven,我们可以在这个容器中以镜像的形式安装很多服务,现在我来演示下安装redis,安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式
-
所有docker支持的镜像基本都在https://hub.docker.com/
docker的官网上能找到合适版本的Dockerfile
首先mkdir新建redis文件夹
mkdir redis
然后cd进redis文件夹, vim Dockerfile,然后把复制的Dockerfile内容粘贴进去
cd redis
vim Dockerfile
Dockerfile的内容为(在官网上也能找到你要的redis的版本的Dockerfile,我这里是redis5.0.5的版本)
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.5
ENV REDIS_DOWNLOAD_URL http://download.redis.io/releases/redis-5.0.5.tar.gz
ENV REDIS_DOWNLOAD_SHA 2139009799d21d8ff94fc40b7f36ac46699b9e1254086299f8d3b223ca54a375
# 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"]
然后按下Esc键 :wq保存
:wq
mkdir data新建data文件夹
mkdir data
配置文件:从网上下载一个Linux对应版本的redis的redis.conf ,http://download.redis.io/releases/
配置外网可访问和密码:
修改redis.conf的三个地方
bind 127.0.0.1
protected-mode yes
#requirepass foobared
修改为
#bind 127.0.0.1
protected-mode no
requirepass password
password为你的密码
sudo docker build -t redis .
sudo docker run -d --privileged=true -p 6379:6379 -v /home/mhyj_dev/redis/redis.conf:/etc/redis/redis.conf -v /home/mhyj_dev/redis/data:/data --name redis redis:5.0.5 redis-server /etc/redis/redis.conf --appendonly yes
1.说明:
- –name redis :指定容器名称
- -p 6379:6379 :端口映射,默认redis启动的是6379
- -v /home/mhyj_dev/redis/redis.conf:/etc/redis/redis.conf :将宿主机目录/home/mhyj_dev/redis/redis.conf文件挂载到容器 的/etc/redis/redis.conf
- -v /home/mhyj_dev/redis/data:/data :将宿主机目录/home/mhyj_dev/redis/data挂载到容器的/data
- redis-server /etc/redis/redis.conf --appendonly yes :在容器执行redis-server启动命令,并打开redis持久化配置
如果顺利,你现在已经安装成功了,你可以sudo docker ps -a查看自己安装的redis进程,sudo docker images查看镜像列表可以看到你自己装的redis镜像
sudo docker ps -a
sudo docker images