Coding Gun

วิธีการใช้งาน Redis ด้วย Docker

การติดตั้ง Redis บน Docker จะสะดวกกว่าการติดต้ังลงบนเครื่องมากๆ โดยเฉพาะ Redis CLI บน Windows ซึ่งต้องใช้งานผ่านทาง WSL เราจึงนิยม Run Redis CLI ด้วย Docker เป็นหลัก ซึ่งในบทความนี้เราจะพาไปดูวิธีการติดตั้ง Redis Server, Redis CLI และ RedisInsight ด้วย Container โดยจะแบ่งเป็นหัวข้อต่างๆ ดังนี้

  1. Redis Server
  2. Redis CLI
  3. RedisInsight

ก่อนจะเข้าไปสู่วิธีการติดตั้งเราต้องเข้าใจการทำงานของ Redis กันก่อนโดยที่จะแบ่งการทำงานออกเป็น 2 ส่วนดังนี้

ติดตั้ง Redis Server บน Docker

เราสามารถนำ redis มาใช้งานในเครื่องได้ด้วยคำสั่งนี้

  1. Pull redis server image ลงมาก่อน
    $ docker pull redis:latest
    
    เราสามารถเลือก version และ Base Image ของ Redis ได้ ซึ่ง ณ ตอนที่กำลังเขียนความนี้ Version ล่าสุดจะเป็น 7.2.5 เราสามารถดขียนเป็น
    $ docker pull redis:7.2.5
    
    และโดย default base image ของ Redis จะเป็น Debian ถ้าเราอยากได้ Image ที่มีขนาดเล็กลง(ประมาณ 5 MB) เราจะเลือกใช้ alpine เป็น base image แทน โดยจะระบุเป็น
    $ docker pull redis:7.2.5-alpine
    
  2. สร้าง Redis server container ขึ้นมาด้วยคำสั่ง
    $ docker run -p 6379:6379 --rm redis redis-server
    

คำสั่งนี้จะเป็นการตั้ง redis server ขึ่้นมา โดย redis จะใช้ port 6379 ในการสื่อสาร ถ้าต้องการเปลี่ยน Port อื่นเราจะใช้คำสั่ง

$ docker run -p 6380:6380 --rm redis redis-server --port 6380

ติดตั้ง Redis ด้วย Redis Stack

ถ้าเราต้องการ Redis ที่มาพร้อมกับ RedisInsight และ Redis Module เราสามารถเลือกติดต้ัง Redis Stack แทน แต่การใช้ Redis Stack จะเหมาะกับการ Test เท่านั้นเพราะทุกอย่างถูก pack ลงมาใน container เพียงตัวเดียว

เราสามารถใช้งาน Redis Insight ผ่าน Redis Stack ด้วยคำสั่งนี้

$ docker run -p 6379:6379 -p 8001:8001 --rm redis/redis-stack:latest

เราจะเห็นว่า Container ที่กำลังทำงานอยู่ใน Terminal และแสดง Port 6379 และ 8001 ซึ่งเราสามารถเข้าไปหน้าหลักของ RedisInsight ได้ที่ http://localhost:8001 จะได้ผลลัพธ์ดังรูป

RedisInsight
หน้าแรกของ RedisInsight

ถ้าสนใจการใช้งาน RedisInsight สามารถเข้าไปอ่านต่อได้ที่ วิธีจัดการ Redis ผ่าน GUI ด้วย RedisInsight"

Custom Redis Config

ถ้าเราต้องการปรับเปลี่ยน Configuration ให้เป็นไปตามที่เราต้องการเราจะต้องสร้าง Image ขึ้นมาเองด้วยการเขียน Dockerfile

FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

สามารถดูตัวอย่างไฟล์ redis.conf ได้ที่นี่

หลังจากที่เรา ปรับแต่ง Configuration ของ Redis เรียบร้อยแล้วให้สั่ง Build Docker Image ด้วยคำสั่ง

$ docker build -t my-redis .

