docker|redis的面试题——七道

目录

1、redis的作用和使用场景

redis的作用:

redis的使用场景:

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

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

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

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

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

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

一、容器管理命令

[1. 容器生命周期](#1. 容器生命周期)

[2. 容器状态查看](#2. 容器状态查看)

[3. 容器交互](#3. 容器交互)

二、镜像管理命令

[1. 镜像操作](#1. 镜像操作)

[2. 镜像导出与导入](#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 中的 saveappendonly
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)。

相关推荐
LuiChun6 小时前
与精神病患者的日常探讨20260913
docker
闲云野鹤在人间6 小时前
Docker入门|第1章 容器生态系统完整解析
运维·服务器·docker·容器·centos
程序猿乐锅7 小时前
【黑马点评 | 第一篇】从 Session 到 Redis+Token 的改造与拦截器实现
数据库·redis·缓存
野生技术架构师7 小时前
Redis Hot Key 与 Big Key:危害、发现与解决方案
数据库·redis·缓存
学渣超8 小时前
从一次早高峰数据库告警说起:你真的理解缓存该如何落地应用吗?
redis·后端·架构
KIDULT°8 小时前
Docker 从 0 入门|吃透容器生态、架构与 Dockerfile 实战
docker·容器·架构
putItInYourHand9 小时前
Docker Compose 部署 Mosquitto MQTT Broker 完整实战指南
运维·docker·容器
程序员清风9 小时前
Python 操作 MySQL、Redis 与消息队列的完整实践
redis·python·mysql
生活爱好者!18 小时前
哇!影视新玩法!docker部署NEOWATCH NAS
运维·docker·容器
cpolar技术支持21 小时前
Docker 容器启动失败怎么查?端口、日志、权限与网络排障完整教程
linux·docker·容器·cpolar·网络排障