【工具与中间件】Linux-Docker-Redis

当你翻旧物发现了宝贝......

0. 前言

某天秋高气爽(emmm,发文时可能已立冬了),风和日丽,广东这边一如既往地闷热(成功水字一行,手动emoj)。闲来无事,打开尘封已久的服务器一看,嗯,风平浪静,并没有受到攻击。于是,我就想着看看能不能在这台服务器搞点什么东西,做个项目学习一下。

一般web项目缓存都会用到redis,那就先从配一个redis开始吧!现在流行用 docker 配置,正准备下载 docker 呢, 随手 docker images 一下,好家伙,原来不知道什么时候已经有了(云服务器送的? 还是哪天我乱搞搞上去的?)不记得,不管了,那咱就直接docker 下 安装 redis 吧!

当然了,为了更好地水一水字数,下文还是会提一下 Docker 及 Redis 的一些基本概念,方便自己及各位读者大大后续学习。

学习目标
Docker 下 安装 Redis, 并能访问。后续可根据本次 Docker 配置 及 Redis 下载,对 Docker 以及 Redis 进行更深入学习,并将其运用到个人项目中。

参考教程

1. Linux 下 安装 Docker

1.1 Docker 基本概念

本小节我们介绍 Docker 的基本概念。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 ——《百度百科》

其中,Docker 有 三大核心概念: 仓库、镜像、容器,我们必须了解,便于日后更深入的学习:

仓库
仓库类似于我们常用的代码仓库,与 Maven 仓库、 Git Hub 等类似,此处主要指 docker hub,远程仓库。仓库的贡献者是全世界的程序员,我们的镜像主要从仓库中拉取。一般常用的镜像拉取下来之后都是开箱即用。

镜像
docker 镜像类似于虚拟机镜像。docker 镜像 提供了虚拟机运行所需的库、资源、配置等文件,也提供了许多运行时参数。

从我个人对各类镜像的使用体验看来,我个人将镜像看作是一个大点的安装包,像是系统镜像。仅从使用的角度,我们把它当作安装包就好了。

容器
容器也类似于我们常见的容器概念。每个容器是独立的,互不干扰。当然如果特定需求要让不同容器里的不同服务相互产生联系也不是不行,需要另寻解决方案。就像是我们生活中衣柜、文件柜等都可以看作一个个容器,一般情况下,根据用途分门别类放置物品。
其中,docker 容器 由docker 镜像生成。从严格意义上来说,镜像层是只读的,docker 在镜像层上层 创建一个可写层,镜像本身不变。

上次公司内部培训,我一位师兄作为讲师,他是这么教我们的:看Docker 的 LOGO 多像集装箱,相互独立,互不影响,里面装的货物都能各自使用。 这是因为每个 docker 容器 里跑的是一个个虚拟机,镜像在虚拟机里运行,就像是我们在 Windows 安装的 VMware。 至于获取镜像的仓库,类似于Maven、某Hub等远程仓库,里面放了很多大家做好的镜像,拉下来用即可。

以上概念太多不好理解?在深入学习之前,我们可以先收藏 Docker 三大核心概念,然后 简单地 理解: Docker 是一些大佬做的工具,我们重点学习的是如何使用这个工具。

至于 Docker 更深入的概念,篇幅有限,下次我们再一起学习吧!

1.2 Linux 安装 Docker

虽然俺的服务器已安装了Docker,但来都来了,怎么样也得给兄弟们重新安装一遍,争取一文会用 Docker 嘛。

1.2.1 安装

我的是CentOS,按照官网提示,CentOS docker 键入如下命令安装:

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

当然,由于网络、yum工具没有及时更新等原因,直接使用官网给的命令下载不一定成功,此时,我们可选用一些其它参考文章推荐的安装方式,例如:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

安装成功后,执行 docker -v命令,若成功输出 docker 版本,则安装成功。

docker -v
Docker version 24.0.7, build afdd53b

1.2.2 Hello World

程序员的第一句代码都是hello world,docker 也不例外。已有大佬在docker 仓库上打包好了 hello world 镜像。在正式开始学习 docker 常用命令之前,我们先走个流程运行 hello world镜像吧!

启动docker
初次使用docker ,很有可能会因为系统并没有运行docker 而导致 执行 docker 命令时报 Cannot Connect to the Docker Daemon at ‘unix:///var/run/docker.sock, 此时我们先启动docker 就可解决

# 启动docker
[root@localhost ~]# systemctl start docker

# 查看docker 状态
[root@localhost ~]# systemctl status docker

拉取hello-world镜像

docker pull hello-world

出现以下说明成功:


