- 从 hub.docker.com 上下载最新的 redis image:
docker pull redis
C:Usersyanchun>docker pull redis Using default tag: latest latest: Pulling from library/redis 42c077c10790: Pull complete a300d83d65f9: Pull complete ebdc3afaab5c: Pull complete 6ce178c713e4: Pull complete 949f9d8f429f: Pull complete 4076be5e5074: Pull complete Digest: sha256:cfda0458239615720cc16d6edf6bae7905c31265f218d2033c43cdb40cd59792 Status: Downloaded newer image for redis:latest docker.io/library/redis:latest
然后可以查看 docker 已经有哪些本地 image:
docker images
C:Usersyanchun>docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 604d80444252 4 days ago 117MB
- 创建一个名称为 my-redis-container 的 redis 容器
docker run -d -p 6379:6379 --name my-redis-container redis
C:Usersyanchun>docker run -d -p 6379:6379 --name my-redis-container redis 79d0efb5a18093527c38ec6a833327a4e14d64a11f1c86c6f92a40f46a012a4d
- 可以查看正在运行的容器:
docker ps
C:Usersyanchun>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 79d0efb5a180 redis "docker-entrypoint.s…" 51 seconds ago Up 51 seconds 0.0.0.0:6379->6379/tcp my-redis-container
- 可以查看刚创建的 redis 容器的 log:
docker logs my-redis-container
C:Usersyanchun>docker logs my-redis-container 1:C 18 Jun 2022 07:07:43.792 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1:C 18 Jun 2022 07:07:43.792 # Redis version=7.0.2, bits=64, commit=00000000, modified=0, pid=1, just started 1:C 18 Jun 2022 07:07:43.792 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf 1:M 18 Jun 2022 07:07:43.793 * monotonic clock: POSIX clock_gettime 1:M 18 Jun 2022 07:07:43.793 * Running mode=standalone, port=6379. 1:M 18 Jun 2022 07:07:43.793 # Server initialized 1:M 18 Jun 2022 07:07:43.793 * Ready to accept connections
- 可以与 redis 容器交互:
docker exec -it my-redis-container sh
redis 已经在容器中运行:
C:Usersyanchun>docker exec -it my-redis-container sh # redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set name dianel OK 127.0.0.1:6379> get name "dianel" 127.0.0.1:6379> incr count (integer) 1 127.0.0.1:6379> incr count (integer) 2 127.0.0.1:6379> exit # exit C:Usersyanchun>2 使用 Nodejs 与 redis 容器交互
node-redis 文档
https://github.com/redis/node-redis中
给出的与 node-redis v4.1.0 对应的 sample code 如下:
import { createClient } from 'redis';
const client = createClient();
client.on('error', (err) => console.log('Redis Client Error', err));
await client.connect();
await client.set('key', 'value');
const value = await client.get('key');
Nodejs 从 v14 开始支持这种 top level await 语法,
现在建一个 Node 工程,新建文件夹 redis-node-docker, 用 vscode 打开此文件夹,在 terminal 运行:
npm init --yes
npm install redis 此命令将安装当前 redis 最新版本 v4.1.0,当前安装的 Nodejs 版本是 v16.14.0,所以可以使用这种语法。
运行命令 npm install nodemon 安装 nodemon,然后在项目文件夹里新建文件 server.mjs,修改package.json,增加一行 "serve": "nodemon server.mjs":
"scripts": {
"serve": "nodemon server.mjs",
"test": "echo "Error: no test specified" && exit 1"
},
server.mjs 扩展名是 .mjs,不是 .js, 因为 top level await 语法只能在 ECMAScript module 中使用。
如果不使用 .mjs 扩展名, 那么就需要在 package.json 中增加一行 "type": "module",如下所示:
{
"name": "redis_node_docker",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
同时 "serve": "nodemon server.mjs" 改成 "serve": "nodemon server.js"。
以上是设置,server.js 或者 server.mjs 中的代码和上面的sample code几乎完全相同:
import redis from "redis"
const client = redis.createClient()
client.on('error', (err) => console.log('Redis Client Error', err));
await client.connect();
await client.set('key', 'redis');
const value = await client.get('key');
console.log(value)
terminal 运行 npm run serve,输出:
[nodemon] starting `node server.js` redis