แล้วให้เราสร้าง Redis Container จาก Image ที่เรา Custom ขึ้นมาแทน

$ docker run --rm -p 6379:6379 my-redis

ติดตั้ง Redis Client บน Docker

การใช้งาน Redis CLI ผ่านทาง Docker เราจะต้องใช้คำสั่ง

$ docker run -it --rm redis redis-cli -h host.docker.internal

เนื่องจาก container 2 ตัวนี้่ไม่ได้สร้างบน network เดียวกัน ทำให้เราต้อง connect เข้าไปที่ redis server โดยใช้ host.docker.internal แต่ถ้าคุณนำไปสร้างด้วย docker-compose ก็จะต้องอ้าง host ด้วยชื่อ service ใน docker-compose แทน

หลังจากนั้น เราจะเข้าสู่ shell ของ redis ซึ่งเราจะทำการ check ก่อนว่า redis-server นั้นพร้อมใช้งานหรือไม่ด้วยคำสั่ง PING ถ้า redis server ตอบ PONG กลับมาแสดงว่าใช้ได้

redis host.local.internal:6379> ping
PONG

หรือจะเรียกผ่าน redis-cli ตรงๆ โดยเข้าไปที่ shell แบบนี้ก็ได้

$ docker run -it --rm redis bash

หลังจากเข้าไปใน shell ของ redis แล้วก็เรียก redis-cli จากตรงนี้ได้เลย

$ redis-cli ping
PONG

ถ้าเราใช้คำสั่ง PING และ Redis ตอบ PONG กลับมาถือว่า Connection เสร็จสมบูรณ์

ติดต้ัง RedisInsight บน Docker

  1. เริ่มจากการ Pull image ลงมาก่อน

    1
    
    $ docker pull redis/redisinsight
    
  2. สร้าง Redisinsight Container ด้วยคำสั่ง

    1
    2
    
    $ docker run -d --name redisinsight \ 
                 -p 5540:5540 redis/redisinsight:latest
    

    RedisInsight จะใช้ port 5540 เป็น default port

  3. ถ้าต้องการเก็บข้อมูลการใช้งาน RedisInsight ไว้เราต้อง Mount Volume ออกมาด้วยคำสั่ง

    1
    2
    3
    
    $ docker run -d --name redisinsight \
                 -p 5540:5540 redis/redisinsight:latest \
                 -v redisinsight:/data
    

    ใน docker command นี้จะใส่ parameter -v เข้าไปเพื่อสร้าง volume ชื่อ redisinsight สำหรับเก็บข้อมูลการใช้งาน RedisInsight

  4. เข้าไปหน้าแรกของ RedisInsight ได้ที่ http://localhost:5540

  5. ถ้าต้องการเช็คสถานะ(health check) ของ redisinsight เราสามารถเข้าไปตรวจสอบได้ที่ http://localhost:5540/api/health

  6. ถ้าเราต้องการปรับแต่ง Configuration ของ RedisInsight เราสามารถกำหนด Environment Variables ตามตารางนี้ได้

    Variables Type Description Default
    RI_APP_HOST string IP address or hostname to bind to 0.0.0.0
    RI_APP_PORT number Port to bind to 5540
    SERVER_TLS boolean Enable TLS true
    RI_SERVER_TLS_CERT string Path to TLS certificate file undefined
    RI_SERVER_TLS_KEY string Path to TLS key file undefined
    RI_ENCRYPTION_KEY string Key to encryption data in redis undefined
    RI_LOG_LEVEL string Log level info
    RI_STDOUT_LOGGER boolean Log to STDOUT true
    RI_FILES_LOGGER boolean Log to file false

    เช่น ถ้าต้องการเปลี่ยนจาก Port 5540 ไปเป็น 5541 เราจะใช้คำสั่ง

    1
    2
    3
    4
    
    $ docker run -d --name redisinsight \
     -e API_PORT=5541 \
     -p 5541:5541 redis/redisinsight:latest \
     -v redisinsight:/data
    
Phanupong Permpimol
Follow me