[root@localhost ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
719385e32844: Pull complete
Digest: sha256:88ec0acaa3ec199d3b7eaf73588f4518c25f9d34f58ce9a0df68429c5af48e8d
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

跑一跑hello-world

docker run hello-world

效果:

[root@localhost ~]# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

执行成功,欢迎来到 docker 的世界!

1.3 Docker 常用命令

好了,现在我们有了Docker,在正式拉取我们所需的镜像之前,我们先熟悉一下Docker 常用命令吧!

1.3.1 系统启动/暂停/卸载 docker

要让 docker 根据我们的需求(一般都是开机自启)如期启动运行,首先我们要从系统层面设置 docker 开机自启:

# 启动Docker
systemctl start docker
# 停⽌Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机⾃启
systemctl enable docker

若是 docker 由于某些原因损坏,需要重装,那么可参考以下卸载命令:

yum remove docker

1.3.2 docker 容器的增/删/停/查看状态

docker 常见命令。篇幅有限,本小节只介绍相关命令,至于命令的细节,如命令的各参数,读者请自行查阅。

相关命令

# 拉取镜像
docker pull

# 推送镜像到Docker Registry
docker push

# 查看本地镜像
docker images

# 删除本地镜像
docker rmi 

# 创建并运行容器
docker run

# 停止指定容器
docker stop

# 启动指定容器
docker restart

# 删除指定容器
docker rm

# 查看容器
docker ps

# 查看容器运行日志
docker logs

# 进入容器
docker exec

# 保存镜像到本地压缩文件
docker save

# 加载本地压缩文件到镜像
docker load

# 查看容器详细信息
docker inspect

细心的同学可能发现了,除了要加上 docker 前缀,以及 部分参数可能要遵循 docker 的规则,docker 的大部分命令与 Linux 命令很像。触类旁通。

实践
我们可以将上文提到的hello-world 进行 docker 命令的练习。此处给个我个人练习的示例 :

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED       STATUS                   PORTS     NAMES
8b039b88c24c   hello-world   "/hello"   4 hours ago   Exited (0) 4 hours ago             gracious_mcclintock
[root@localhost ~]# docker rm 8b039b88c24c
8b039b88c24c
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
redis         latest    7f27d60cb8e0   12 days ago    138MB
hello-world   latest    9c7a54a9a43c   6 months ago   13.3kB
[root@localhost ~]# docker rmi 9c7a54a9a43c
Untagged: hello-world:latest
Untagged: hello-world@sha256:88ec0acaa3ec199d3b7eaf73588f4518c25f9d34f58ce9a0df68429c5af48e8d
Deleted: sha256:9c7a54a9a43cca047013b82af109fe963fde787f63f9e016fdc3384500c2823d
Deleted: sha256:01bb4fce3eb1b56b05adf99504dafd31907a5aadac736e36b27595c8b92f07f1
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
redis        latest    7f27d60cb8e0   12 days ago   138MB
[root@localhost ~]#

哈哈,上述例子 redis 偷跑了(这是本文第二个主题,也是我本人原本要的目标镜像与容器),没关系,在下一小节我们依然会介绍docker 下载 redis, 并简要介绍 redis 相关 概念

1.3.3 小结

Docker 除了可以拉取仓库上的镜像并创建容器,还可以将自己的项目制作成镜像并在容器里启动。

至于 Docker 更高级的用法,篇幅有限,请读者留意工作中的小确幸,自行体验。

1.4 Docker 可视化工具推荐

命令敲烦了?命令太多记不住?没关系,Docker 可视化工具来帮你。
本小节我们推荐两个常用的 Docker 可视化工具。

至于更多优秀的可视化工具,篇幅有限,请读者自行发掘。

2. Docker 下 安装 Redis

2.1 Redis 基本概念

本小节我们介绍 Redis 的基本概念。

2.1.1 Redis 是什么

Redis是一种高性能的开源内存数据库,它主要用于缓存、数据存储和消息传递。Redis的基本原理是将数据存储在内存中,以提供快速的读写操作。它使用键值对的方式存储数据,并支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。Redis还具有持久化的能力,可以根据不同的持久化策略将数据定期写入磁盘,以防止数据丢失。此外,Redis还支持发布/订阅模式,允许不同的应用程序之间进行实时消息传递。

实际工作中,我们常用 Redis 来进行缓存。除此之外,使用 Redis 还能实现单点登录、MQ等功能,甚至可当作数据库存储数据。

2.1.2 Redis 常见数据结构

Redis 常见的数据结构有:

  • 字符串String:由于串的特性,字符串的访问速度非常快。常用于缓存用户名、邮箱地址等信息。
  • 列表List:Redis 的列表是有序列表,每个元素都有自己索引。常用于缓存任务队列、消息队列。
  • Set: 类似于我们常见的Set,每个元素不重复。常用于存储一些tag等非重复信息。
  • Soorted Set: 有序集合, 可以实现排序、排名等功能。
  • 哈希表Hash: 键值对,可以用它来实现灵活的数据结构。常用于缓存用户信息、物品信息等。

至于 Redis 更深入的概念,及常见面试题,篇幅有限,请读者自行查阅。

2.2 Docker 下安装 Redis

有了上面一个章节的铺垫,docker 安装 Redis 就轻松了许多!本小节就当作是 docker 实战演练吧!

Docker 拉取 Redis

# 走流程,查看 Redis
docker search redis

# 拉取 latest 版本 Redis
docker pull redis

# 拉取完毕后查看镜像
docker images

以下是我个人执行的效果:

[root@localhost ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
578acb154839: Already exists
9a217a51793f: Pull complete
07058ed9ec8f: Pull complete
d3ba9a132495: Pull complete
adeece162a71: Pull complete
4f4fb700ef54: Pull complete
7018b7448b70: Pull complete
Digest: sha256:ac4e8dd2fed59eddba2805411db8664f5fd69a64f33303f3b8fec79abd4ff97a
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
redis        latest    e10bd12f0b2d   5 days ago    138MB

Redis 配置
这一段我们参考本文开头的参考教程来:
这里主要的步骤是将Redis的配置文件进行挂载,以配置文件方式启动Redis容器。这里涉及一个概念挂载:将宿主机的文件和容器内部目录相关联,相互绑定。

(1) 创建redis相关目录

[root@localhost /]# mkdir -p /home/redis/myredis
[root@localhost /]# cd /home
[root@localhost home]# ls
redis  sharry
[root@localhost home]# cd redis
[root@localhost redis]# ls
myredis
[root@localhost redis]# cd myredis/
[root@localhost myredis]# mkdir data

(2) 编辑/上传conf文件

# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
# bind 127.0.0.1

protected-mode no

port 6379

tcp-backlog 511

requirepass 000415

timeout 0

tcp-keepalive 300

daemonize no

supervised no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile ""

databases 30

always-show-logo yes

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

repl-disable-tcp-nodelay no

replica-priority 100

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

appendonly yes

appendfilename "appendonly.aof"

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble yes

lua-time-limit 5000

slowlog-max-len 128

notify-keyspace-events ""

hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

stream-node-max-bytes 4096
stream-node-max-entries 100

activerehashing yes

hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

(3) 启动容器

docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis                -v /home/redis/myredis/myredis.conf:/etc/redis/redis.conf -v /home/redis/myredis/data:/data -d redis redis-server /etc/redis/               redis.conf  --appendonly yes  --requirepass password

(4) 查看Redis容器状态

docker ps -a
docker ps -a |grep myredis
docker exec -it myredis redis-cli

上述命令若有正确返回,且进入Redis容器后启动 cli 并输入密码后能正常操作,则说明成功。

好嘞,至此我们 docker 下载并配置 redis 完成!接下来,我们可以愉快地使用了!对于初学或想快速回顾的读者,下文我还提了一些 Redis 相关概念(凑字数),欢迎继续阅读 ~

2.3 Redis 常用命令

以下简单介绍 Redis 常用命令。 一般情况下, Redis 的使用频次没有 SQL 多,如非面试,也无需硬记,当作字典,用到的时候再查即可。

* SET key value:设置 key 的值为 value。 
* GET key:获取 key 的值。 
* INCR key:将 key 的值加 1。 
* DECR key:将 key 的值减 1。 
* LPUSH key value:将 value 插入到列表 key 的表头。 
* RPUSH key value:将 value 插入到列表 key 的表尾。 
* LRANGE key start stop:获取列表 key 中 start 至 stop 之间的元素。 
* SADD key member:将 member 添加到集合 key 中。 
* SMEMBERS key:获取集合 key 中的所有元素。 
* SCARD key:获取集合 key 的元素个数。 
* HSET key field value:将 field 的值设置为 value 。 
* HGET key field:获取 field 的值。 
* HKEYS key:获取 key 中所有的 field。 
* HMGET key field1 field2 ...:获取 key 中多个 field 的值。 
* HMSET key field1 value1 field2 value2 ...:同时设置多个 field 的值。 
* HDEL key field1 field2 ...:删除 key 中多个 field。 
* HLEN key:获取 key 中 field 的个数。 
* INCRBY key increment:将 key 的值加上 increment。 
* DECRBY key decrement:将 key 的值减去 decrement。 
* EXPIRE key seconds:设置 key 的过期时间为 seconds 秒。 
* TTL key:获取 key 的剩余过期时间(以秒为单位)。 
* KEYS pattern:获取所有符合 pattern 的 key。 
* FLUSHDB:清空当前数据库。 
* FLUSHALL:清空所有数据库。

至于 Redis 更高级的用法,以及常用的结合工具包,让我们在项目中可以用代码操作redis,及常见面试题,篇幅有限,请读者自行查阅。

2.4 Redis 可视化工具推荐

命令敲烦了?命令太多记不住?没关系,Redis 可视化工具来帮你。
本小节我们推荐一下两个常用的 Docker 可视化工具。

至于更多优秀的可视化工具,篇幅有限,请读者自行发掘。

3. 总结

本文主要介绍一次个人无意中发现了自己原来有台服务器以及安装了Docker,本着物尽其用的原则实操 Linux OS 下载Docker、 Docker 的基本使用(入门)、Docker 下安装Redis(实战)并记录成此文。

顺便简要介绍了一下 Docker 、 Redis 这两个工作中常用工具的概念,以便快速入门或回顾。当作是买一送一,供读者参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值