Skip to content
andyceo edited this page Apr 5, 2016 · 6 revisions

Установка Redis из Docker-образа

Вот основная команда для запуска Redis в режиме master, используя свой файл конфигурации и папку на хост-системе для данных:

sudo docker run \
  -d \
  --name redis-master \
  --restart=always \
  -p 6379:6379 \
  -v /data/redis-master/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -v /data/redis-master/data:/data \
  -v /data/redis-master/logs:/var/log/redis \
  redis:3.0.7 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

До запуска этой команды, файл конфигурации /data/redis-master/conf/redis-master.conf уже должен существовать и иметь права 777, также как и директория /data/redis-master/data:

sudo mkdir -p /data/redis-master/{data,conf,logs}
sudo chmod 777 -R /data/redis-master/{data,logs} 
sudo touch /data/redis-master/conf/redis.conf
sudo cat <<EOT >> /data/redis-master/conf/redis.conf
# NEVER TRY DAEMONIZE REDIS IN CONTAINER!
daemonize no
pidfile /var/run/redis/redis.pid
port 6379
timeout 30
loglevel warning
logfile /var/log/redis/redis.log
databases 200
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename redis.rdb
dir /data
masterauth 123qwe
slave-serve-stale-data no
slave-read-only yes
slave-priority 100
maxmemory 268435456
maxmemory-policy volatile-lru
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
EOT

После того, как был запушен redis-master, запустим redis-slave:

sudo mkdir -p /data/redis-slave/{data,conf,logs}
sudo chmod 777 -R /data/redis-slave/{data,logs} 
sudo touch /data/redis-slave/conf/redis.conf
sudo cat <<EOT >> /data/redis-slave/conf/redis.conf
# NEVER TRY DAEMONIZE REDIS IN CONTAINER!
daemonize no
pidfile /var/run/redis/redis.pid
port 6380
timeout 30
loglevel warning
logfile /var/log/redis/redis.log
databases 200
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename redis.rdb
dir /data
slaveof 127.0.0.1 6379
slave-serve-stale-data yes
slave-read-only yes
slave-priority 100
maxmemory 268435456
maxmemory-policy volatile-lru
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
EOT

sudo docker run \
  -d \
  --name redis-slave \
  --restart=always \
  --link redis-master \
  -p 16379:6379 \
  -p 6380:6380 \
  -v /data/redis-slave/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -v /data/redis-slave/data:/data \
  -v /data/redis-slave/logs:/var/log/redis \
  redis:3.0.7 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

Здесь мы перекинули порт 6379 на ненужный порт 16379, т.к. он используется redis-master (мы запускаем эти контейнеры на одной хост-системе, в учебных целях. Если бы мы запускали их на разных хостах, то нужно было бы настроить DNS и правильные имена контейнеров (опции --name, --hostname)).

После успешного запуска контейнера, можно прописать правильные права и владельца на папку с данными и логами:

sudo docker exec -ti redis-slave bash
chmod 775 /data
chown redis:root /data
chmod 755 /var/log/redis
chown redis:redis /var/log/redis

Полезные ссылки:

Sidebar is under construction

Clone this wiki locally