docker|redis的面试题——七道

发布于:2025-06-20 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

1、redis的作用和使用场景

redis的作用:

redis的使用场景:

2、redis支持的数据类型有哪些?

3、redis针对key常见的通用命令有哪些?

4、描述docker搭建nginx的基本步骤

5、描述docker搭建mysql的基本步骤

6、描述docker搭建redis的基本步骤

7、docker针对容器、镜像常见的各种命令有哪些? 比如创建容器、查看日志、进入容器内部、删除容器、停止容器、查看容器等 比如拉取镜像,删除镜像等

一、容器管理命令

1. 容器生命周期

2. 容器状态查看

3. 容器交互

二、镜像管理命令

1. 镜像操作

2. 镜像导出与导入

三、容器和镜像命令对比速查表


1、redis的作用和使用场景

redis 属于NOSQL的一种

  • Redis:Remote Dictionary Server(远程字典服务器)

  • 是完全开源免费的,用C语言编写的,遵守BSD协议,key-value数据库,内存数据库,NoSql数据库,缓存数据库。

  • 是一个高性能的(key/value)分布式内存数据库,基于内存运行,(高性能:官方提供测试数据,50个并发执行100000 个请求,读的速度是110000次/s,写的速度是81000次/s)。

  • 实际工作中用redis进行缓存数据实现

  • 并支持持久化NoSQL数据到磁盘,是当前最热门的NoSql数据库之一,一般用来处理并发高的数据操作。

redis的作用:

  • 内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务

  • 模拟类似于HttpSession这种需要设定过期时间的功能

  • 发布、订阅消息系统

  • 定时器、计数器

  • 分布式锁(分布式系统调节)

redis的使用场景:

  • 在内存空间中存储数据(存取效率极高)

  • 适合小批量数据的存储(运行内存)

  • 适合频繁访问的,不经常更新的数据存储

2、redis支持的数据类型有哪些?

  • Redis现在支持十种数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合),stream(流),geospatial(地理),bitmap(位图),bitfield(位域),hyperloglog(基数统计)

  • Redis常用五种数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)(掌握

3、redis针对key常见的通用命令有哪些?

  • keys * 把当前库中的所有的key 列出来

  • set k1 v1 保存key-value形式的数据,如果k1已经存在 新值覆盖旧值

  • del k1 删除键值是 k1的

  • EXISTS k1 判断键值为k1是否存在, 存在返回1, 不存在返回0

  • ttl k1 返回k1的过期时间, -1代表永久有效, -2代表已经过期了 ,如果过期,那么就自动清除

  • expire k2 20 给已经存在的k2设定有效期是20秒,单位秒

  • MOVE k1 1 把k1移到第2个数据库中

  • PERSIST k1 把已经存在设置了过期时间的k1设置为永久有效

4、描述docker搭建nginx的基本步骤

基本步骤

步骤 操作
1. 拉取镜像 docker pull nginx:版本号
2. 创建目录 mkdir -p ~/nginx/{conf,html,logs}
3. 挂载运行 docker run -d -p 80:80 -v 挂载目录 --name my-nginx nginx:版本号
4. 测试访问 curl http://localhost或或在浏览器访问 http://服务器IP
5. 管理容器 docker stop/start/rm my-nginx

解释说明:

2、创建目录

  • conf/:存放自定义 Nginx 配置文件(如 nginx.conf

  • html/:存放网站静态文件(如 index.html

  • logs/:存放 Nginx 日志文件

3、挂载运行

  • -p 80:80:将主机的 80 端口映射到容器的 80 端口。主机端口可能会被占用可以换主机端口。

  • -v ~/nginx/html:/usr/share/nginx/html   挂载网站文件目录。

  • -v ~/nginx/conf:/etc/nginx  挂载自定义 Nginx 配置。

  • -v ~/nginx/logs:/var/log/nginx  挂载日志目录。 

5、管理容器

  • docker stop my-nginx   # 停止容器

  • docker start my-nginx  # 启动容器

  • docker restart my-nginx  # 重启容器

  • docker rm -f my-nginx  # 删除容器

5、描述docker搭建mysql的基本步骤

此处以mysql8为例。mysql版本与本地mysql的版本号一致。

基本步骤:

步骤 关键操作
1. 拉取镜像 docker pull mysql:8.0/5.0
2. 创建目录 mkdir -p ~/mysql/{data,conf,logs}
3. 运行容器 docker run -id -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456qwe --name mysql8 mysql:8.0
4. 挂载数据 -v ~/mysql/data:/var/lib/mysql
5. 连接测试 docker exec -it mysql8 mysql -uroot -p

解释说明:

 3、运行容器

  • -e MYSQL_ROOT_PASSWORD必填,设置 root 用户密码。

  • -p 3306:3306:将主机的 3306 端口映射到容器的 3306 端口。

  • --restart=unless-stopped:容器意外退出时自动重启。

4、挂载数据

  •   -v ~/mysql/data:/var/lib/mysql \  # 挂载数据目录

  •   -v ~/mysql/conf:/etc/mysql/conf.d \  # 挂载配置

  •   -v ~/mysql/logs:/var/log/mysql \  # 挂载日志

5、连接测试

  • docker ps  # 查看容器状态

  • docker logs mysql8  # 检查日志

  • docker run:创建并启动新容器。

  • docker exec:对已存在的容器执行操作。

  • -it       

  1.  -i (--interactive):保持标准输入(STDIN)打开,允许交互。

  2. -t (--tty):分配一个伪终端(TTY),使命令行界面可交互。

  3. 组合效果:让你可以像在本地终端一样与容器内的 MySQL 客户端交互。

6、常用管理命令

操作 命令
停止容器 docker stop mysql8
启动容器 docker start mysql8
重启容器 docker restart mysql8
删除容器 docker rm -f mysql8
进入容器 docker exec -it mysql8 bash

7、为什么要挂载数据?

挂载数据(Volume Mounting)是 Docker 中持久化存储的核心机制,对 MySQL 这类数据库尤为重要。 

1) 避免数据丢失(核心原因)

  • Docker 容器的默认存储是临时的
    如果容器被删除(如 docker rm),容器内所有数据(包括 MySQL 的数据文件)会永久丢失

    docker rm -f mysql8  # 删除容器后,未挂载的数据全部消失
  • 挂载后:数据存储在主机磁盘上,即使容器删除,数据依然保留在主机目录中(如 ~/mysql/data)。

2)方便备份与迁移

  • 直接操作主机文件:
    挂载后,MySQL 的数据文件(如 ibdata1*.ibd)存储在主机目录中,可直接通过 cprsync 或压缩打包备份。

    tar -czvf mysql_backup.tar.gz ~/mysql/data  # 备份数据目录
  • 跨容器共享数据:
    新容器只需挂载同一目录即可恢复数据,适合迁移或升级 MySQL 版本。

3)提升性能

  • 绕过容器存储驱动:
    Docker 的默认存储驱动(如 overlay2)会引入额外性能开销,直接挂载主机目录可减少这一层损耗,尤其对 I/O 密集型的数据库操作有利。

4)灵活配置与管理

  • 修改配置无需重建容器:
    挂载 MySQL 配置文件(如 my.cnf)后,可直接在主机上编辑配置,重启容器即可生效。

    vim ~/mysql/conf/my.cnf  # 修改配置
    docker restart mysql8     # 重启生效
  • 查看日志更便捷:
    挂载日志目录后,可直接在主机上用 tailcat 等工具分析日志。

6、描述docker搭建redis的基本步骤

基本步骤:

步骤 命令/操作
1. 拉取镜像 docker pull redis:7.0(最新版)
2. 创建目录(持久化存储) mkdir -p ~/redis/{data,conf}
3. 配置持久化 修改 redis.conf 中的 save 或 appendonly
4. 创建并运行容器(容器取名叫my-redis docker run -id \
  --name my-redis \
  -p 6379:6379 \
  -v ~/redis/data:/data \
  -v ~/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  redis:latest \
  redis-server /usr/local/etc/redis/redis.conf
5. 验证 docker exec -it my-redis redis-cli ping

 进入到redis中,了解redis配置信息

设置共享目录和配置文件后启动容器

[root@hcss-ecs-b839 data]# ls /opt/redis/
redis.conf
[root@hcss-ecs-b839 data]# cat /opt/redis/redis.conf
requirepass 123456
[root@hcss-ecs-b839 data]# pwd
/usr/local/docker/data
[root@hcss-ecs-b839 data]# ls
docker run -id -p 6379:6379 --name redis7.2 -v  /opt/redis/redis.conf:/usr/local/bin/redis.conf -v  /usr/local/docker/data:/data  redis:7.0.2  redis-server /usr/local/bin/redis.conf

修改配置文件在redis.conf里面加上masterauth 123456后,重启容器

配置项 用途 注意事项
masterauth 从节点认证主节点的密码 必须与主节点 requirepass 一致
requirepass 主节点设置访问密码 从节点和客户端均需使用此密码

docker restart redis7.2

客户端远程连接

cmd窗口中,切到redis-cli所在目录 ​

redis-cli -h ip -p 端口号  
keys *  提醒你,需要认证
​
auth 123456  输入密码认证

解释说明:

2、创建目录

  • data/:存放 Redis 持久化数据(RDB/AOF 文件)

  • conf/:存放自定义配置文件(如 redis.conf

3、配置持久化

  • # 启用持久化(二选一)
  1. save 60 1000                  # 60秒内至少1000次修改则触发RDB
  2. appendonly yes                # 启用AOF持久化
  • # 安全设置
  1. requirepass yourpassword      # 设置访问密码
  2. bind 0.0.0.0                  # 允许远程连接

4、运行容器

命令的解释

1. docker run -d

  • docker run:创建并启动新容器。

  • -d (--detach):后台运行容器(不阻塞终端)。

2. -p 6379:6379

  • 端口映射,格式为 -p <主机端口>:<容器端口>

  • 将主机的 6379 端口映射到容器的 6379 端口,允许通过主机访问 Redis。

3. 数据卷挂载(-v)实现宿主机和容器数据共享

冒号前是宿主机文件目录,冒号后是redis容器的文件目录

挂载参数 作用
-v ~/redis/data:/data 将主机的 ~/redis/data 挂载到容器的 /data,用于持久化 Redis 数据(RDB/AOF 文件)。
-v ~/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf 将主机的自定义配置文件挂载到容器内,覆盖默认配置。

4. redis:latest

  • 指定使用的镜像(此处为最新版 Redis)。

5. redis-server /usr/local/etc/redis/redis.conf

  • 容器启动后执行的命令:加载挂载的自定义配置文件启动 Redis 服务。

7、docker针对容器、镜像常见的各种命令有哪些? 比如创建容器、查看日志、进入容器内部、删除容器、停止容器、查看容器等 比如拉取镜像,删除镜像等

一、容器管理命令

1. 容器生命周期

命令 作用 示例
创建并启动容器 从镜像创建新容器 docker run -d --name my-nginx nginx:latest
启动已停止的容器 启动已有的容器 docker start my-nginx
停止容器 优雅停止运行中的容器 docker stop my-nginx
强制停止容器 立即终止容器进程 docker kill my-nginx
重启容器 重启容器 docker restart my-nginx
删除容器 删除已停止的容器 docker rm my-nginx
强制删除容器 删除运行中的容器 docker rm -f my-nginx

2. 容器状态查看

命令 作用 示例
查看运行中的容器 列出活跃容器 docker ps
查看所有容器 包括已停止的容器 docker ps -a
查看容器详情 显示容器配置信息 docker inspect my-nginx
查看容器日志 输出容器日志 docker logs my-nginx
实时查看日志 跟踪日志输出 docker logs -f my-nginx
查看资源占用 显示CPU/内存等 docker stats my-nginx

3. 容器交互

命令 作用 示例
进入容器终端 交互式访问容器 docker exec -it my-nginx /bin/bash
在容器内执行命令 不进入容器直接执行命令 docker exec my-nginx ls /app

二、镜像管理命令

1. 镜像操作

命令 作用 示例
拉取镜像 从仓库下载镜像 docker pull nginx:latest
删除镜像 删除本地镜像 docker rmi nginx:latest
强制删除镜像 删除被容器使用的镜像 docker rmi -f nginx:latest
查看镜像列表 查看本地镜像 docker images
查看镜像详情 显示镜像元数据 docker inspect nginx:latest
构建镜像 通过Dockerfile构建 docker build -t my-app:1.0 .

2. 镜像导出与导入

命令 作用 示例
导出镜像为文件 保存镜像到tar包 docker save -o nginx.tar nginx:latest
从文件导入镜像 加载tar包为镜像 docker load -i nginx.tar

三、容器和镜像命令对比速查表

场景 容器命令 镜像命令
查看列表 docker ps docker images
删除资源 docker rm docker rmi
查看详细信息 docker inspect docker inspect
运行/停止 docker start/stop

8、创建并运行容器的命令解释docker run -id --name my-nginx nginx:latest

常见组合选项

选项 全称 用途 常用场景
-i --interactive 保持 STDIN 打开 交互式程序(如 /bin/bash
-d --detach 后台运行容器 服务类容器(Nginx/MySQL)
-t --tty 分配伪终端 需交互式 Shell 时
-it -i + -t 交互式终端(常用组合) 调试容器(如 docker exec -it
  • -id 是 -i(交互)和 -d(后台)的合并写法。

  • 对于 Nginx 这类服务:只需 -d-i 是多余的。

  • 对于需要交互的容器(如调试):用 -it(如 docker exec -it)。

 


网站公告

今日签到

点亮在社区的每一天
去签到